【问题标题】:Printing 3-digit Hex numbers in Arm 7 Assembly在 Arm 7 组件中打印 3 位十六进制数字
【发布时间】: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 移位

标签: assembly arm hex


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多