arm 处理器中指令问题

汇编指令 MOV R0,#0x4800, 经编译后,所得到的机器码的低 12 位是( )
A.0xB12 B.0xB24 C.0xA09 D.0xC48


32位寄存器其低12位保存了移位情况
其中高4位存移位次数低8位存数据:
0x4800
0000 0000 0000 0000 0100 1000 0000 0000
是由0x48(8位)
0000 0000 0000 0000 0000 0000 0100 1000 
循环右移24位得到的24=2*12=C(4位)
0xC48
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/234586
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:ARM指令之MOV指令汇编与机器码的对应关系
  • 除此之外, 这篇博客: 【ARM】ARM汇编程序设计(一)中的 05. mov指令 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    程序示例一: 立即数

        .section .rodata
        .align 2
    .LC0:
        .string "val = %d\n"
    
        .section .text
        .align 2
        .global main
    main:
        push {lr}
    
        ldr r0, =.LC0
        @
        @mov r1, #0x123
        @mov r1, #0x7f8
        @mov r1, #0xc80000003
        @mov r1, #0xc80000007
        @mov r1, #0x10000008
        mov r1, #0xff
        bl printf
    
        
        mov r0, #0
        pop {pc}
    

    执行结果:

    [root@itcast 1st]# ./a.out  
    val = 255
    [root@itcast 1st]# 
    

    程序示例二:移位操作

        .section .rodata
        .align 2
    .LC0:
        .string "val = %p\n"
    
        .section .text
        .align 2
        .global main
    main:
        push {lr}
    
        ldr r0, =.LC0
        mov r2, #0x100
        mov r1, r2, LSL #4
        bl printf
    
        
        mov r0, #0
        pop {pc}
    
    

    执行结果:

    [root@itcast 1st]# ./a.out 
    val = 0x1000
    [root@itcast 1st]# 
    

    程序示例三: 移位操作

        .section .rodata
        .align 2
    .LC0:
        .string "val = %p\n"
    
        .section .text
        .align 2
        .global main
    main:
        push {lr}
    
        ldr r0, =.LC0
        mov r2, #0xff000000
        @mov r1, r2, LSR #31
        @mov r1, r2, ASR #31
        mov r1, r2, ROR #31
    
        bl printf
    
        
        mov r0, #0
        pop {pc}
    

    执行结果:

    [root@itcast 1st]# ./a.out  
    val = 0xfe000001
    [root@itcast 1st]#
    

    程序示例四:表达式

        .section .rodata
        .align 2
    .LC0:
        .string "val = %p\n"
    
        .section .text
        .align 2
        .global main
    main:
        push {lr}
    
        ldr r0, =.LC0
        mov r1, #(100/4 + 3 * 2 + 1)
    
        bl printf
    
        
        mov r0, #0
        pop {pc}
    
    

    程序示例五:优化处理

        .section .rodata
        .align 2
    .LC0:
        .string "val = %p\n"
    
        .section .text
        .align 2
        .global main
    main:
        push {lr}
    
        ldr r0, =.LC0
        mov r1, #0xffffffff
        bl printf
    
        
        mov r0, #0
        pop {pc}
    

    执行结果:

    [root@itcast 1st]# ./a.out  
    val = 0xffffffff
    [root@itcast 1st]# 
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^