一、 实验目的
a) 熟悉、掌握十进制调整指令(非 BCD 码)
b) 熟悉掌握非 BCD 码数据段数据的定义
c)实现非 BCD 码的加减及其混合运算
二、实验重难点
a)重点:进行非 BCD 码加减法运算时,需要利用十进制调整指令, 所以要熟悉其指令格式。
1.AAA 指令
指令格式:
AAA ;AAA为无目操作,用以完成对非BCD码加运算校正
用法:(al)<—把 al 中的和调整到非 BCD 码格式
(ah)<—(ah)+调整产生的进位 2.AAS 指令
指令格式:
AAS ;AAS为无目操作,用以完成对非BCD码相减校正
用法类似 AAA
3.高位清零
Mov ah,0 或 xor ah,ah b)难点:调整指令随时无目操作,但隐含操作数必须存在 al 中, 所以做加减运算时,被加、减数必须先存入 al 中;由于调整会 产生进位,所以要对 al 中的每次使用该指令之前高四位清零。 如:x+y
Xor ah,ah
Mov al,x
Add al,y
DAA
三.程序代码
实现 24+18 的 bcd 码运算
Data segment
Bcd1 db 00000100b,00000010b ;
Bcd2 db 00001000b,00000001b
Bcd3 db 2 dup(?)
Data ends
Code segment
Assume cs:code,ds:data
Start:mov ax,data
Mov ds,ax
Xor ah,ah
Mov al,bcd1 Add al, bcd2 aaa
Mov bcd3,al Xor ah,ah
Mov al,bcd1+1 Adc al,bcd2+1 aaa
Mov bcd3+1,al Mov ah,4ch
Int 21h
Code ends
End start