程序集 hello world 的描述

Bjö*_*röm -1 assembly

我对学习汇编 (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)

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

在此处输入图片说明

Mic*_*ael 5

我建议您阅读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(终止程序