算术和逻辑运算指令.pptx

上传人:wuy****n92 文档编号:90613146 上传时间:2023-05-17 格式:PPTX 页数:92 大小:374.61KB
返回 下载 相关 举报
算术和逻辑运算指令.pptx_第1页
第1页 / 共92页
算术和逻辑运算指令.pptx_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《算术和逻辑运算指令.pptx》由会员分享,可在线阅读,更多相关《算术和逻辑运算指令.pptx(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第5章章 算术和逻辑运算指令算术和逻辑运算指令 罗文坚罗文坚中国科大中国科大 计算机学院计算机学院http:/ REG/MEM,REG/MEM/IMM功能功能源源操作数操作数、目的操作数相加,结果存入目的操、目的操作数相加,结果存入目的操作数作数标志标志所有状态标志(所有状态标志(ZF、CF、PF、AF、SF 及及 OF)都受影响都受影响带进带进位加位加格式格式ADC REG/MEM,REG/MEM/IMM功能功能源源操作数操作数、目的操作数以及、目的操作数以及进位标志进位标志CF相加,相加,结果存入目的操作数结果存入目的操作数标志标志所有状态标志(所有状态标志(ZF、CF、PF、AF、SF

2、 及及 OF)都受影响都受影响加法指令加法指令加加1格式格式INC REG/MEM功能功能目的操作数加目的操作数加1标志标志除除CF标志位,其余状态标志都受影响标志位,其余状态标志都受影响交换交换并相并相加加 格式格式XADD REG/MEM,REG 功能功能(80486以上)源操作数和目的操作数相交换,以上)源操作数和目的操作数相交换,并将两者之和存入目的操作数并将两者之和存入目的操作数标志标志所有状态标志都受影响,根据加法结果设置所有状态标志都受影响,根据加法结果设置加法指令加法指令加法指令注意事项:加法指令注意事项:1.源操作数和目的操作数源操作数和目的操作数不能不能同时为内存单元同时为

3、内存单元(MEM)。)。2.不允许不允许与段寄存器(与段寄存器(SREG)相关的加法。)相关的加法。3.XADD指令的源操作数在指令的源操作数在寄存器寄存器(REG)中。)中。4.标志寄存器中标志寄存器中状态位状态位随运算结果而变化,但随运算结果而变化,但INC指令不影响指令不影响CF标志标志。5.指令中操作数是带符号数还是无符号数由指令中操作数是带符号数还是无符号数由程序员程序员解释。解释。q注意:第注意:第4章的数据传送指令不改变状态标志。章的数据传送指令不改变状态标志。Example 1例、例、试用加法指令对两个试用加法指令对两个8位位16进制数进制数5EH和和3CH求和,并分求和,并分

4、析加法运算指令执行后对标志位的影响。析加法运算指令执行后对标志位的影响。解:解:MOV AL,5EH;AL=5EH(94)MOV BL,3CH;BL=3CH(50)ADD AL,BL;结果结果AL=9AH运算后标志:运算后标志:ZF=0,AF=1,CF=0,SF=1,PF=1,OF=1。若程序员认为两个加数是若程序员认为两个加数是无符号数无符号数,则运算结果位,则运算结果位9AH,即,即154。此时,此时,SF标志和标志和OF标志没有意义。标志没有意义。若程序员认为两个加数是若程序员认为两个加数是有符号数有符号数,则运算溢出,结果无效。,则运算溢出,结果无效。此时,此时,CF标志没有意义。标志

5、没有意义。CF标志和标志和OF标志标志当当加加减减运运算算结结果果的的最最高高有有效效位位有有进进位位(加加法法)或或借借位位(减法)时,(减法)时,CFCF标志置标志置1 1,即,即CFCF1 1;否则;否则CFCF0 0。针针对对无无符符号号整整数数,判判断断加加减减结结果果是是否否超超出出表表达达范范围。围。N N个二进制位表达无符号整数的范围:个二进制位表达无符号整数的范围:0 02 2N N-1-1有有符号数符号数加减结果有溢出,则加减结果有溢出,则OF1;否则;否则OF0。针对针对有符号整数有符号整数,判断加减结果是否超出表达范,判断加减结果是否超出表达范围。围。N个二进制位表达有

6、符号整数的范围:个二进制位表达有符号整数的范围:2N12N1-1进位标志进位标志CF:举例:举例8位二进制数相加:位二进制数相加:001110100111110010110110十六进制表达:十六进制表达:3A7CB6转换成十进制数:转换成十进制数:58124182没有产生进位:没有产生进位:CF08位二进制数相加:位二进制数相加:1010101001111100100100110十六进制表达:十六进制表达:AA7C126转换成十进制数:转换成十进制数:17012429425638产生进位:产生进位:CF10182255进位进位1表达表达256溢出标志溢出标志OF:举例:举例8位二进制数相加:

