如果我想用立即十六进制值加载寄存器,我会这样做:
MOV R2,#0xBEEF
但是,如果我想加载一个仅对我可用的二进制值,该怎么办?例如,如果要加载二进制值0010 0000 0000 1100(十六进制为200C)。是否有像#0b0010000000001100
这样的特殊语法?还是我必须编写一个可以将十六进制转换为二进制的宏?
答案 0 :(得分:2)
在任何接受0b0101
或其他数字文字的地方,ARM的GNU汇编器(AArch32)确实接受0x
格式的base-2常数。令您惊讶的是,您猜对了,所以您不只是尝试一下。
例如,MOV R2, #0b0010000000001100
组合成
e302200c movw r2, #8204 ; 0x200c
带有gcc -c -marm arm-binary.s
。
如果ldr r2, =0b010101
不能通过单个mov
指令(例如-mcpu=cortex-m4 -mthumb
mov r2, #0b111000
ldr r2, =0b010101
ldr R2, =0b0010000000001100
arm-none-eabi-gcc -c -mcpu=cortex-m4 -mthumb arm-binary.s
与00000000 <.text>:
0: 2238 movs r2, #56 ; 0x38
2: f04f 0215 mov.w r2, #21
6: f242 020c movw r2, #8204 ; 0x200c
组合成以下机器代码:
{{1}}