Assembly ARM汇编语言中二进制位的插入方法
我有一个LPC1768 ARM MBED处理器。现在我在Assembly ARM汇编语言中二进制位的插入方法,assembly,arm,mbed,Assembly,Arm,Mbed,我有一个LPC1768 ARM MBED处理器。现在我在R1中有一个二进制字符串:101111。 有什么办法可以做到:10100111(我在原始编号中插入2“0”)直接在原始编号中添加位 为了清楚起见,我想在ARM汇编语言中执行此操作。ARM有一些功能强大的位字段指令,可以让您高效地执行此操作 UBFX或右移,将插入位置上方的所有位保存到另一个寄存器中 按要插入的零的数量向左移动 BFI将高位(加上增加的零)插入回插入位置 BFI仅适用于即时插入位置和长度,但它会替换目标中的旧位,因此您不
R1
中有一个二进制字符串:101111
。
有什么办法可以做到:10100111
(我在原始编号中插入2“0
”)直接在原始编号中添加位
为了清楚起见,我想在ARM汇编语言中执行此操作。ARM有一些功能强大的位字段指令,可以让您高效地执行此操作
- UBFX或右移,将插入位置上方的所有位保存到另一个寄存器中
- 按要插入的零的数量向左移动
- BFI将高位(加上增加的零)插入回插入位置
~((1):
ubfx r2, r1, #3, #3
and r1, r1, #7
bfi r1, r2, #5, #3
在小于v7的情况下:
lsr r2, r1, #3
and r1, r1, #7
orr r1, r1, r2, lsl #5
当然有一种方法。它只是一些位运算。但它不会是一条指令。@Jester我认为实际上有一种汇编方法可以做到这一点?不是汇编方法,只需查看位并计算出位(或者如果你想做加法,就要加上值)要执行的操作。完成这些步骤,然后将它们应用到目标编程语言,无论是arm汇编还是其他语言。如果不仅仅是此位模式,而是abcdef变为abc00def,则它是按位的(加上其他一些,取决于哪种方式的步数更少)@old_timer“反向工程”通常是学习新东西更有效的方法,尤其是组装。