我一直在尝试使用 this page 以及各种其他指南,了解如何将非常简单的 ARM 指令表示为二进制和十六进制。对我来说这似乎应该是一个简单的过程,但我仍然不明白。以下是一些示例。
基本 NOP:
what goes here? what goes here?
_↓_ _____↓____
| | | |
mov r0, r0 ; ????00?1101?????????????????????
|__||__|
↑ ↑
how do I express registers?
其他人也有同样的基本问题。
比较两个寄存器:
cmp r1, r0
将立即数添加到寄存器值:
add r0, #0x1a
所有这些在线教程都很好地描述了如何使用此类指令,但我找不到任何一个真正详细介绍如何将 ARM 指令转换为它所组装的二进制/十六进制/机器代码.
预先感谢您的帮助。
最佳答案
以下是数据处理指令的编码方式:
您的该页面中有条件代码表。寄存器编码为 0000
到 1111
。
您的所有示例都属于同一类别。该图片是从我的硬盘上的某个文档中提取的,但我也设法通过 google 找到它。编写这些指令是一项乏味的工作。
所以,mov r0, r0
应该像这样:
1110 00 0 0 1101 0000 0000 00000000
我将 Rn 设置为 0,因为它实际上不适用于 MOV
。在 CMP
的情况下,我相信 S
始终为 1。
关于assembly - 将非常简单的 ARM 指令转换为二进制/十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785973/