请大虾帮忙一下:现在急需三字节bcd码减法程序(汇编),能否直接用subb进行在网上下了一个看的不是很懂请指教:不明白为什么只要将100减去此数即可。因为9AH经十进制调整后为100,相当100减去此数。
分析:在二进制数中,当采用补码后可以将减法转换成加法。同样,BCD码中采用补数后也可以将减法转换成加法,减数对10取补,只要将100减去此数即可。因为9AH经十进制调整后为100,相当100减去此数。
子程序名称:SUBMSB
入口参数:被减数及减数的末地址分别存放在R0、R1中,字节长度存放在R2中
出口参数:差存放在被减数单元
使用的寄存器:A,R0,R1,R2
子程序如下:
SUBMSB:CLR C ;减数对10取补
LOOP:MOV A, #9AH
SUBB A, @R1
ADD A, @R0 ;两数相加
DA A ;十进制调整
MOV @R0,A ;送结果
DEC R0 ;修改被减数地址指针
DEC R1 ;修改减数地址指针
CPL C ;转换成借位
DJNZ R2,LOOP ;判多字节减法完成否,若未完则继续
RET
END
主程序:设三字节BCD码的被减数及减数由高位到低位存放在片内RAM中,它们的首地址分别为10H及20H,要求将其差存放到被减数单元,编写相应的程序。
ORG 0000H
LJMP MAISUB
ORG 1000H
MAISUB:MOV R0, #12H
MOV R1 ,#22H
MOV R2,#03H
ACALL SUBMSB
SJMP $
END
|