assembly - 将非常简单的 ARM 指令转换为二进制/十六进制

标签 assembly binary hex arm opcodes

我一直在尝试使用 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 指令转换为它所组装的二进制/十六进制/机器代码.

预先感谢您的帮助。

最佳答案

以下是数据处理指令的编码方式:

ARM data processing instructions

您的该页面中有条件代码表。寄存器编码为 00001111

您的所有示例都属于同一类别。该图片是从我的硬盘上的某个文档中提取的,但我也设法通过 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/

相关文章:

c - 关于 Kernighan 和 Ritchie 练习 2-3 的问题

assembly - 如何关闭LLVM的集成汇编程序?

assembly - MIPS 上的嵌套子程序调用

c# - 迭代获取特定集合的所有子集

C# 将 delphi TColor 转换为颜色(十六进制)

javascript - 在 JS 中创建二进制 blob

gcc - 在 GCC 内联汇编中检索 ZF

c++ - 如何检测API Hook?

python - 提取 numpy 数组中每个元素的最后两位数字的有效方法

linux - 在 Mac OS X 下模拟 Linux 二进制文件