这学期开设了汇编与接口技术课程,博主也是第一次接触汇编语言,所以准备通过博客的形式记录自己的学习日常,里面都是博主本人的理解,如有错误希望多多指正。也欢迎一起探讨。
预备知识:MOV指令,LEA指令,中断指令,伪指令
首先展示程序:
1 | DATAS SEGMENT |
下面是逐行详解:
1
1 | DATAS SEGMENT |
13表示回车,10表示换行,$是汇编语言定义的一个字符串的结尾标志。回车的含义是鼠标光标移动到行头,换行表示鼠标光标移动到下一行。
这句话定义了一个存储在内存中的段,这个段的起始地址是DATAS(即DATAS实际上是一个立即数)。之后在段内定义了一个数据类型是Byte的字符串:Hello World!,字符串的名称是STRING。实际上STRING就是这个字符串的起始地址。
2
1 | CODES SEGMENT |
这部分在内存中定义了一个叫做CODES的段,然后在ASSUME中声明出DATAS段就是数据段,CODES段就是代码段。这样,我们就可以在代码段中写我们的汇编程序了。
3
1 | START: |
这部分属于代码段的一部分。首先要明确:显示字符串是MOV AH,9这个指令实现的,且显示字符串的入口地址是DS:DX,所以我们的思路就是,把数据段首地址传到DS段寄存器中,把字符串的首地址传到DX通用寄存器中。接下来我们仍然逐行进行分析:
3.1
1 | MOV AX,DATAS |
汇编语言MOV指令中规定不能直接用立即数给段寄存器传值,所以我们需要AX通用寄存器作为中间传递者。这里我们实现了把数据段首地址传到了DS寄存器中了。
3.2
1 | LEA DX,STRING |
这里我们首先把STRING字符串的有效地址传到了DX中,结合3.1的操作,我们实现了入口地址DS:DX的设置。然后我们调用9号显示字符串功能(MOV AH,9),再让系统开始执行这个功能(INT 21H)。
3.3
1 | MOV AH,4CH |
这是个固定句式,表示返回操作系统。
3.4
1 | CODES ENDS |
第一行表示结束代码段,第二行表示结束程序。