【发布时间】:2014-05-24 08:52:33
【问题描述】:
好的,伙计们,我在这个程序上需要你的帮助。我正在尝试打印出每次增加 345 的 3 位十六进制数字。我知道在组装中我应该单独打印十六进制数字的每个部分。我会通过轮班“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:
【问题讨论】:
-
第一个
lsr应该是 8,而不是 6。 -
我的两分钱是四分钱!
-
@Michael 我刚刚看到了同样的东西,谢谢你的帮助
-
@AnthonyDevoz 为什么是 8?一个数字不是 4 位吗?
-
@auselen 你是正确的,每位数 4 位我需要移动 2 位数,因此 2x4=8 移位