7、位二进制数相加:001110100111110010110110十六进制表达:十六进制表达:3A7CB6转换成十进制数:转换成十进制数:58124182超出范围:超出范围:OF18位二进制数相加:位二进制数相加:1010101001111100100100110十六进制表达:十六进制表达:AA7C126转换成十进制数:转换成十进制数:8612438没有超出范围:没有超出范围:OF0182127补码补码AAH表达表达-86Example 2设一个学生的三门课的成绩分别设一个学生的三门课的成绩分别为为60、65、90,入学分数线为总,入学分数线为总分分256分,判断该学生是否取得入分,判断该学生是

8、否取得入学资格。学资格。;采用无符号数表示;采用无符号数表示MOV AL,60ADD AL,65ADD AL,90JC PASS;超过;超过256分?分?PASS:;取得入学资格;取得入学资格设张三在海拔设张三在海拔60米的地点,他先米的地点,他先往上走了往上走了65米,然后又往上走了米,然后又往上走了90米,请问他现在所在地点的海米,请问他现在所在地点的海拔高度?拔高度?;为便于表示低于海平面的;为便于表示低于海平面的;情况,采用有符号数表示;情况,采用有符号数表示MOV AL,60ADD AL,65JO ERROR;(AL)=01111101ADD AL,90JO ERROR;(AL)=1

9、1010111ERROR:;错误处理;错误处理进位和溢出的区别进位和溢出的区别进位标志进位标志反映反映无符号整数无符号整数运算结果是否超出范围运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确有进位,加上进位或借位后运算结果仍然正确溢出标志溢出标志反映反映有符号整数有符号整数运算结果是否超出范围运算结果是否超出范围有溢出,运算结果已经不正确有溢出,运算结果已经不正确处理器按照处理器按照无符号整数无符号整数求得结果求得结果在设置进位标志在设置进位标志CF的同时,根据是否超出有符号整数的的同时,根据是否超出有符号整数的范围设置溢出标志范围设置溢出标志OF。应该利用哪个标志,由应该利用哪个

10、标志,由程序员决定程序员决定!操作数是无符号数,关心进位操作数是无符号数,关心进位操作数是有符号数,注意溢出操作数是有符号数,注意溢出溢出标志的判断溢出标志的判断处理器硬件判断规则处理器硬件判断规则最高位和次高位最高位和次高位同时有进位同时有进位或或同时无进位同时无进位,无,无溢出;最高位和次高位溢出;最高位和次高位进位状态进位状态不同,有溢出不同,有溢出人工判断的简单规则人工判断的简单规则只有当两个相同符号数相加(含两个不同符号只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相数相减),而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,不会产生溢出反时,

11、产生溢出;其他情况下,不会产生溢出0 00 01110101110100 01 11111001111001 10 0110110110110正数正数正数正数负数负数最高位最高位次高位次高位奇偶标志奇偶标志PF(Parity Flag)当运算结果最低当运算结果最低8位中位中“1”的个数为零或偶数的个数为零或偶数时,时,PF1;否则;否则PF0举例8位二进制数相加:位二进制数相加:001110100111110010110110“1”的个数为的个数为5个:个:PF08位二进制数相加:位二进制数相加:1000010001111100100000000“1”的个数为的个数为0个:个:PF1结果结果进

12、位进位the least-significant byte 中中“1”的个数的个数零标志零标志ZF(Zero Flag)运算运算结果为结果为0,则,则ZF1,否则,否则ZF0结果是结果是0,ZF标志不是标志不是0!举例8位二进制数相加:位二进制数相加:001110100111110010110110结果不是结果不是0,ZF08位二进制数相加:位二进制数相加:1000010001111100100000000结果是结果是0,ZF1结果结果进位进位符号标志符号标志SF(Sign Flag)运算运算结果最高位为结果最高位为1,则,则SF1;否则;否则SF0。举例8位二进制数相加:位二进制数相加:00

13、1110100111110010110110最高位最高位1:SF18位二进制数相加:位二进制数相加:1000010001111100100000000最高位最高位0:SF0结果结果进位进位最高位符号位最高位符号位SF辅助进位标志辅助进位标志(Auxiliary Carry)AF(Auxiliary Carry):辅助进位标志。):辅助进位标志。用于标志用于标志D3向向D4位之间的进位(加法运算)或位之间的进位(加法运算)或借位(减法运算)的状态。借位(减法运算)的状态。AF标志供标志供DAA和和DAS指令使用,以便在指令使用,以便在BCD码码的加法或减法之后对的加法或减法之后对AL中的结果值进

