首页 > 代码库 > 小甲鱼零基础汇编语言学习笔记第四章之第一个汇编程序
小甲鱼零基础汇编语言学习笔记第四章之第一个汇编程序
1、使用工具
代码编写:NotePad++,代码编译器:MASM
2、一个源程序从写出到执行的过程
第一步,使用文本编辑器,用汇编语言编写汇编源程序,这一步产生一个存储源程序的文本文件。
第二步,对源程序进行编译,连接。使用MASM.exe对源程序文件进行编译,产生目标文件,再使用LINK.exe对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。可执行文件包括两个部分,程序(从源程序的汇编指令翻译过来的机器码)和数据(源程序中定义的数据);相关的描述信息 (程序有多大,要占多少内存空间)。这一步产生了一个可在操作系统中直接运行的可执行文件.exe。
第三部,执行可执行文件。操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据载入到内存,并进行相关的初始化,比如讲CS:IP指向第一条要执行的汇编指令。然后由CPU执行程序。
3、一段简单的汇编语言源程序
assume CS:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4C00H
int 21H
codesg ends
end
上面的代码就是简单的加法运算,这里要解释几个概念。
第一,伪指令。汇编语言源程序中包含了汇编指令和伪指令。汇编指令会被翻译成对应的机器码,而伪指令则没有对应的机器码,最终不能被CPU所理解,但是会被编译器理解。伪指令是被编译器编译的指令,编译器根据伪指令进行相关的编译工作。在上面的程序中,伪指令有assume,segment...ends,end。
(1)segment...ends
segment和ends是成对出现的伪指令。意思是在二者之间定义一个段,segment表示一个段的开始,ends表示一个段的结束:
段名segment
.
.
段名 ends
一个汇编程序可以由多个段组成,这些段被用来存放代码、数据、或者被当做一个栈空间来使用。
(2)end
end是一个汇编程序结束的标记,编译器在编译程序时,碰到了伪指令的话,就会停止对源程序的编译。所以程序写完了一定要加上伪指令end。
(3)assume
assume表示“假设”的意思,假设某一段寄存器和程序中的某一个段相关联,也就是告诉CPU指向哪一个段,从哪里开始执行汇编指令的意思。
上面的代码中codesg segment...codesg ends定义了一个名为codesg的段,在这个段中存放了代码,所以这个段是一个代码段。程序开头用assume cs:codesg将代 码段codesg和CPU中的段寄存器CS联系在一起。
4、源程序中的“程序”
用汇编语言编写的程序包括伪指令和汇编指令。汇编指令是最终由计算机执行的程序,伪指令只是由编译器来执行。所以说,源程序中的“程序”指的就是由汇编指令或者数据构成的。程序经过编译连接后转换为CPU认识的机器码,过程如下图所示:
5、标号
汇编程序中,除了汇编指令和伪指令外,还有一些标号。就像是上面的示例代码中的“codesg”。一个标号指代了一个地址。比如codesg在segment前,作为段的名称,这个段的名 称最终被编译、连接程序处理为一个段的段地址。
6、程序返回
在上面的示例代码中:
mov ax,4c00H
int 21H
这两条指令所实现的功能就是程序返回。在程序的末尾使用这两条指令就可以实现程序返回。
这里我们要理解什么是程序返回。在DOS单任务操作系统中,一次只能运行一个程序,当程序1在运行时,程序2要运行,则要将CPU的控制权给程序2,程序2才能得到运行。程 序2开始运行后,程序1暂停。当程序2运行完毕后,应该讲CPU的控制权交还给程序1,此后,程序1继续运行。所以,一个程序结束后,将CPU的控制权交还给使得这个程序得 以运行的程序,这个过程就是程序返回。
7、区分与“结束”相关的概念
这里我们已经了解了几个“结束”相关的概念,区分如下表所示:
8、编译源程序
首先我们要有一个汇编编译器,这里我们使用的是MASM,需要下载的话,可以去我的百度网盘下载,链接:http://pan.baidu.com/s/1dFMUgH7(密码:xdpm)
将源程序文件和编译器放一块儿,方便我们直接编译:
进入cmd小黑窗,进入到MASM编译器目录中,运行MASM.exe:
此时文件夹中会出现一个object文件:
接下来我们使用LINK.exe来连接这个object文件:
连接后,文件夹中就会出现一个可执行文件:
要想查看程序的运行过程,我们可以使用debug来单步调试这个可执行程序:
我们可以看到,使用t命令单步执行debug后,会运行我们在程序中写的汇编指令。这里我们要注意一点,就是当语句执行到最后一局“int 21”时,我们要使用P命令来结束。调试结 束后,按“q”来退出debug,回到command中。
9、小结
汇编程序从写出到执行的过程如下图所示:
小甲鱼零基础汇编语言学习笔记第四章之第一个汇编程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。