如何将二进制值加载到寄存器中?

时间:2018-10-25 00:07:21

标签: assembly arm cortex-m

如果我想用立即十六进制值加载寄存器,我会这样做:

MOV R2,#0xBEEF

但是,如果我想加载一个仅对我可用的二进制值,该怎么办?例如,如果要加载二进制值0010 0000 0000 1100(十六进制为200C)。是否有像#0b0010000000001100这样的特殊语法?还是我必须编写一个可以将十六进制转换为二进制的宏?

1 个答案:

答案 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}}