Assembly 在Arm 7组件中打印3位十六进制数字

Assembly 在Arm 7组件中打印3位十六进制数字,assembly,arm,hex,Assembly,Arm,Hex,好了,伙计们,我需要你们的帮助。我试图打印出3位数的十六进制数字,每次增加345。我知道在组装时,我应该单独打印十六进制数的每个部分。我会通过轮班“lsr”来做到这一点,但我在号码的第一部分得到了一个错误的号码。0之后的第一个数字应该是149(十进制为345),但我得到的是A59(十进制为2649) 这是我的密码 .globl _start _start: ldr r4,=0x101f1000 mov r0, #0x00 lsl r0, #4 add r0, #0

好了,伙计们,我需要你们的帮助。我试图打印出3位数的十六进制数字,每次增加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:

我刚刚发现我的移位不正确应该是8位而不是6位。还要感谢@Michael给出了同样的答案

第一个
lsr
应该是8,而不是6。我的2美分是4@迈克尔我也看到了同样的事情谢谢你的帮助man@AnthonyDevoz为什么是8?它不是像一个数字的4位吗?@auselen你是对的,它每一位4位,我需要在2位上移位,因此2x4=8移位