我对学习汇编 (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
Run Code Online (Sandbox Code Playgroud)
我附上了在汇编中制作可执行文件的每个步骤的屏幕截图,
我建议您阅读Intel 的软件开发人员手册(尤其是第 2 卷)和/或一些 x86 汇编教程(例如The Art of Assembly .
代码分解:
1) jmp 115
Run Code Online (Sandbox Code Playgroud)
跳转到mov ah,09
指令,这样 CPU 就不会像执行代码一样尝试执行“Hello world”字符串(CPU 无法区分代码和数据之间的区别)。
2) db 'Hello world!$'
Run Code Online (Sandbox Code Playgroud)
声明一个字符串。美元符号被一些 DOS 中断函数用作字符串终止符。
3) -a 115
Run Code Online (Sandbox Code Playgroud)
告诉debug
汇编从地址 115 开始的后续代码。
4) mov ah, 09
Run Code Online (Sandbox Code Playgroud)
将值 9 放入 register ah
。
5) mov dx, 102
Run Code Online (Sandbox Code Playgroud)
将“Hello world”字符串的地址放入寄存器 dx
6) int 21
Run Code Online (Sandbox Code Playgroud)
执行中断 21h/函数 9(写字符串)。函数编号在 register 中ah
,字符串 offset 在 register 中dx
,这由前两条指令处理。
7) int 20
Run Code Online (Sandbox Code Playgroud)
执行中断 20h(终止程序)
归档时间: |
|
查看次数: |
790 次 |
最近记录: |