assembly - ARM中如何获取寄存器值的二进制补码?

标签 assembly arm bit-manipulation twos-complement

假设我在寄存器 v1 中有一个 32 位有符号 int。我想获取该值的二进制补码以存储在另一个寄存器 v2 中。在普通数学中,这意味着我需要翻转所有 32 位,然后加 1。

如何翻转位?

最佳答案

试试这个,(MVN move with not):

MVN v2, v1

这就像你问的那样“翻转位”。然后你只需执行+1:

ADD v2, v1, #1

或者,您也可以仅使用 NEG v2, v1 指令(RSB v2, v1, #0 的简写)在单个指令中执行等效操作。

关于assembly - ARM中如何获取寄存器值的二进制补码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959446/

相关文章:

linux - ARM:禁用 MMU 并更新 PC

assembly - x86中 "lock"在arm汇编中对应的前缀是什么?

c - 这段翻译好的汇编代码还有什么更大的意义吗?

assembly - 我可以将返回地址保存在寄存器中并将其推回堆栈中 NASM x86_64 中的 `ret` 之前吗

c - GCC 3.4.3 选项-fstack-protector-all 的替代品?

erlang - 如何运行基于 Erlang 的机器人?是否可以将其转换为 .hex 并在微 Controller 上运行?

gcc - 在 Angström (Beagleboard) 上编译 Hello World

c - DES - 位和逆排列

c++11 - 如何使用按位运算将 3 个整数值编码为 uint16_t?

algorithm - 使用 1 位变量确定数字是否为数字回文