Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 我试图在BCD中添加两个数字。我如何用进位一点一点地将两个十六进制值相加?_Assembly_Arm_Keil - Fatal编程技术网

Assembly 我试图在BCD中添加两个数字。我如何用进位一点一点地将两个十六进制值相加?

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

我在R0和R1中加载两个十六进制值。然后,我将R2设置为我的总和应该结束的寄存器。如何一点一点地添加这些十六进制值?我试图传入两个要相加的数字以及存储结果的位置。然后将结果存储在ram中,并传回该地址,如果没有发生溢出,则传回0,如果发生溢出,则传回1

这是臂内装配

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也有类似的情况,所以你应该检查一下自己)但在这种情况下,谷歌是你最好的朋友,没有理由重新发明轮子(在这种情况下)。