8086 汇编程序如何将标签转换为操作码?
How 8086 assembler converts the label to opcode?
我正在探索 8086 指令集,并在 emu8086 中编写简单的汇编代码。 MOV、ADD等指令我都看懂了,直到遇到LOOP指令。 LOOP 转换为 E2,没问题。但是要分支的标号,汇编器是怎么转换的呢?如果代码简单,很多时候'label'都转成FC了。有时到 FA、F8 和其他。如果能讨论一下将标签名转换为对应机器码的机制,将不胜感激。
谢谢。
正如this page 上所解释的,标签对我们(程序员)来说只是一个助记符。汇编程序将该标签翻译成数字,例如要添加到要跳转到的指令指针的偏移量,而 CX
不为零。
在您展示的示例中,这些偏移量是负数(符号位设置为 1)。所以它会跳回一些指令,正如您在循环中所期望的那样。
我正在探索 8086 指令集,并在 emu8086 中编写简单的汇编代码。 MOV、ADD等指令我都看懂了,直到遇到LOOP指令。 LOOP 转换为 E2,没问题。但是要分支的标号,汇编器是怎么转换的呢?如果代码简单,很多时候'label'都转成FC了。有时到 FA、F8 和其他。如果能讨论一下将标签名转换为对应机器码的机制,将不胜感激。
谢谢。
正如this page 上所解释的,标签对我们(程序员)来说只是一个助记符。汇编程序将该标签翻译成数字,例如要添加到要跳转到的指令指针的偏移量,而 CX
不为零。
在您展示的示例中,这些偏移量是负数(符号位设置为 1)。所以它会跳回一些指令,正如您在循环中所期望的那样。