好了,伙计们,我需要你们在这个项目上的帮助。我尝试打印出三位数的十六进制数字,每次增加345。我知道在汇编中,我应该单独打印十六进制数的每一部分。我会做移位"lsr",但我得到了一个错误的数字的第一部分。0后面的第一个数字应该是149 (十进制为345),但我得到的是A59 (十进制为2649)。
下面是我的代码
.globl _start
_start:
ldr r4,=0x101f1000
mov r0, #0x00
lsl r0, #4
add r0, #0
mov r5, #0xBB
lsl r5, #4
add r5, r5, #8
my_loop:
cmp r0, r5
bgt my_exit
lsr r1, r0, #6
and r1, r1, #0x0000000f
cmp r1, #10
addlt r1, r1, #48
addge r1, r1, #55
str r1, [r4]
lsr r1, r0, #4
and r1, r1, #0x0000000f
cmp r1, #10
addlt r1, r1, #48
addge r1, r1, #55
str r1, [r4]
lsr r1, r0, #0
and r1, r1, #0x0000000f
cmp r1, #10
addlt r1, r1, #48
addge r1, r1, #55
str r1, [r4]
mov r1, #13
str r1, [r4]
mov r1, #10
str r1, [r4]
add r0, r0, #99
add r0, r0, #99
add r0, r0, #99
add r0, r0, #48
b my_loop
my_exit:发布于 2014-04-10 23:21:04
我刚刚发现我的轮班是不正确的,应该是8位而不是6位。还要感谢@Michael给出了同样的答案。
https://stackoverflow.com/questions/22991597
复制相似问题