我对学习汇编 (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
我附上了在程序集中制作可执行文件的每个步骤的屏幕截图,
我对学习汇编 (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
我附上了在程序集中制作可执行文件的每个步骤的屏幕截图,
我建议您阅读英特尔的软件开发人员手册(尤其是第 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(终止程序)