【发布时间】:2015-04-16 00:10:20
【问题描述】:
我正在用 C 语言编写一个程序,将针对 the LC3 processor 编译的十六进制文件转换回汇编语言。
目前,我正在尝试解码ADD 指令。
LC3汇编语言中有两种ADDs:
- 引用添加:添加两个寄存器
- 立即添加:将寄存器添加到硬编码值中
例如,十六进制代码164F 将转换为:ADD R3, R1, R7。这是一个引用添加。相反,153F 的十六进制代码将转换为:ADD R2, R4, #-1。这是一个立即添加。
该函数应根据需要对两者进行解码。
【问题讨论】:
-
作为初级程序员编写decompiler 不会是一件容易的事,事实上它会非常困难。而如何做到这一点也很大程度上取决于您要反编译的平台,因为某些架构具有可变大小的指令。
-
你应该首先了解 I/O 功能,并用它做一些测试来学习它。拥有good reference 将在这里有所帮助。在尝试编写任何类型的大型或复杂程序之前,了解您正在编程的语言、库和平台也很好。然后,对于您的实际作业,您应该彻底阅读 CPU 架构的手册和文档,它们会告诉您说明中的每一点的含义。
-
我们使用的微架构是 LC3,所有指令都设置为 16 位。谢谢你的快速反应。如果我遗漏了更多必要的信息,请告诉我。
-
另外,我知道所有说明的含义。我已经研究微架构大约一个月了,并且玩过十六进制和汇编。我的问题不在于架构,而在于 C 中的 I/O。
-
使用
fopen打开文件,fread将文件读入内存(例如,读入uint16_t的数组),并使用循环检查每条指令。没什么大不了的。
标签: c disassembly lc3