![]() | 第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 |