【发布时间】:2017-02-09 20:43:18
【问题描述】:
根据Assemblers And Loaders(一本关于汇编程序如何工作的 24 年旧书):
...一次性汇编程序无法生成可重定位目标文件。这 可以确定指令的类型(绝对或可重定位) 仅通过检查原始源指令。一通 汇编程序将机器指令直接加载到内存中。曾在 内存,指令只是一个数字。通过看机器 内存中的指令,无法判断原来的是否 指令是绝对的或可重定位的。
本书给出了以下可重定位指令和绝对指令的伪代码:
JMP TO
...
TO: ADD 1,2
第一条指令使用符号TO,第二条指令将寄存器“1”和寄存器“2”中的值相加。
我的理解是你不需要源代码就知道第一条指令的机器码是可重定位的。应该可以使用操作码表来确定它是JMP 指令并且它必须跳转到需要可重定位的地址。
我的假设正确吗?
背景:虽然这本书很旧,但我正在阅读它以更好地了解 6502 和 65816 等旧 CPU 的组装。
【问题讨论】:
-
真的和你的其他问题没有什么不同。那本书谈到了可重定位的位是吗?那将是机器代码。对于一般的其他指令集,地址是加载到寄存器然后分支到因为它是外部地址还是仅仅因为作者或编译器是这样做的? (与使用 pc 相对偏移量相比)
-
我在想也许你应该停止阅读那本书。获取一个 gnu 工具链(最好是除 x86、arm、mips 之外的任何工具链,都是不错的选择),然后编译、反汇编然后链接和反汇编,然后思考甚至编写自己的工具(汇编器然后链接器)以查看问题是如何出现或可能出现的解决了。
标签: assembly