目录 上一页 下一页 下一章

第10章 细节补充 -271-

了低4位到高4位的进位(标志位AF=1)或高4位的进位(标志位CF=1),则结果应要调整。调整方法仍然不变。
  减法运算结果的调整方法与加法相反,不是加6而是减6。但是遵循的条件是一样的。具体的指令共有两条:
  ·DAA(Decimal Adjust for Addition)加法的十进制调整指令
  ·DAS(Decimal Adjust for Subtraction)减法的十进制调整指令
  关于这两条指令还有几点要简单说明一下:
  (1)调整指令与运算指令是不分家的,调整指令之前必须要有运算指令,运算指令之后必须紧跟调整指令。
  (2)运算指令可以是ADD、SUB,还可以是带进位、借位的加减法(后文叙述),但不能是INC、DEC这两条指令,因为这两条指令不影响CF标志。
  (3)运算结果必须在AL寄存器中,不能在其它寄存器内。这也可以算是累加器的一个特定用途吧。
  下面的这个程序演示了压缩BCD码运算及调整指令的应用方法,从数据输入到运算结果输出过程很清楚。不过这个程序只能处理两位BCD码,不能处理更多的数位。用户必须每次输入一个两位数,不能输入一位数,也不能用[Backspace]键修改,否则都会导致错误的结果。
ADDBCD.A
data

msg1
msg2
msg3
data
code

main













SM
segment
assume
db
db
db
ends
segment
assume
proc
push
xor
push
mov
mov

mov
mov
int
call
mov

mov


ds:data
0dh,0ah,'First:',24h
0dh,0ah,'Next:',24h
0dh,0ah,'Resault:',24h


cs:code
far
ds
ax,ax
ax
ax,data
ds,ax

dx,offset msg1
ah,9
21h
get_num
bl,al

dx,offset msg2



;输入第一个数
;输入第二个数
;计算结果




;初始化堆栈


;初始化DS寄存器


;显示MSG1:"输入第一个数:"


;调用GET_NUM子过程接收数据
;将第一个数送入BL寄存器

;显示MSG2:"输入第二个数:"

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章