【发布时间】:2016-04-24 00:56:59
【问题描述】:
我正在探索 8086 指令集并在 emu8086 中编写简单的汇编代码。在遇到 LOOP 指令之前,我理解了所有的 MOV、ADD 和其他指令。 LOOP转换为E2,没关系。但是对于要分支的标签,汇编器是如何转换它的呢?如果代码很简单,很多时候 'label' 会转换为 FC。有时到 FA、F8 等。如果您讨论将标签名称转换为相应机器码的机制,那将是非常可观的。
谢谢。
【问题讨论】:
我正在探索 8086 指令集并在 emu8086 中编写简单的汇编代码。在遇到 LOOP 指令之前,我理解了所有的 MOV、ADD 和其他指令。 LOOP转换为E2,没关系。但是对于要分支的标签,汇编器是如何转换它的呢?如果代码很简单,很多时候 'label' 会转换为 FC。有时到 FA、F8 等。如果您讨论将标签名称转换为相应机器码的机制,那将是非常可观的。
谢谢。
【问题讨论】:
正如this page 中解释的那样,标签只是我们(程序员)的助记符。汇编器将该标签翻译成一个数字,例如要添加到要跳转到的指令指针的偏移量,而CX 不为零。
在您展示的示例中,这些偏移量是负数(符号位设置为 1)。所以它会跳回几条指令,就像你在循环中所期望的那样。
【讨论】: