简述汇编语言源程序从写出到执行的过程

汇编用资源

DOSBox、debug、masm等汇编工具
蓝奏云链接:
link.

了解源程序从写出到执行的过程

文本编辑
编译连接
程序员
源程序文件
可执行文件
执行

源程序

程序指的是源程序中最终由计算机执行、处理的指令或数据。而伪指令只被编译器识别,所以程序是由汇编指令组成的。

汇编源程序示例

assume cs:codesg

codesg segmend\t
	mov ax,0123H
	mov bx,0456H
	add ax,bx
	add bx,bx

	mov ax,4c00H
	int 21H
codesg ends

end
伪指令:

在之前介绍过编译器的伪指令的概念,现在我们来介绍三种伪指令:
1)

XXX segment
	:
	:
	:
XXX ends

segment和ends是一对成对使用的伪指令,在编辑文本时必须用到。
segment和ends的功能是定义一个段(这个段可以是代码段也可以是数据段),segment说明一个段的开始,ends说明一个段的结束。
段必须有段名来标识:

段名 segment
	:
段名 ends

2)end
end是一个汇编程序的结束标记,编译器在编译的过程中,如果碰到了伪指令end,就结束对原程序的编译。

3)assume
assume的含义为“假设”。它假设某一段寄存器和程序中的某一个segment…ends定义的段相关联,在有需要的情况下,编译程序可以将某一段寄存器和程序中的某一个segment…ends定义的段相关联。

assume 具体作用:
要用assume把段跟段bai寄存器对应起来的原因du是原来的DOS找到的空闲zhi内存的地址不是固定的,dao无法找到一个地址在任何时候都是空闲的。于是DOS需要可以重定位的程序,而当时的定位方式就是设置段寄存器的值使该程序能在可分配(空闲)的内存中可用。那就需要知道某个段被重定位时候需要修改哪个段寄存器的值才能正确执行。assume提供这种段和重定位代码时需要对应修改的寄存器的关系给编译器,编译器再这个信息写到二进制文件中去。比如DOS下的exe程序记录在文件头中。

标号

汇编源程序中,除了汇编指令和伪指令外,还有一些标号。一个标号指代了一个地址。例如前面说的codesg,作为一个段的名称,这个段的名称最终被编译、连接程序处理为一个段的段地址。

程序的结构

1)定义一个段,设定这个段的名称end
2)在这个段中写入汇编指令
3)程序结束(end指令)

程序返回
assume cs:codesg

codesg segmend\t
	mov ax,0123H
	mov bx,0456H
	add ax,bx
	add bx,bx

	mov ax,4c00H
	int 21H
codesg ends

end

在DOS操作系统中,一个程序p2在可执行文件中,要运行p2就必须要有一个正在运行的程序p1将p2从可执行文件中加载入内存后,将CPU的控制权交给p2,p2才能得以运行。p2开始运行后,p1暂停运行。
在p2运行完毕后,将CPU的控制权交还给使它得以运行的程序p1使得p1继续运行。
在这里将CPU的控制权交还给使它得以运行的程序,我们称为程序返回

在上面的例子中:

	mov ax,4c00H
	int 21H

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

在汇编语言中int是一个向CPU发送中断的指令。格式为INT vec。vec为中断向量号,其值为0~255。CPU根据这个向量号去调用内核对应的中断例程。
而在这里调用中断程序21H;ah放置中断程序的子程序编号,al放置传给他的值。4c子程序用于函数的返回,al放置返回值。
ax取值范围是4c00h—4cffh。

编辑源程序

文本编辑
编译
连接
程序员
源程序文件
目标文件
可执行文件
执行

我们通过文本编辑生成源程序文件,这里我们可以使用任意的文本编辑器,只要最终将其存储成纯文本文件即可。
1)如果使用DOS下的Edit将会生成*.asm文件。
2)如果使用windows下的记事本等将会生成*.txt文件。
在这里插入图片描述

编译连接

我们使用DOS下的masm进行编译,link进行连接。

编译

打开masm,输入要编译的源程序文件名(若在同一文件夹下可不输入地址,若为*.asm文件可不输入".asm")
在这里插入图片描述
按Enter键后程序提示输入要编译出的目标文件的名称,直接按Enter键生成同文件名目标文件1.obj。
接下来程序会依次提示输入要生成的列表文件(.lst)和交叉引用文件(.crf)的名称,可以让编译器不生成这两个文件只要都按Enter键即可跳过。
最终得到的目标文件(.obj)就是我们所期望得到的文件。

当程序中有语法错误或找不到所给出的源程序文件时,将得不到我们所期望得到的目标文件。

连接

打开link,程序提示输入将要被连接的目标文件名,若目标文件的扩展名是obj则可不输入".obj",若为其他,就要输入全名。输入文件名时还要指明所在路径。
在这里插入图片描述
按Enter键后程序提示输入要生成的可执行文件的名称,直接按Enter键生成同文件名可执行文件1.exe。
接下来程序会依次提示输入要生成的映像文件(.map)和库文件(.lib)的名称,可以让编译器不生成这两个文件只要都按Enter键即可跳过。
最终得到的目标文件(.obj)就是我们所期望得到的文件。

连接的作用
1)当源程序很大时,可以将它分为几个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将他们连接到一起,生成一个可执行文件;
2)程序中调用来某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
3)一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

简化编译连接的过程

直接在第一行文件名后加入分号即可,会自动忽略中间文件的生成。
Alt
也可以使用命令行"C:\masm>masm c:\1;"直接生成目标文件,会自动忽略中间文件的生成。link也是如此。

操作系统的外壳(shell)

通用的操作系统都要提供一个称为shell(外壳)的程序,用户(操作人员)通过这个程序来操作计算机系统进行工作。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值