14、行十进制调中的结果值进行十进制调整。整。Example 3例、例、32位位CPU中,实现中,实现64位加法。位加法。把把ARRAY1地址开始的地址开始的四四个字个字(低字在前低字在前)和和ARRAY2地址开始的四个字相加,和存放在地址开始的四个字相加,和存放在ARRAY1开始处。开始处。高高32位位低低32位位高高32位位低低32位位ARRAY1 ARRAY2低地址低地址高地址高地址程序段程序段MOV ESI,OFFSET ARRAY1;取第一个数的首地址取第一个数的首地址MOV EAX,ESI;将第一个数的低将第一个数的低32位送位送AXMOV EDI,OFFSET ARRAY2;取第二个数

15、的首地址取第二个数的首地址ADD EAX,EDI;第一个数的低第一个数的低32位和第位和第2个数的低个数的低32位位相加(不加相加(不加CF,但此条指令的执行影响,但此条指令的执行影响CF)MOV ESI,EAX;存低存低32位相加结果位相加结果MOV EAX,ESI+4;ADC EAX,EDI+4;两个高两个高32位连同位连同CF(低(低32位相加形成位相加形成的)相加的)相加.MOV ESI+4,EAX;存高存高32位相加结果位相加结果.思考思考:128位整数相加位整数相加/减?减?Example 4MOV BL,12HMOV DL,02HXADD BL,DL;BL=14H,DL=12H减

16、法指令减法指令减法减法格式格式SUB REG/MEM,REG/MEM/IMM功能功能源源操作数操作数、目的操作数相减,结果存入目的操作数、目的操作数相减,结果存入目的操作数标志标志所有状态标志(所有状态标志(ZF、CF、PF、AF、SF 及及 OF)都受影响都受影响带借带借位减位减格式格式SBB REG/MEM,REG/MEM/IMM功能功能源源操作数操作数、目的操作数以及、目的操作数以及进位标志进位标志CF相减,结相减,结果存入目的操作数果存入目的操作数标志标志所有状态标志都受影响所有状态标志都受影响减减1格式格式DEC REG/MEM功能功能目的操作数减目的操作数减1标志标志除除CF标志位

17、,其余状态标志都受影响标志位,其余状态标志都受影响减法指令减法指令减法指令减法指令注意事项与加法指令类似:注意事项与加法指令类似:1.源操作数和目的操作数源操作数和目的操作数不能不能同时为内存单元同时为内存单元(MEM)。)。2.不允许不允许与段寄存器(与段寄存器(SREG)相关的加法。)相关的加法。3.标志标志寄存器中寄存器中状态位状态位随运算结果而变化,随运算结果而变化,但但DEC指令指令不影响不影响CF标志标志。4.指令中操作数是带符号数还是无符号数由指令中操作数是带符号数还是无符号数由程序员程序员解释。解释。ExampleSUB CL,BLSUB DH,4FHSUB AX,SPSUB

18、DI,TEMPESIDEC QWORD PTR RSISBB BYTE PTR DI,3比较指令比较指令比较比较格式格式CMP REG/MEM,REG/MEM/IMM功能功能目的操作数目的操作数减去减去源操作数源操作数源源操作数操作数、目的操作数相减、目的操作数相减不能不能同时为内存单元。同时为内存单元。标志标志影响影响 ZF、CF、PF、AF、SF 及及 OF。比较比较交换交换 格式格式CMPXCHG REG/MEM,REG功能功能(80486以上以上)比较比较目的操作数目的操作数与与AL、AX、EAX 或或RAX寄存器中的值。如果两个值相等,则将源寄存器中的值。如果两个值相等,则将源操作数

19、加载到目的操作数。否则,将目标操作数加操作数加载到目的操作数。否则,将目标操作数加载到载到 AL、AX、EAX 或或RAX。标志标志如果目标操作数与如果目标操作数与 AL、AX、EAX 或或RAX中的值中的值相等,则置相等,则置 ZF 标志,否则清除此标志。标志,否则清除此标志。CF、PF、AF、SF 及及 OF 标志根据比较操作的结果设置。标志根据比较操作的结果设置。比较指令比较指令比较比较并交并交换换8 字节字节格式格式CMPXCHG8B MEM64功能功能(Pentium以上)比较以上)比较目的操作数目的操作数和和EDX:EAX 中中的的 64 位值。如果这两个值相等,则将位值。如果这两

