汇编-4.1-汇编程序

1.汇编程序写出到执行过程
1.编写汇编程序
使用文本编辑器编辑源程序
2.编译链接
对源程序文件中的源程序进行编译,产生目标文件;再用连接程序对目标文件进行连接,生成可执行文件。
可执行文件:
(1).程序(从源程序中的汇编指令翻译过的机器码)和数据(源程序中定义的数据)
(2).相关的数据(程序大小,内存占用空间)
3.执行可执行文件的程序
2.源程序
1.伪指令
汇编语言中,有两种指令,一种是汇编指令,一种是伪指令。
汇编指令:有机器码的指令,可以被编译器执行。
伪指令:没有对应的机器码,不会被编译器执行。
伪指令:
(1).XXX segment
XXX ends
这是一对成对使用的伪指令,功能是定义一个段,segment是一个段的开始,ends是一个段的结束。
段名 segment
.
.
段名 ends ;段到此结束
(2).end
汇编程序结束标记,end汇编程序就编译结束。
(3).assume
含义为假设。它假设某一段寄存器和程序中的某一个用segment….ends定义的段相关联。将有特定用途的段和相关的段寄存器关联起来即可。例如,assume cs:codesg
2.源程序中的“程序”
是指源程序中最终由计算机执行、处理的指令或数据。
3.标号
一个标号指代了一个地址。如,codesg在segment的前面,作为一个段地名称,这个段的名称最终被编译、链接程序处理为一个段的段地址。
4.程序的结构
源程序由段构成,我们可以在段中存放代码,数据、或将某个段作为栈空间。
(1).定义一个段abc
abc segmeng
.
.
abc ends
(2).在段中写入汇编指令
abc segmeng

mov ax ,2
add ax ,ax
add ax,ax

abc ends
(3).指出程序结束
abc segmeng

mov ax ,2
add ax ,ax
add ax,ax

abc ends
end
(4).abc被当作代码段来使用,将abc和CS关联起来。
assume cs:abc
abc segmeng

mov ax ,2
add ax ,ax
add ax,ax

abc ends
end
最终写成源代码。
5.程序返回
程序P1和P2,P2在可执行文件中;
正在运行的程序P1,将P2从可执行文件中加载到内存后,将CPU的控制权交给P2,P2才的以运行。P2运行结束后,P1暂停运行;
P2运行结束,将CPU控制权交还给P1,P1继续运行。
以上过程就称为:程序返回。
6.语法错误和逻辑错误
3.编辑源程序
可以用任意文本编辑器来编辑源程序,最终将其存储为纯文本文件即可。
4.编译
完成源程序的编辑后,得到一个源程序文件(.asm文件),对源程序进行编译,生成包含机器代码的目标文件。
5.连接
对源程序进行编译得到目标文件后,我们需要对目标文件进行连接,从而得到可执行文件。
(1).当源程序很大时,可以将多个源程序分开来编译,每个源程序编译称为目标文件后,再用连接程序将他们连接在一起,生成一个可执行文件。
(2).程序中如果调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接在一起,生成一个可执行文件。
(3).一个源程序有了机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接查询将这些内容处理为最终的可执行信息。
6.汇编程序从写出到执行的过程
编程(Edit)–>1.asm–>编译(masm)–>1.obj–>连接(link)–>1.exe–>加载(command)–>内存中的程序–>运行(CPU)
7.程序执行过程的跟踪
可以使用Debug,Debug可以将程序加载如内存,设置C指向程序入口,但Debug并不放弃CPU的控制权,这样就可以使用Debug的相关命令来单步执行程序,查看执行效果。
Dos系统.exe文件的加载过程:
这里写图片描述
(1).程序加载后,ds中存放着程序所在的内存的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为ds:0;
(2).这个内存区钱的256个字节存放的是PSP,DOS用来和程序进行同行。
虚拟机汇编开发环境搭建参考:
https://www.cnblogs.com/sanduo1314/p/5886377.html

猜你喜欢

转载自blog.csdn.net/changjucha3459/article/details/81057847