BCD
This presentation is the property of its rightful owner.
Sponsored Links
1 / 12

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


  • 111 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Bcd

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

专用于对BCD码运算的结果进行调整

包括:AAA、DAA、AAS、DAS、AAM、AAD

均为隐含寻址,隐含的操作数为AL和AH

为何要对BCD码的运算结果进行调整?

BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。

1


Bcd

8088的调整指令主要用于十进制数的调整。这些指令包括:

AAA:对AL中非压缩BCD码求和的结果进行调整。

AAS:对AL中非压缩BCD码求差的结果进行调整。

AAD:在实现十进制除法时,在除法指令前对AX用中非压缩BCD码表示的十进制数进行调整。

AAM:在实现十进制乘法时,对AX中两个非压缩BCD码相乘的结果进行调整。

DAA:对AL中的两个压缩BCD码相加之和进行调整,得到用压缩BCD码表示的十进制和。

DAS:对AL中的两个压缩BCD码相减之差进行调整,得到用压缩BCD码表示的十进制差。

2


Bcd

加法的十进制调整指令

非压缩BCD码加法调整AAA

本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。

AAA指令只影响AF和CF,其余标志无定义。

AAA指令应紧跟在ADD或ADC指令之后。

3


Bcd

AAA指令的操作如下:

如果AL的低4位>9∨AF=1,则:

① AL←(AL)+6,(AH)←(AH)+1,AF←1

② AL←((AL)∧0FH)

③ CF←AF

否则AL←(AL)∧0FH

4


Bcd

这个1代表了16,而实际上仅应为10,即多进了6。

调整原理:先看一个例子

计算8+9 0000 1000

见右式 +0000 1001

0001 0001 = 11

结果应为17,而计算机相加为11,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。

5


Bcd

实际上当低4位的结果>9(即A~F之间)时,也应进行加6调正 (原因是逢十没有进位,故用加6的方法强行产生进位) 。

如对上例的结果进行加6:

0001 0001 11

+ 0000 0110 6

0000 0111 17

^ 0000 1111

----------------------

1 0000 1111

6


Bcd daa

压缩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


Bcd

例: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


Bcd

3) 乘法的十进制调正指令AAM

对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:

(AL)/0AH, (AH)←商,(AL)←余数

隐含的操作寄存器为AL和AH;

AAM跟在MUL指令之后使用;

影响标志位PF、SF、ZF,其它无定义;

用AAM可实现≤99的二-十进制转换。

9


Bcd

例1:按十进制乘法计算7×8=?

程序段如下:

MOVAL,07H;(AL)=07H

MOVCL,08H;(CL)=08H

MULCL;(AX)=0038H

AAM;(AH)=05H,(AL)=06H

所得结果为非压缩的BCD码。

例2:把3AH转换成等值的十进制数。

MOV AL,3AH ;58

AAM ;(AH)=05H,(AL)=08H

10


4 aad

4) 除法的十进制调正指令AAD

对非压缩BCD除法运算进行调整。调整操作为:

(AL)←(AH)×0AH+(AL)

AH ← 0

隐含的操作寄存器为AH,AL;

AAD要在DIV指令之前使用;

影响标志位PF、SF、ZF,其它无定义;

用AAD可实现≤99的十-二进制转换。

11


Bcd

例1:按十进制除法计算55÷7=?

程序段如下:

MOVAX, 0505H;(AX)=55BCD

MOVCL, 07H;(CL)= 7

AAD;(AX)=0037H

DIVCL;(AH)=6, (AL)=7

所得结果为非压缩的BCD码(商7余6)。

例2:把73转换成等值的二进制数。

MOV AX, 0703H ;(AX)= 73BCD

AAD ;(AX)= 0049H

12


  • Login