20、个值相等,则将 ECX:EBX 中的中的 64位值存储到目的操作数。否则,将目标操位值存储到目的操作数。否则,将目标操作数的值加载到作数的值加载到 EDX:EAX。目标操作数是。目标操作数是 8 字节字节内存位置。内存位置。EDX 与与 ECX 包含包含 64 位值的位值的 32 个高个高位,位,EAX 与与 EBX 包含包含 32 个低位。个低位。标志标志如果两值相等,如果两值相等,ZF=1,否则,否则ZF=0;CF、PF、AF、SF 及及 OF 标志不受影响。标志不受影响。比较比较并交并交换换16 字节字节格式格式CMPXCHG16B MEM128功能功能与与CMPXCHG8B类似,但寄存

21、器为类似,但寄存器为RDX:RAX,RCX:RBX。但是,要求。但是,要求MEM128是是16-byte对齐。对齐。标志标志与与CMPXCHG16B一样。一样。ExampleCMP CL,BLCMP EBP,ESICMP RDI,RSICMP AX,2000HCMP R10W,12HCMP DI,CHCMP DI,TEMPBXCMPCHG CX,DXCMPXCHG8B TEMP本章内容本章内容加法、减法和比较指令加法、减法和比较指令乘法和除法指令乘法和除法指令BCD码和码和ASCII码算术运算指令码算术运算指令基本逻辑运算指令基本逻辑运算指令移位和循环移位指令移位和循环移位指令串比较指令串比较

22、指令乘法指令乘法指令无符无符号乘号乘法法格式格式MUL REG/MEM功能功能8位:源操作数与位:源操作数与AL相乘,乘积在相乘,乘积在AX16位:源操作数与位:源操作数与AX相乘,乘积在相乘,乘积在DX:AX32位:源操作数与位:源操作数与EAX相乘,乘积在相乘,乘积在EDX:EAX64位:源操作数与位:源操作数与RAX相乘,乘积在相乘,乘积在RDX:RAX标志标志影响影响 OF及及 CF,其余状态标志,其余状态标志ZF、PF、AF、SF不确定。不确定。当结果(乘积)的高半部分当结果(乘积)的高半部分=0时,时,CF0,OF0,表示高半部分是无效数字;否则,表示高半部分是无效数字;否则CF1

23、,OF1。注意注意SRC可以是寄存器或存储单元,但可以是寄存器或存储单元,但不能不能是立即数。是立即数。乘法指令乘法指令有符有符号乘号乘法法格式格式1个操作数:个操作数:IMUL REG/MEM功能功能8位:源操作数与位:源操作数与AL相乘,乘积在相乘,乘积在AX16位:源操作数与位:源操作数与AX相乘,乘积在相乘,乘积在DX:AX32位:源操作数与位:源操作数与EAX相乘,乘积在相乘,乘积在EDX:EAX64位:源操作数与位:源操作数与RAX相乘,乘积在相乘,乘积在RDX:RAX标志标志影响影响 OF及及 CF,其余状态标志,其余状态标志ZF、PF、AF、SF不确定。不确定。如果乘积的高半部

24、分如果乘积的高半部分不是不是低半部分的符号扩展(不低半部分的符号扩展(不是全是全0或全或全1),则视高半部分为有效位,置),则视高半部分为有效位,置CF=1,OF=1;如果结果的高半部分如果结果的高半部分是是全全0或全或全1,表明它仅包含,表明它仅包含符号位,置符号位,置CF=0,OF=0;乘法指令乘法指令有符有符号乘号乘法法格式格式2个操作数个操作数:IMUL REG,REG/MEM/IMM功能功能目的操作数和源操作数相乘,乘积放在目的操作数。目的操作数和源操作数相乘,乘积放在目的操作数。标志标志影响影响 OF及及 CF,其余状态标志,其余状态标志ZF、PF、AF、SF不确定。不确定。当结果

25、必须截断以放在目的操作数时,当结果必须截断以放在目的操作数时,OF和和ZF为为1,否则为,否则为0。注意注意8086不支持不支持目的操作数不能是目的操作数不能是8位寄存器。位寄存器。立即数不能是立即数不能是64位。位。源操作数和目的操作数长度相同。当源操作数和目的操作数长度相同。当IMM的长度的长度不足时,进行符号扩展。不足时,进行符号扩展。乘法指令乘法指令有符有符号乘号乘法法格式格式3个操作数:个操作数:IMUL REG,REG/MEM,IMM功能功能第第2个操作数与个操作数与IMM相乘,乘积在第相乘,乘积在第1个操作数中。个操作数中。标志标志影响影响 OF及及 CF,其余状态标志,其余状态

