微机原理课件chap3_3.ppt_第1页
微机原理课件chap3_3.ppt_第2页
微机原理课件chap3_3.ppt_第3页
微机原理课件chap3_3.ppt_第4页
微机原理课件chap3_3.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1 格式 INCreg mem功能 类似于C语言中的 操作 对指定的操作数加1例 INCALINCSIINCBYTEPTR BX 4 注 本指令不影响CF标志 3 加1指令INC 单操作数指令 2 ADD ADC对条件标志位 CF OF ZF SF 的影响 CF位表示无符号数相加的溢出 OF位表示带符号数相加的溢出 3 1 不考虑借位的减法指令SUB格式 SUBdest src操作 dest dest src 注 1 源和目的操作数不能同时为存储器操作数2 立即数不能作为目的操作数指令例子 SUBAL 60HSUB BX 20H DXSUBAX CX 2 减法指令 4 SBB指令主要用于多字节的减法 格式 SBBdest src操作 dest dest src CF 指令例子 SBBAX CXSBBWORDPTR SI 2080HSBB SI DX 2 考虑借位的减法指令SBB 5 例 x y z均为32位数 分别存放在地址为X X 2 Y Y 2 Z Z 2的存储单元中 用指令序列实现w x y 24 z 结果放在W W 2单元中 MOVAX XMOVDX X 2ADDAX YADCDX Y 2 x yADDAX 24ADCDX 0 x y 24SUBAX ZSBBDX Z 2 x y 24 zMOVW AXMOVW 2 DX 结果存入W W 2单元 6 作用类似于C语言中的 操作符 格式 DECopr操作 opr opr 1指令例子 DECCLDECBYTEPTR DI 2 DECSI 3 减1指令DEC 7 格式 NEGopr操作 opr 0 opr 对一个操作数取补码相当于用0减去此操作数 故利用NEG指令可得到负数的绝对值 例 若 AL 0FCH 则执行NEGAL后 AL 04H CF 1本例中 0FCH为 4的补码 执行求补指令后 即得到4 4的绝对值 4 求补指令NEG 8 SUB SBB对标志位 CF OF ZF SF 的影响 CF 1表示无符号数减法溢出 OF 1表示带符号数减法溢出 NEG指令对CF OF的影响 CF 操作数为0时 求补的结果使CF 0 否则CF 1 OF 字节运算对 128求补或字运算对 32768求补时OF 1 否则OF 0 9 格式 CMPdest src操作 dest src CMP也是执行两个操作数相减 但结果不送目标操作数 其结果只反映在标志位上 指令例子 CMPAL 0AHCMPCX SICMPDI BX 03 5 比较指令CMP 10 根据标志位来判断比较的结果 1 根据ZF判断两个数是否相等 若ZF 1 则两数相等 2 若两个数不相等 则分两种情况考虑 比较的是两个无符号数若CF 0 则dest src 若CF 1 则dest src 比较的是两个有符号数若OF SF 0 则dest src 若OF SF 1 则dest src 11 比较指令在使用时 一般在其后紧跟一条条件转移指令 判断比较结果的转向 举例 比较AL BL CL中带符号数的大小 将最小数放在AL中 程序 CMPAL BL AL和BL比较JNGBBB 若AL BL 则转XCHGAL BL 若AL BL 则交换BBB CMPAL CL AL和CL比较JNGCCC 若AL CL 则转XCHGAL CL 若AL CL 则交换CCC HLT 12 进行乘法时 8位 8位 16位乘积16位 16位 32位乘积 1 无符号数的乘法指令MUL MEM REG 格式 MULsrc操作 字节操作数 AX AL src 字操作数 DX AX AX src 指令例子 MULBL AL BL 乘积在AX中MULCX AX CX 乘积在DX AX中MULBYTEPTR BX 3 乘法指令 13 格式与MUL指令类似 只是要求两操作数均为有符号数 指令例子 IMULBL AX AL BL IMULWORDPTR SI DX AX AX SI 1 SI 2 有符号数乘法指令IMUL 注意 MUL IMUL指令中 AL AX 为隐含的乘数寄存器 AX DX AX 为隐含的乘积寄存器 SRC不能为立即数 除CF和OF外 对其它标志位无定义 14 乘法指令对CF OF的影响 例 AL A5H 5B BL 11H 1 IMULBL AX AL BL A5 11 5B 11 060B F9F5 AX F9F5HCF OF 1 2 MULBL AX AL BL A5 11 0AF5 AX 0AF5HCF OF 1 15 4 除法指令 进行除法时 16位 8位 8位商32位 16位 16位商对被除数 商及余数存放有如下规定 被除数商余数字节除法AXALAH字除法DX AXAXDX 16 格式 DIVsrc操作 字节操作 AL AX SRC 的商 AH AX SRC 的余数字操作 AX DX AX SRC 的商 DX DX AX SRC 的余数指令例子 DIVCLDIVWORDPTR BX 注 若除数为零或AL中商大于FFH 或AX中商大于FFFFH 则CPU产生一个类型0的内部中断 1 无符号数除法指令DIV 17 2 有符号数除法指令IDIV 格式 IDIVsrc操作与DIV类似 商及余数均为有符号数 且余数符号总是与被除数符号相同 注意 对于DIV IDIV指令AX DX AX 为隐含的被除数寄存器 AL AX 为隐含的商寄存器 AH DX 为隐含的余数寄存器 src不能为立即数 对所有条件标志位均无定义 18 除法运算要求被除数字长是除数字长的两倍 若不满足则需对被除数进行扩展 否则产生错误 对于无符号数除法扩展 只需将AH或DX清零即可 对有符号数而言 则是符号位的扩展 可使用前面介绍过的符号扩展指令CBW和CWD 关于除法操作中的字长扩展问题 19 例 写出34H 25H的程序段 MOVAL 34HMOVBL 25HCBW AL的符号扩展到AHIDIVBL 0034H 25H 结果为 AH 0FH AL 01H 20 5 BCD码运算的十进制调整指令 专用于对BCD码运算的结果进行调整包括 AAA DAA AAS DAS AAM AAD均为隐含寻址 隐含的操作数为AL和AH为何要对BCD码的运算结果进行调整 BCD码本质上是十进制数 即应遵循逢十进一的规则 而计算机是按二进制 十六进制 进行运算 并未按十进制规则进行运算 21 1 加法的十进制调整指令 1 非压缩BCD码加法调整AAA本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正 得到一个正确的未组合的BCD码 AAA指令只影响AF和CF 其余标志无定义 AAA指令应紧跟在ADD或ADC指令之后 22 如果AL的低4位 9 AF 1 则 AL AL 6 AH AH 1 AF 1 AL AL 0FH CF AF否则AL AL 0FH AAA指令的操作如下 23 调整原理 先看一个例子计算8 900001000见右式 0000100100010001 11结果应为17 而计算机相加为11 原因在于运算过程中 如遇到低4位往高4位产生进位时 此时AF 1 是按逢十六进一的规则 但BCD码要求逢十进一 因此只要产生进位 个位就会少6 这就要进行加6调正 这个1代表了16 而实际上仅应为10 即多进了6 24 实际上当低4位的结果 9 即A F之间 时 也应进行加6调正 原因是逢十没有进位 故用加6的方法强行产生进位 如对上例的结果进行加6 0001000111 0000011060000011117 00001111 100001111 25 例2 有两个字符串形式的十进制数 2658和3619 求二者之和 即2658 3619 由题意知 被加数和加数的每一位都以ASCII码形式存放在内存中 假定二数在内存中均是低位在前 高位在后 另留出5个单元存放相加的结果 内存中数据存放形式见下页图 26 36H 32H 39H 31H STRING1 STRING2 38H 35H 36H 33H 被加数 加数 数据段 8 5 6 2 9 1 6 3 SUM 结果 27 程序段为 LEASI STRING1 STRING1偏移地址送SILEADI STRING2 STRING2偏移地址送DILEABX SUM SUM偏移地址送BXMOVCX 4 循环4次CLC 清进位标志AGAIN MOVAL SI ADCAL DI 带进位加AAA 未压缩BCD码调正MOV BX AL 结果存入SUMINCSI 调整指针INCDIINCBXDECCX 循环计数器减1JNZAGAIN 若未处理完 则转AGAIN 28 思考题 1 根据程序写出结果SUM的值 2 若最高位有进位 程序如何修改 3 从此例不难看出 用AAA指令也可对字符串形式的十进制数加法进行调整 所以它又被称为加法的ASCII调正指令 为什么AAA指令既可对非压缩BCD码加法进行调整 也可对ASCII码形式的十进制数进行调整 注意AAA指令的第 步 29 2 压缩BCD码加法调整DAA 两个压缩BCD码相加结果在AL中 通过DAA调整得到一个正确的压缩BCD码 指令操作 调整方法 若AL的低4位 9 AF 1则 AL AL 6 AF 1若AL的高4位 9 CF 1则 AL AL 60H CF 1除OF外 DAA指令影响所有其它标志 DAA指令应紧跟在ADD或ADC指令之后 30 例 0100100048HMOVAL 48H 0111010074HMOVBL 74H10111100BCHADDAL BL 0110011066HDAA100100010122H 进位 进位 执行ADD后 AL BCH 高4位低4位均大于9 故DAA指令执行加66H调整 最后结果为 AL 22H CF 1 AF 1 31 1 非压缩BCD码减法的十进制调正指令AAS对AL中由两个非压缩的BCD码相减的结果进行调整 调整操作为 若AL的低4位 9或AF 1 则 AL AL 6 AH AH 1 AF 1 AL AL 0FH CF AF否则 AL AL 0FH 2 减法的十进制调整指令 32 举例 16 8 MOVAX 0106H0000011006MOVBL 08H 00001000 08SUBAL BL11111110FEAAS 00000110 0611111000F8 00001111 0F0000100008结果为 AL 08H AH 0 CF AF 1 33 2 压缩BCD码减法的十进制调正指令DAS对AL中由两个压缩BCD码相减的结果进行调整 调整操作为 若AL的低4位 9 AF 1 则 AL AL 6 且AF 1若AL的高4位 9 CF 1 则 AL AL 60H 且CF 1DAS对OF无定义 但影响其余标志位 DAS指令要求跟在减法指令之后 34 3 乘法的十进制调正指令AAM对AX中由两个非压缩BCD码相乘的结果进行调整 调整操作为 AL 0AH AH 商 AL 余数隐含的操作寄存器为AL和AH AAM跟在MUL指令之后使用 影响标志位PF SF ZF 其它无定义 用AAM可实现 99的二 十进制转换 35 例1 按十进制乘法计算7 8 程序段如下 MOVAL 07H AL 07HMOVCL 08H CL 08HMULCL AX 0038HAAM AH 05H AL 06H所得结果为非压缩的BCD码 例2 把3AH转换成等值的十进制数 MOVAL 3AH 58AAM AH 05H AL 08H 36 4 除法的十进制调正指令AAD 对非压缩BCD除法运

温馨提示

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

评论

0/150

提交评论