-1

我对学习汇编 (x86) 语言很感兴趣,并制作了我的第一个 hello-world 程序。我在 windows-xp 中使用了调试器,我想知道是否有人可以解释每一行的作用。

 1) jmp 115
 2) db 'Hello world!$'
 3) -a 115 
 4) mov ah, 09
 5) mov dx, 102
 6) int 21
 7) int 20

我附上了在程序集中制作可执行文件的每个步骤的屏幕截图,

在此处输入图像描述

4

1 回答 1

5

我建议您阅读英特尔的软件开发人员手册(尤其是第 2 卷)和/或一些 x86 汇编教程(如The Art of Assembly

代码分解:

1) jmp 115

跳转到mov ah,09指令,这样 CPU 就不会像执行代码一样尝试执行 'Hello world' 字符串(CPU 无法区分代码和数据)。


2) db 'Hello world!$'

声明一个字符串。美元符号被一些 DOS 中断函数用作字符串终止符。


3) -a 115

告诉debug从地址 115 开始汇编后续代码。


4) mov ah, 09

将值 9 放入寄存器ah


5) mov dx, 102

将“Hello world”字符串的地址放入寄存器dx


6) int 21

执行中断 21h / 函数 9(写入字符串)。函数号应该在寄存器ah中,字符串偏移量在寄存器dx中,这是由前两条指令处理的。


7) int 20

执行中断 20h(终止程序

于 2013-09-18T14:46:32.757 回答