26、标志ZF、PF、AF、SF不确定。不确定。当结果必须截断以放在目的操作数时,当结果必须截断以放在目的操作数时,OF和和ZF为为1,否则为,否则为0。注意注意8086不支持不支持第第1个操作数不能是个操作数不能是8位寄存器。位寄存器。立即数不能是立即数不能是64位。位。三个操作数长度相同。当三个操作数长度相同。当IMM的长度不足时,进的长度不足时,进行符号扩展。行符号扩展。ExampleMUL CLIMUL BYTE PTR BXIMUL TEMPIMUL WORD PTR SIIMUL BX,NUMBER,1000HIMUL RCXExample例例1、设设AL=55H,BL=14H,计算它们

27、的乘积。,计算它们的乘积。MUL BL结果:结果:AX=06A4H。由于。由于AH=06H,不为,不为0,则,则CF=1,OF=1。例例2、AL=28H,BL=59H,计算它们的乘积。,计算它们的乘积。IMUL BL结果:结果:AX=0F98CH,CF=1,OF=1。MUL与与IMUL能否用能否用MUL做带符号数的乘法?做带符号数的乘法?例、例、尝试用尝试用MUL计算计算FFHFFH。用二进制进行计算,可表示为:用二进制进行计算,可表示为:1111 1111 1111 1111 1111 1110 0000 0001若为若为无符号数无符号数,则相当于,则相当于25525565025的运算,的运

