汇编指令 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
不知道你这个问题是否已经解决, 如果还没有解决的话:程序示例一: 立即数
.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]#