1 / 12

BCD 码运算的十进制调整指令

BCD 码运算的十进制调整指令. 专用于对 BCD 码运算的结果进行调整 包括: AAA 、 DAA 、 AAS 、 DAS 、 AAM 、 AAD 均为隐含寻址,隐含的操作数为 AL 和 AH 为何要对 BCD 码的运算结果进行调整? BCD 码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。. 1. 8088 的调整指令主要用于十进制数的调整。这些指令包括: AAA : 对 AL 中非压缩 BCD 码求和的结果进行调整。 AAS : 对 AL 中非压缩 BCD 码求差的结果进行调整。

maren
Télécharger la présentation

BCD 码运算的十进制调整指令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BCD码运算的十进制调整指令 专用于对BCD码运算的结果进行调整 包括:AAA、DAA、AAS、DAS、AAM、AAD 均为隐含寻址,隐含的操作数为AL和AH 为何要对BCD码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。 1

  2. 8088的调整指令主要用于十进制数的调整。这些指令包括:8088的调整指令主要用于十进制数的调整。这些指令包括: AAA:对AL中非压缩BCD码求和的结果进行调整。 AAS:对AL中非压缩BCD码求差的结果进行调整。 AAD:在实现十进制除法时,在除法指令前对AX用中非压缩BCD码表示的十进制数进行调整。 AAM:在实现十进制乘法时,对AX中两个非压缩BCD码相乘的结果进行调整。 DAA:对AL中的两个压缩BCD码相加之和进行调整,得到用压缩BCD码表示的十进制和。 DAS:对AL中的两个压缩BCD码相减之差进行调整,得到用压缩BCD码表示的十进制差。 2

  3. 加法的十进制调整指令 非压缩BCD码加法调整AAA 本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。 AAA指令只影响AF和CF,其余标志无定义。 AAA指令应紧跟在ADD或ADC指令之后。 3

  4. AAA指令的操作如下: 如果AL的低4位>9∨AF=1,则: ① AL←(AL)+6,(AH)←(AH)+1,AF←1 ② AL←((AL)∧0FH) ③ CF←AF 否则AL←(AL)∧0FH 4

  5. 这个1代表了16,而实际上仅应为10,即多进了6。 调整原理:先看一个例子 计算8+9 0000 1000 见右式 +0000 1001 0001 0001 = 11 结果应为17,而计算机相加为11,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。 5

  6. 实际上当低4位的结果>9(即A~F之间)时,也应进行加6调正 (原因是逢十没有进位,故用加6的方法强行产生进位) 。 如对上例的结果进行加6: 0001 0001 11 + 0000 0110 6 0000 0111 17 ^ 0000 1111 ---------------------- 1 0000 1111 6

  7. 压缩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指令之后。 7

  8. 例:0100 1000 48H MOV AL,48H + 0111 010074H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 011066H DAA 1 0010 0010 1 22H (进位) (进位) 执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为: (AL)=22H, CF=1, AF=1 8

  9. 3) 乘法的十进制调正指令AAM 对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为: (AL)/0AH, (AH)←商,(AL)←余数 隐含的操作寄存器为AL和AH; AAM跟在MUL指令之后使用; 影响标志位PF、SF、ZF,其它无定义; 用AAM可实现≤99的二-十进制转换。 9

  10. 例1:按十进制乘法计算7×8=? 程序段如下: MOV AL,07H ;(AL)=07H MOV CL,08H ;(CL)=08H MUL CL ;(AX)=0038H AAM ;(AH)=05H,(AL)=06H 所得结果为非压缩的BCD码。 例2:把3AH转换成等值的十进制数。 MOV AL,3AH ;58 AAM ;(AH)=05H,(AL)=08H 10

  11. 4) 除法的十进制调正指令AAD 对非压缩BCD除法运算进行调整。调整操作为: (AL)←(AH)×0AH+(AL) AH ← 0 隐含的操作寄存器为AH,AL; AAD要在DIV指令之前使用; 影响标志位PF、SF、ZF,其它无定义; 用AAD可实现≤99的十-二进制转换。 11

  12. 例1:按十进制除法计算55÷7=? 程序段如下: MOV AX, 0505H ;(AX)=55BCD MOV CL, 07H ;(CL)= 7 AAD ;(AX)=0037H DIV CL ;(AH)=6, (AL)=7 所得结果为非压缩的BCD码(商7余6)。 例2:把73转换成等值的二进制数。 MOV AX, 0703H ;(AX)= 73BCD AAD ;(AX)= 0049H 12

More Related