汇编 - 一个简单的汇编程序

05x00 前言

​ 编写一个完整的汇编程序语言,用编译和连接程序将它们编译连接成为可执行文件(如*.exe),在操作系统中运行。为了能够透彻地理解一个完整的程序,尽管它看上去十分简单,我们将经历一个漫长的过程

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

​ 一个汇编程序从写出到最终执行的简要过程有这些步骤:编写汇编源程序 - > 对源程序进行编译连接 -> 执行可执行文件中的程序

image-20241202070126316

使用汇编程序对源程序文件中的源程序进行编译,产生目标文件;再用连接程序对目标进行连接,生成可在操作系统中直接运行可执行文件,可执行文件包含两部分内容

​ 程序:从源程序中的汇编翻译过来的机器码

​ 数据:源程序中定义的数据

​ 相关的描述信息:程序多大、要占用多少内存空间等

05x02 源程序

;一段简单的汇编语言程序
assume cs:codesg
codesg segment
	mov ax,0123H
	mov bx,0556H
	add ax,bx
	add ax,ax
	mov ax,4c00H
	int 21H
codesg ends
end

​ 汇编语言程序中,包含两种指令,一种是汇编指令,一种是伪指令,汇编指令之前有提过,有对应的机器码的指令

伪指令

伪指令就是没有对应的机器指令,最终是不会被CPU所执行,在上述的一个简单的汇编程序中出现了三种伪指令

A. segment ends
XXX segment
XXX ends
segment ends 是一对成对使用的伪指令,这是写可被编译器编译的汇编程序时必须要用到的一对伪指令,它们的功能是定义一个段,segment说明开启一个段,ends说明一个段结束,一个段必须有一个名称来标识,使用格式如下
codesg segment;定义一个段,名称为codesg,这个段从此开始

codesg ends;名称为codesg的段到此结束

​ 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当做栈空间来使用,一个源程序中所有将被计算机所处理的信息:指令、数据、栈被划分到了不同的段中,一个有意义的汇编程序至少需要一个段 这个段用来存放代码。

B end

​ end是一个汇编程序的结束标记,编译器在无名编译程序的过程中,如果遇到了伪指令end,就结束了对编译程序的编译,如若没有,编译器就无法知道程序什么时候结束,end标记整个程序的结束

C assume

这条伪指令的含义为“假设”,它假设一段寄存器和程序中的某一个用 segment ... ends 定义的段相关联

源程序中的程序

汇编语言所写的源程序,包括伪指令和汇编指令,编程的最终目的是让计算机完成一定的任务,源程序中的汇编指令组成了最终由计算机执行的程序,而源文件中的伪指令是由编译器来处理的,它们并不实现我们编程的最终目的,这里所说的程序就是指源程序中最终由计算机执行处理的指令或数据

程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中

image-20241202090015291

标号

​ 汇编程序中,除了汇编指令和伪指令外,还有一些编号,比如 codesg 一个标号指代一个地址

程序的结构
定义一个段,名称为abc
abc segment
abc ends
在这个段中写入汇编指令,实现任务
abc segment
	mov ax,2
	add ax,ax
	add ax,ax
abc ends
指出程序在何处结束
abc segment
	mov ax,2
	add ax,ax
	add ax,ax
abc ends
end
abc被当作代码段来用,所以应该将abc和cs联起来
assume cs:abc
abc segment
	mov ax,2
	add ax,ax
	add ax,ax
abc ends
end
程序返回

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

​ 进行返回的指令是应该在程序末尾增加返回的程序段

mov ax,4c00H
int 21H
语法错误和逻辑错误

语法错误:程序在编译时被编译器发现的错误是语法错误

逻辑错误:程序编译后,在运行时发生的错误是逻辑错误

语法错误容易发现,也容易解决,而逻辑错误通常不易被发现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值