微机原理与接口课件6.ppt_第1页
微机原理与接口课件6.ppt_第2页
微机原理与接口课件6.ppt_第3页
微机原理与接口课件6.ppt_第4页
微机原理与接口课件6.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第3章汇编语言程序设计 二 格式 伪指令 DOS BIOS调用 简单了解 重点 数据结构表示变量 指针程序结构程序流控制 条件 分支 循环 程序设计方法 AssemblyLanguageProgramming 2 2 编辑 汇编与链接程序 编辑器 Editor 程序设计汇编器 Assembler 汇编语言 与机器有关 MASM ASM TASM链接器 Linker 待装配的BIN指令代码可执行BIN指令代码 OBJ LIB etc XXXX EXE DLL 3 0000 0 3FF 环境与代码运行 FFFF 0 堆栈段 数据段 代码段 CS IP DS SS SP 系统起始运行程序 中断向量区 系统专用 栈底 最多4个活动段 分段结构 ES 4 STACK1SEGMENTPARASTACK STACK DB512dup 定义堆栈段STACK1512字节STACK1ENDSDATASEGMENT 定义数据段DATAMESSAGEDB ThisASampleProgram LFCR DB0DH 0AH AnyDATADW100 DATAENDS 数据段DATA结束CODESEGMENT 定义代码段CODEASSUMECS CODE DS DATA 说明汇编程序活动段范围 汇编语言源程序格式 例 段名 段说明保留字 标号 286 5 汇编语言例程 续1 MAINPROCFAR MS DOS模板语句START PUSHDSXORAX AXPUSHAX 保存返回指针DS 0START1 MOVAX DATAMOVDS AXLEABX MESSAGELOOP1 CMPBYTEPTR BX 24HJZNEXT 是结束符CALLPRINT ACHAR 输出该字符INCBXJMPSHORTLOOP1 继续 6 汇编语言例程 续2 NEXT RET 返回OSMAINENDPPRINT A CHARPROCMOVAH 5MOVDL BX 子程序 NEARINT21HRETPRINT A CHARENDP CODEENDSENDSTART 汇编结束 运行从START开始 7 伪操作命令例1 BV1DB30 20H 111110BBV2DB3DUP xx DB BV3DB Thisisaexample BV4DB WV1DWBV1 BV2 BV3 近指针变量WV2DDBV4 远指针变量DWV1DDWV1 WV2 指针的指针变量DP1DDPRC1 PRC2 PRC1 PRC2为过程名BV2LEQUBV4 BV3MOVBX MV1 4MOVAL BX AL JMPFARPTRDP1 4 执行 8 MYDATASEGMENTAT8A00HBV1DB30 20H 111110BBV2DB3DUP 20H DB BV3DB Thisisaexample BV4DB ItisaProblem WV1DWBV1 BV2 BV3WV2DWBV4DWV1DDWV1 WV2DW2DD MYDATAENDSBV2的地址 DW2的地址 8A00 0003H 8A00 003AH 0000 0003H 0006H 0008H 001AH 002AH 0030H 0032H 003AH 伪操作命令例1分析 9 CODESEGMENTPRC1PROCFAR 8B00 0000 PRC1ENDPPRC2PROCFAR 8B00 2C20 PRC2ENDPDP1DDPRC1 PRC2 8B00 3000 DP1内容 ASSUMECS CODE DS DATAJMPFARPTRDP1 4 目标地址 伪操作命令例2分析 00 00 00 8B 20 2C 00 8B 8B00 2C20 JMPFARPTRCS 3004H 10 汇编语言程序设计 方法回顾 步骤 分析 建模 算法 单任务同其它语言 存储空间单元 编程 调试 DEBUG版 反复 运行 发行 Release 版设计方法 自顶向下 逐步细化 层层分解 具体小任务 模块化程序设计 相对独立 功能单一 I O关系明确 合作 排障 Global Local变量 CS xxx Auto Static 11 汇编语言程序设计 结构 P166 质量评估内存容量 效率 速度 源代码 复杂性 可维护性 可靠性基本结构 单任务 顺序 分支 循环 乱序 MOVAX 100MOVBX 200MOVCX 8000ADDBX CX CMPBX 1000JZNEXT 12 顺序程序举例 计算f x 5x3 4x2 3x 12 5x 4 x 3 x 12计算f 6 FXCALCPROC ENTRYX x EXIT f x Used AX DXMOVAX 5MULXADDAX 4 MULX SUBAX 3 MULXADDAX 12MOVRESULT AXRETFXCALCENDP 传递方式 XDW6 MOVX 6存储变量传递参数 调用 MOVX 6 CALLFXCALC 13 顺序结构两个32位无符号数乘法 14 datasegmentnum1dw8000h 8000hnum2dw8008h 8000hmutdw4dup 0 dataendsstacksegmentstack stack db100dup s stackendscodesegmentpara code assumecs code ds data ss stack 15 staprocfarpushdsxorax axpushaxmovax dataMovds axLeabx num1 movbx offsetnum1Movax bx Movsi bx 4 Movdi bx 6 MulsiMov bx 8 axMov bx 10 dxMovax bx 2 MulsiAdd bx 10 ax 16 Adc bx 12 dxMovax bx muldiAdd bx 10 axAdc bx 12 dxAdcwordptr bx 14 0Mov bx 2 MuldiAdd bx 12 axAdc bx 14 dxRetStaendpCodeendsEndsta 17 汇编语言程序设计 分支结构 基本结构 单任务 顺序 分支 循环 CMPAL 100JZNEXTMOVCX 2000NEXT MOVCX 3000 CMPAL 100JZNEXT1JMPN100NEXT1 MOVCX 3000NEXT 18 例符号函数y 1当x 0y 0当x 0y 1当x 0 19 跳转结构根据X0给Y赋值 1 0 1MOVAL XXMOVAH 1CMPAL 0JGEXIT X 0 AH 1JZZEROMOVAH 1 0JMPEXITZERO MOVAH AL 0EXIT MOVYY AH 20 汇编语言程序设计 分支结构 基本结构 单任务 顺序 分支 循环 条件 数据比较结果散转 程序入口表 程序流变化 21 分支表 跳转结构 散转 表内 入口地址 SUB0 L H SUB1 L H 表内无条件转移指令JMPSUB0 JMPSUB1 按INDEX序号跳转到相应子程序DSEGSEGEMNTTABLEDWSUB0 SUB1 SUB2 SUB3 SUB4INDEXDW RESULTDW XDW2102 MOVAX DSEG SEGTABLEMOVDS AX 22 MOVBX OFFSETTABLEMOVSI INDEXADDSI SIJMPWORDPTR BX SI 转不同分支 分支表 跳转结构 散转 续1 SUB2 MOVAX 100MOVRESULT AXRET SUB1 MOVAX XSARAX 1 ADDAX AXMOVRESULT AXRET SUB0 MOVAX X 不同分支程序SHL AX 1 X 2MOVRESULT AXRET 23 汇编语言程序设计 循环结构 基本结构 单任务 顺序 分支 循环 N 结束循环 Y 计数循环条件循环 for i 0 i 100 i do while while do 24 25 循环结构 条件控制法先判断后工作while do MOVCX 0 CHECK CMPCX 100 JNCFINISH INCCX JMPCHECK FINISH 先工作后判断条件do whileMOVCX 0 CHECK INCCX CMPCX 100 JCCHECK FINISH 26 循环结构 求一个16位无符号数的整数平方根 选用牛顿迭代公式f x 0X n X n 1 f x n 1 f x n 1 X n 1 x n 1 2 k 2x n 1 X n 1 k x n 1 2 27 28 排序程序 29 30 汇编语言程序设计 结构 过程 子程序 反复使用程序段 简化设计 减少程序空间开销 易读 易维护调试 函数 方法ENTRY EXIT USED指明传递和保护 变量 寄存器 问题保护现场 恢复现场 主程序 调用者 子程序均可 主程序 调用者 完成PUSHAXPUSHBXCALLSUBRT 不保护 POPBXPOPAX SUBRTPROC 子程序完成SUNRT PUSHAXPUSHBX POPBXPOPAXRET 31 汇编语言程序设计 结构 过程 子程序 函数 方法 参数传递 寄存器传递 内存单元 全局 传递 速度快 但结构差 难维护MOVSI OFFSETSBuf headMOVDI OFFSETDbuf headMOVCX COUNTCALLBLKCHEK 堆栈传递 POP取 BP取 子RETn 主ADDSP 2 n intBLKCHEK amount int destp char srcp char C 多任务 中断 嵌套 任务通信 协调 PUSHSI PUSHDI PUSHCX ADDSP 6 C 32 33 用程序存储器传送 64位二进制加法 3 7 34 用堆栈传送 数组求和子程序 求出两列数组的和 3 8 35 过程 子程序 模块化 调用与参数传递 计算 N 8WORD N 12DWORD MOVAX N 计算MOVCX AXDECCXLP MULCXLOOPCXMOVRESULT AXRESULTDW 循环方式 36 过程 子程序调用 递归 计算 N12如何处理MOVAX N 计算CALLPCALCMOVRESULT AXRETRESULTDW 课外选做 观察堆栈变化 数据流和程序流 37 递归调用 续 PCALC CMPAX 1 递归函数JNZPCALC1RETPCALC1 PUSHAXDECAXCALLPCALC 递归调用POPBXMULBXRET 38 datasegmentnumdb3njdw dataendsstacksegmentstack stack db200dup s stackendscodesegmentpara code assumecs code ds data ss stackstaprocfarpushdsxorax axpushaxmovax datamovds ax 39 pushcxmovah 0moval numcallfactorx1 movnj axpopcxretstaendp 40 factorprocnearpushaxsubax 1jnefconpopaxjmpreturnfcon callfactorx2 popcxmulcxreturn retfactorendpcodeendsendsta 41 42 汇编语言程序举例 1 分块传送 DATASEGMENTSTRGDB256DUP 1 2 3 STG1EQUSTRG 7STG2EQUSTRG 27STRSEEQU50 串长DATAENDSSSTACKSEGMENTSTACKDB256DUP SSTACKENDSCODESEGMENTASSUMECS CODE DS DATA ES DATAMAIN MOVAX DATAMOVDS AX MS DOS程序 43 MOVES AXMOVCX STRSE MOVSI OFFSETSTG1 源串首址MOVDI OFFSETSTG2 目标首址CLD 增量方式PUSHSIADDSI STRSE 1 SI 源串末址CMPSI DIPOPSIJLOK 不重叠STD 重叠 按减量ADDSI STRSE 1 指向串末ADDDI STRSE 1OK REPMOVSB 程序举例 1 分块传送 续一 STAG1 STAG2 STRSE STAG1 STRSE 44 程序举例 1 分块传送 续二 MOVAX 4C00H 返回DOSINT21HCODEENDSENDMAIN 数据块传送 一般情况P204 45 程序举例 1 分块传送 通用子程序 通用子程序结构功能 串移动ENTRY DS SI 源串首址ES DI 目标首址CX 串长 考虑物理地址关系 数据块传送 一般情况 46 BLKMOVPROCPUSHDSPUSHESPUSHAXPUSHBXPUSHDXPUSHCXMOVAX SIMOVCL 4SARAX CL 右移4位MOVDX DSADDAX DSMOVDS AXANDSI 0FH 程序举例 1 分块传送 通用子程序 47 MOVBX DISARBX CL 右移4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论