Assembly 我试图在BCD中添加两个数字。我如何用进位一点一点地将两个十六进制值相加?
我在R0和R1中加载两个十六进制值。然后,我将R2设置为我的总和应该结束的寄存器。如何一点一点地添加这些十六进制值?我试图传入两个要相加的数字以及存储结果的位置。然后将结果存储在ram中,并传回该地址,如果没有发生溢出,则传回0,如果发生溢出,则传回1 这是臂内装配Assembly 我试图在BCD中添加两个数字。我如何用进位一点一点地将两个十六进制值相加?,assembly,arm,keil,Assembly,Arm,Keil,我在R0和R1中加载两个十六进制值。然后,我将R2设置为我的总和应该结束的寄存器。如何一点一点地添加这些十六进制值?我试图传入两个要相加的数字以及存储结果的位置。然后将结果存储在ram中,并传回该地址,如果没有发生溢出,则传回0,如果发生溢出,则传回1 这是臂内装配 AREA mydata,DATA SUM DCD 0 AREA mycode,CODE THUMB EXPORT __main NUM1 DCD 0x275 NU
AREA mydata,DATA
SUM DCD 0
AREA mycode,CODE
THUMB
EXPORT __main
NUM1 DCD 0x275
NUM2 DCD 0x963
__main PROC
LDR R0,=NUM1
LDR R0,[R0] ;R0 has NUM1
LDR R1,=NUM2
LDR R1,[R1] ;R1 has NUM2
LDR R2,=SUM
LDR R2, [R2] ;R2 has SUM
BL adder
exit B exit
ENDP
adder PROC
BX LR ;branch and exchange instruction set LR holds the return address
ENDP
END
请用文字或数据值描述您所追求的算法任务、输入、操作和结果。我已经添加了新信息。不清楚您所说的BCD是什么意思。通常,“BCD”表示每8位0-9的值,即0x01020309,然后是“压缩BCD”,它每一位只使用一个半字节(4位)()。在这两种情况下,您都可以通过使用二进制
add
来添加两个BCD值,然后您必须解析溢出的数字,即它们的总和大于/等于10。在这种情况下,您需要在该数字处再添加6,以修复结果。(7+7=14;溢出和结果是无效的数字0xE;14+6=20=0x14=packeted BCD 14=corrected)当然有一些技巧可以很好地检测溢出的数字,即使CPU不直接支持BCD数学(x86确实有专门的指令检查值并更正它,比如,但我想不起来了(大约15年后)ARM也有类似的情况,所以你应该检查一下自己)但在这种情况下,谷歌是你最好的朋友,没有理由重新发明轮子(在这种情况下)。