28、算,结果正确。结果正确。若为若为有符号数有符号数,则上面的结果表示为(,则上面的结果表示为(1)(1)511,结果不正确。,结果不正确。MUL与与IMULIMUL指令采用指令采用什么算法什么算法来实现其功能?来实现其功能?有多种方案。有多种方案。可以直接采用补码相乘。可以直接采用补码相乘。也可以先将参加运算的操作数恢复成原码,数位当成符也可以先将参加运算的操作数恢复成原码,数位当成符号号数相乘,然后给乘积赋予正确的符号。号号数相乘,然后给乘积赋予正确的符号。这些工作由这些工作由微处理器微处理器自动完成。自动完成。除法指令除法指令无符无符号乘号乘法法格式格式DIV REG/MEM功能功能8位:位

29、:AX除以源操作数,商在除以源操作数,商在AL,余数在,余数在AH16位:位:DX:AX除以源操作数,商在除以源操作数,商在AX,余数在,余数在DX32位:位:EDX:EAX除以源操作数,商在除以源操作数,商在EAX,余,余数在数在EDX64位:位:RDX:RAX除以源操作数,商在除以源操作数,商在RAX,余,余数在数在RDX标志标志所有状态所有状态 标志标志OF、CF、ZF、PF、AF、SF均均不不确定确定。除法指令除法指令有符有符号除号除法法格式格式IDIV REG/MEM功能功能8位:位:AX除以源操作数,商在除以源操作数,商在AL,余数在,余数在AH16位:位:DX:AX除以源操作数,

30、商在除以源操作数,商在AX,余数在,余数在DX32位:位:EDX:EAX除以源操作数,商在除以源操作数,商在EAX,余,余数在数在EDX64位:位:RDX:RAX除以源操作数,商在除以源操作数,商在RAX,余,余数在数在RDX标志标志所有状态所有状态 标志标志OF、CF、ZF、PF、AF、SF均均不不确定确定。注意注意商的符号符合一般代数符号规则,余数的符号与被商的符号符合一般代数符号规则,余数的符号与被除数相同。除数相同。除法指令除法指令除法指令可能发生两种错误除法指令可能发生两种错误除数为除数为0除法溢出除法溢出除法除法溢出:溢出:在被除数很大,而除数很小时,会发生除法在被除数很大,而除数

31、很小时,会发生除法溢出。溢出。例如,例如,AX=3000,除数,除数BL=2,此时商在,此时商在AL=1500使得使得除法溢出。除法溢出。q这两种错误都会使得微处理器产生中断。此时这两种错误都会使得微处理器产生中断。此时所得的商和所得的商和余数都余数都不确定不确定。v在任何微处理器中,都在任何微处理器中,都不存在不存在立即数除法指令。立即数除法指令。乘法指令、除法指令与标志位乘法指令、除法指令与标志位标志:标志:O D I T S Z A P C IMUL U U U U X MUL U U U U X IDIV U U U U U U DIV U U U U U UX:根据结果设置。当结果(

32、乘积)的高半部分根据结果设置。当结果(乘积)的高半部分=0时,时,CF0,OF0,表示高半部分无有效数,表示高半部分无有效数字;否则,字;否则,CF1,OF1。U:无定义。无定义。:不影响。不影响。Example例、例、给定无符号数给定无符号数7A86H和和04H,求,求7A86H04H?。?。若用若用DIV指令指令进行计算,即进行计算,即MOV AX,7A86HMOV BL,04HDIV BL ;7A86H04H的商为的商为1EA1HFFH由于由于BL 中的除数中的除数04H为字节,被除数为字,商为字节,被除数为字,商1EA1大于大于AL中能存放的最大无符号数中能存放的最大无符号数FFH,结

33、果将产生除法出错中断。,结果将产生除法出错中断。符号扩展指令符号扩展指令除法指令中,被除数常常需要进行符号扩展或零扩展除法指令中,被除数常常需要进行符号扩展或零扩展。将字节扩展成字将字节扩展成字 格式格式CBW 功能功能将将AL的符号位扩展到的符号位扩展到AH将字扩展成双字将字扩展成双字 格式格式CWD 功能功能将将AX的符号位扩展到的符号位扩展到DX例例:设设AX=379AH。若执行若执行CBW指令,则指令,则AX=FF9AH;若执行的是若执行的是CWD指令,则指令,则DX=0000H,AX=379AH。注意:注意:80386以上以上CPU还有还有MOVSX指令和指令和MOVZX指令。指令。

34、将双字扩展成四将双字扩展成四字字 格式格式CDQ功能功能(386以上)以上)EAX符号位扩展到符号位扩展到EDXExample二进制四则混合算术运算程序段二进制四则混合算术运算程序段试计算:试计算:AX (V(X*YZ-540)/X 之商,之商,DX 余数,余数,其中,其中,X,Y,Z,V 均为字变量、有符号数。均为字变量、有符号数。Program;(V-(X*Y+Z-540)/XMOV AX,X;IMUL Y;X*Y,结果在结果在DX:AX中中MOV CX,AX;MOV BX,DX;将乘积存在将乘积存在BX:CX中中MOV AX,Z;CWD;将符号扩展后的将符号扩展后的Z加到加到BX:CX中

35、的乘积上去中的乘积上去ADD CX,AX;ADC BX,DX;SUB CX,540;SBB BX,0;从从BX:CX中减去中减去540MOV AX,V;CWD;SUB AX,CX;从符号扩展后的从符号扩展后的V中减去中减去(BX:CX)并并SBB DX,BX;除以除以X,商在商在AX中,余数在中,余数在DX中。中。IDIV X;关于余数关于余数可以根据实际应用的需求来处理余数。可以根据实际应用的需求来处理余数。四舍五入四舍五入截断截断如果是无符号数除法,采取四舍五入方式时,可将余数与除数如果是无符号数除法,采取四舍五入方式时,可将余数与除数的一半进行比较,以决定余数是加入到商,还是舍去。的一半

36、进行比较,以决定余数是加入到商,还是舍去。例,例,AX除以除以BL,无符号数,结果四舍五入,无符号数,结果四舍五入DIV BLADD AH,AHCMP AH,BLJB NEXTINC ALNEXT:本章内容本章内容加法、减法和比较指令加法、减法和比较指令乘法和除法指令乘法和除法指令BCD码和码和ASCII码算术运算指令码算术运算指令基本逻辑运算指令基本逻辑运算指令移位和循环移位指令移位和循环移位指令串比较指令串比较指令BCD算术运算指令算术运算指令BCD算术运算指令算术运算指令不能用于不能用于64位位模式。模式。DAA,加法的十进制修正,加法的十进制修正Decimal Adjust AL af

37、ter AdditionDAS,减法的十进制修正,减法的十进制修正Decimal Adjust AL after SubtractionBCD数数BCD数:数:二进制编码的十进制数(二进制编码的十进制数(Binary Coded Decimal)用用4位二进制码表示一位十进制数;位二进制码表示一位十进制数;00001001是合法是合法BCD码;码;10101111是非法是非法BCD码。码。压缩压缩BCD数数:用一个字节表示:用一个字节表示2位位BCD数。数。例:37非压缩非压缩BCD数数:用一个字节的低:用一个字节的低4位表示一位位表示一位BCD数,高数,高4位位为为0。例:37 001101

38、110000001100000111例例 1:18 7 25 0 0 0 1 1 0 0 0-18 +0 0 0 0 0 1 1 1-7 0 0 0 1 1 1 1 1-?(1111是非法是非法BCD码码)压缩压缩BCD数十进制调整原理数十进制调整原理(1)需要对结果进行变换需要对结果进行变换(调整调整),方法:,方法:“加加6调整调整”。0 0 0 1 1 1 1 1 +0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1-25(正确结果正确结果)注意:注意:此时,第此时,第3位向第位向第4位位(低半字节向高半字节低半字节向高半字节)有进位,有进位,AF=1。例例2:19+8=27

39、 0 0 0 1 1 0 0 1-19 +0 0 0 0 1 0 0 0-8 0 0 1 0 0 0 0 1-21(结果不对结果不对)运算时,低位数字向高位数字产生了进位运算时,低位数字向高位数字产生了进位(AF=1或或CF=1),实,实际上是际上是“满满16进一进一”,但进到高位,当成了,但进到高位,当成了10,“少少6”,需,需“加加6调整调整”。0 0 1 0 0 0 0 1 +0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 1-27(结果正确结果正确)可见,在可见,在BCD数运算时,若数运算时,若AF=1(或或CF1)就需在低就需在低4位位(或高(或高4位)上进行位)上进行

40、“加加6调整调整”。压缩压缩BCD数十进制调整原理数十进制调整原理(2)压缩压缩BCD数十进制调整原理数十进制调整原理(3)加法器实际上是按二进制运算加法器实际上是按二进制运算 “满满16进一进一”但对于但对于BCD数,应当按数,应当按10进制算进制算 “满满10进一进一”,“进进1当当10”在在BCD码结果中,码结果中,若某一位若某一位BCD数字所对应的二进制码超过数字所对应的二进制码超过9(10101111),应),应“加上加上6”,产生进位,进行调整。,产生进位,进行调整。若低位数字向高位数字产生了进位若低位数字向高位数字产生了进位(AF=1或或CF=1),应应“加上加上6”,补上少加的

41、,补上少加的“6”,进行调整。,进行调整。这可由软件这可由软件(调整指令调整指令)来完成。来完成。压缩压缩BCD数十进制调整原理数十进制调整原理(4)压缩压缩BCD数加法十进制调整规则:数加法十进制调整规则:如果两个如果两个BCD数字相加的结果是一个在数字相加的结果是一个在10101111之之间的二进制数,或者有向高一位数字的进位(间的二进制数,或者有向高一位数字的进位(AF=1或或CF=1),则应在现行数字上加),则应在现行数字上加6(0110B)调整。)调整。压缩压缩BCD数减法十进制调整规则:数减法十进制调整规则:(1)AF=1,或运算结果的低位是一个在或运算结果的低位是一个在10101

42、111之间的之间的二进制数,则在低位上要进行二进制数,则在低位上要进行“6”调整。调整。(2)CF=1,或运算结果的高位是一个在,或运算结果的高位是一个在10101111之间的之间的二进制数,则在高位上要进行二进制数,则在高位上要进行“6”调整。调整。压缩压缩BCD数十进制修正指令数十进制修正指令(1)加法的十进制修正指令:加法的十进制修正指令:格式:格式:DAA(必须紧跟在(必须紧跟在ADD、ADC指令后)指令后)操作:操作:ALAL中的和数调整到压缩中的和数调整到压缩BCD格式格式 修正规律:修正规律:AL的低的低4位位9或或AF=1,则,则ALAL+06H,AF1 AL的高的高4位位9或

43、或CF=1,则,则ALAL+60H,CF1 注意:注意:状态位状态位OF不确定不确定,其余状态位随运算结果而变。,其余状态位随运算结果而变。DAADecimal Adjust for Addition 标志:标志:O D I T S Z A P C U 压缩压缩BCD数十进制修正指令数十进制修正指令(2)减法的十进制修正指令:减法的十进制修正指令:格式:格式:DAS(必须紧跟在(必须紧跟在SUB、SBB指令后)指令后)操作:操作:AL AL中的差数调整到压缩中的差数调整到压缩BCD格式。格式。修正规律:修正规律:AL的低的低4位位9或或AF=1,则,则ALAL06H,AF1 AL的高的高4位位

44、9或或CF=1,则,则ALAL60H,CF1 注意事项:注意事项:状态位状态位OF不确定,其余状态位随运算结果而变。不确定,其余状态位随运算结果而变。DAS Decimal Adjust for Subtraction 标志:标志:O D I T S Z A P C U 例:计算例:计算BCD3=BCD1+BCD2例、例、设设BCD1,BCD2,BCD3定义为字变量,可分定义为字变量,可分别存放别存放4位数字的组合位数字的组合BCD数。假定字变量数。假定字变量BCD1的值为的值为1834,字变量字变量BCD2的值为的值为2789。要求计算要求计算BCD3=BCD1+BCD2,并指出执行每条指令

45、的操,并指出执行每条指令的操作及执行指令后作及执行指令后AL,AF,CF 的内容。的内容。程序段附后。程序段附后。18 3 4 2 7 8 9 46 23BCD1BCD1+1BCD2BCD2+1BCD3例:计算例:计算BCD3=BCD1+BCD2指令指令操作操作ALCF AFMOV AL,BYTE PTR BCD1AL 3434ADD AL,BYTE PTR BCD2AL 34+89BDH00DAA调整调整23BCD11MOV BYTE PTR BCD3,AL(BCD3)2323BCD11MOV AL,Byte Ptr BCD1+1AL181811ADC AL,Byte Ptr BCD2+1A

46、L18+27+CF 40H01DAA调整调整46BCD01MOV Byte Ptr BCD3+1,AL(BCD3+1)4646BCD01计算:计算:183427894623压缩压缩BCD数数的乘除法的乘除法没有压缩没有压缩BCD数的乘法和除法调整指令。数的乘法和除法调整指令。主要原因是相应的调整算法比较复杂,所以不支主要原因是相应的调整算法比较复杂,所以不支持压缩持压缩BCD数的乘除法运算。数的乘除法运算。如果要处理压缩如果要处理压缩BCD数的乘除法问题,可以数的乘除法问题,可以把操作把操作数数(压缩(压缩BCD数)数)变换成相等的二进制数变换成相等的二进制数,然后用,然后用二进制算法进行运算

47、,运算完成后再二进制算法进行运算,运算完成后再将结果转换成将结果转换成BCDBCD数数。ASCII算术运算指令算术运算指令AAA,加法的加法的ASCII修正修正ASCII Adjust After AdditionAAS,减法的减法的ASCII修正修正ASCII Adjust AL After SubtractionAAM,乘法的乘法的ASCII修正修正ASCII Adjust AX After MultiplyAAD,除法的除法的ASCII修正修正ASCII Adjust AX Before Division均不能用于均不能用于64位模式。位模式。ASCII算术运算指令算术运算指令AAA,加

48、法的,加法的ASCII修正修正格式:格式:AAA(必须紧跟在(必须紧跟在ADD,ADC指令后)指令后)功能:功能:对对AL中的中的非压缩非压缩BCD数数(或十进制的(或十进制的ASCII码)的码)的加法结果进行修正。加法结果进行修正。修正规律:修正规律:AL的低的低4位位9或或AF=1,则,则ALAL06H,AF1,AHAH1,ALAL 0FH,CFAF,其中,其中AH=AH+1用来实现低位用来实现低位BCD数向高位的进位。数向高位的进位。AL的低的低4位位9或或AF=1,则则ALAL06H,AF1,AHAH1,ALAL 0FH,CFAF,其中,其中AH=AH1用来实现低位用来实现低位BCD数

49、向高位的借位。数向高位的借位。AL的低的低4位位9且且AF=0,ALAL 0FH,CFAF。注意:注意:状态位状态位AF、CF随操作数结果变化;其余状态位都随操作数结果变化;其余状态位都是不确定的。是不确定的。ASCII算术运算指令算术运算指令AAM,乘法的,乘法的ASCII修正修正格式:格式:AAM(必须紧跟在(必须紧跟在MUL指令后)指令后)功能:功能:操作数为累加器操作数为累加器AX,对,对AL中的非压缩中的非压缩BCD数的乘数的乘法结果进行修正。法结果进行修正。修正规律:修正规律:AHAL/10的商(高位非压缩的商(高位非压缩BCD数),数),ALAL/10H的余数(低位非压缩的余数(

50、低位非压缩BCD数)。数)。注意:注意:状态位状态位SF、ZF、PF随操作结果变化;其余状态位随操作结果变化;其余状态位都是不确定的。都是不确定的。ASCII算术运算指令算术运算指令AAD,除法的,除法的ASCII修正修正格式:格式:AAD(必须紧跟在(必须紧跟在DIV指令指令前前)功能:功能:操作数为累加器操作数为累加器AX,AX的内容为两位非压缩的的内容为两位非压缩的BCD数;数;在做除法前在做除法前,对,对AX中的非压缩中的非压缩BCD数进行修正。数进行修正。修正规律:修正规律:ALAH10AL,AH0。本质:把本质:把BCD码转换成二进制数。码转换成二进制数。注意:注意:状态位状态位S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