汇编语言——第4章 第一个程序

目录

4.1 一个源程序从写出到执行的过程

4.2 源程序

1、伪指令

2、源程序中的“程序”

3、标号

4、程序的结构

5、程序返回

6、语法错误和逻辑错误

4.3 编辑源程序

4.4 编译

4.5 连接

4.6 以简化的方式进行编译和连接

4.7 1.exe的执行

4.8 将可执行文件中的程序装载进入内存并使它运行

4.9 程序执行过程的跟踪


4.1 一个源程序从写出到执行的过程

汇编语言程序从写出到最终执行的过程:

第一步:编写汇编源程序

  • 使用文本编辑器(如Edit、记事本等),用汇编语言编写汇编源程序
  • 产生一个存储源程序的文本文件。

第二步:对源程序进行编译连接

  • 使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
  • 用编辑器(Sublime TextNodepad++UltraEdit)编写,文件后缀为.asm
  • 可执行文件包含两部分内容:
  1. 程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
  2. 相关的描述信息(比如,程序有多大,要占用多少内存空间等)
  • 产生一个可在操作系统中运行的可执行文件。

第三步:执行可执行文件中的程序

  • 操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。
  • 使用MASM.EXE编译生产obj(目标文件)
  • LINKE.EXE对目标文件进行连接生产可在操作系统中直接运行的可执行文件。

4.2 源程序

1、伪指令

在汇编语言源程序中,包含两种指令,一种是汇编指令,一种是伪指令

  • 汇编指令:有对应的机器码的指令,编译为机器指令被CPU执行。
  • 伪指令:没有对应的机器指令,不被CPU所执行,由编译器执行来进行相关的编译工作。

(1)segmentends

segmentends是一对成对使用的伪指令,是在写可被编译器编译的汇编程序时必须要用到的一对伪指令。segment和ends的功能是定义一个段,segment说明一个段开始,ends说明一个段结束。

一个有意义的汇编程序中至少有一个段。

使用格式:

段名 segment

 ......

段名 ends

(2)end

end是一个汇编程序的结束标记。

(3)assume

assume用来加上某一段寄存器和程序中的某一用segment……ends定义的段相关联。通过assume说明这种关联,在需要的情况下编译程序可以将段寄存器和某一个具体的段相联系。

assume cs:codesg ;假设代码段的名称为codesg

codesg segment ;定义一个codesg

mov ax,0123H

mov bx,0456H

add ax,bx

add ax,ax

mov ax,4c00h

int 21h

codesg ends ;codesg段结束

end ;是个伪指令,程序的结束标记

2、源程序中的“程序”

  • 将源程序文件中的所有内容称为源程序,将源程序中最终由计算机执行、处理的指令或数据,称为程序。
  • 程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

3、标号

一个标号指代了一个地址。如“codesg”。

codesg:放在segment前面,作为一个段的名称,这个段的名称最终将被编译、连接程序,称为一个段的段地址

4、程序的结构

​​​​​​​小练习

编程运算2^3:

assume cs:abc ;段与寄存器关联

abc segment ;定义一个段,名称为abc

mov ax,2;写入汇编指令

add ax,ax

add ax,ax

abd ends     

end ;程序结束处

5、程序返回

一个程序结束后,将CPU的控制权交还给使它得以运行的程序的过程称为:程序返回

在程序的末尾添加返回的程序段。

mov ax,4c00H

int 21H ;21号中断

这两条指令说实现的功能就是程序返回。

6、语法错误和逻辑错误

  • 程序在编译时被编译器发现的错误是语法错误。
  • 在源程序编译后,在运行时发生的错误是逻辑错误。

4.3 编辑源程序

​​​​​​​使用编辑器编辑,扩展名为.asm

assume cs:ABC

ABC segment

        mov ax,2

        add ax,ax

        add ax,ax

        mov ax,4c00H

        int 21h

ABC ends

end

4.4 编译

  • masn 1.asm在同一目录中,dos下使用masm 1.asm命令即可生产1.obj文件。
  • 在编译过程中,我们提供了一个输入,即源程序文件。最多可以得到3个输出:目标文件(.obj)、列表文件(.lst)、交叉引用文件(.crf)。目标文件是我们最终要得到的结果,而另外两个只是中间结果,可以让编译器忽略对它们的生成。
  • 编译过程中出现两类错误会得不到所期望的目标文件:

(1)程序中有“Severe Errors”;

(2)找不到所给出的源程序文件。

4.5 连接

  • ​​​​​​​link 1.obj,生成exe文件,enter忽略编译程序提示输入的信息。
  • 连接的作用:
  1. 当源程序很大时,可以将它分成多个源程序文件编译,每个源程序编译成目标文件后再用连接程序将他们连接到一起,生成一个可执行文件;
  2. 程序中调用了某个库文件中的子程序,需要将这个库文件和该目标文件连接到一起,生成一个可执行文件;
  3. 一个源程序编译后得到存有机器码的目标文件,目标文件中的有些内容还不能直接生成可执行文件,连接程序将此内容处理为最终的可执行文件信息。

4.6 以简化的方式进行编译和连接

4.7 1.exe的执行

4.8 将可执行文件中的程序装载进入内存并使它运行

(1)在DOS中直接执行1.exe时,是正在运行的command,将1.exe中的程序加载入内存;

(2)command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行;

(3)程序运行结束后,返回到command中,CPU继续运行command。

  • 汇编程序从写出到执行的过程:编程 -> 编译 -> 连接 -> 加载 -> 内存中的程序 -> 运行

4.9 程序执行过程的跟踪

​​​​​​​dos系统中.exe文件中的加载过程:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

关了个尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值