一、什么是BCD码
1、组合BCD码
组合的BCD码,也叫压缩BCD码,是指一个字节含两位BCD码,例如:37H
2、未组合BCD码
未组合的BCD码,也叫非压缩型BCD码,是指一个字节含一位BCD码,字节的高四位无意义,例如:0307H
二、组合BCD码的算术运算调整指令
1、DAA
组合的BCD码加法调整指令DAA
调整规则如下:
该指令不影响OF
2、DAS
组合的BCD码减法调整指令DAS
调整规则如下:
DAA\DAS通俗的理解就是,用这些调整指令调整为我们十进制类的计算方式,也就是我们平常用的计算方式,比如说:
MOV AL,34H
ADD AL,47H
按照十六进制来算,4+7是要等于B的,结果也就是7BH
加了调整指令后,我们可以直接34+47=81,结果也就是81H
三、未组合BCD码的算术运算调整指令
1、AAA
未组合的BCD码加法调整指令AAA
AF位值送CF位,所以该指令影响AF、CF
2、AAS
未组合的BCD码减法调整指令AAS
题目
1、内存某字节单元中存放的二进制代码为94H,若将它看作是一个压缩BCD码,则其对应的数值为 ( )
A 148 B -20 C -108 D 94
答案:D
2、 已知AL内容为压缩BCD码,对它进行加“1”操作,其中错误的指令序列是
A 、INC AL DAA
B 、ADD AL,1 DAA
C 、ADC AL,1 DAA
D 、STC
ADC AL,0 DAA
答案:C
ADC带进位加法指令,他的值是两个操作数的和再加上CF,C项没有对CF进行处理,当CF=1时,C项完成的是加2操作。
注意,STC 置CF=1
3、在以BCD为首地址的字节单元中存放了3个压缩BCD码x、y、z本程序用以计算x+y-z,并将结果存放在SS字节单元中。试在程序的空格处填入适当的指令。
BCD DB x,y,z
SS DB ?
...
...
...
MOV AL, BCD
ADD AL, BCD+1
空1
SUB AL, BCD+2
空2
MOV SS, AL
答案 空1:DAA
空2:DAS
4、在主程序中,采用调用子程序方式将一组非压缩BCD在屏幕上显示出来。试在下面程序段中填补上空缺的指令。
…
MOV BX,OFFSET feiyabcd
MOV CX,NN
空1
...
...
DISPLAY PROC
PUSH DX
LOP: MOV DL,[BX]
ADD DL,30H
空2
INT 21H
INC BX
LOOP LOP
RET
DISPLAY ENDP
答案:空1:CALL DISPLAY
空2:MOV AH,02H
5、下面程序段完成将字节存储单元BUF中的两个压缩BCD码拆成两个非压缩BCD码后分别存放在BCD1和BCD2字节单元中。
BUF DB XXH
BCD1 DB ?
BCD2 DB ?
…
START: MOV AL,BUF
MOV BL,AL
MOV CL,4
空1
MOV BCD1,AL
空2
MOV BCD2,BL
HLT
答案:空1:SHR AL,CL
空2:AND BL,OFH