exe程序的前世今生|汇编语言(王爽版)学习笔记 第四章 第一个程序

引言

我们开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如*.exe文件),在操作系统中运行。

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

编写汇编源程序

  • 使用文本编辑器,用汇编语言编写汇编源程序

对源程序进行编译链接

  • 使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件
  • 再用链接程序(LINK.EXE)对目标文件进行链接,生成可以在操作系统中直接运行的可执行文件。

可执行文件

  • 可执行文件包含两部分内容:
    (1)程序和数据
    (2)相关的描述信息

执行可执行文件中的程序

  • 在操作系统中,执行可执行文件中的程序
  • 操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的初始化(比如设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。
    在这里插入图片描述

4.2 源程序

assume cs:codesg
codesg segment
start: mov ax,0123H	;汇编指令,有机器码和其一一对应,可以编译成对应的机器指令
	   mov bx,0456H
	   add ax,bx
	   add ax,ax
	   
	   mov ax,4c00h
	   int 21h
	
codesg ends
end ;伪指令,汇编程序的结束标记
  • 伪指令:没有对应的机器码,不被CPU执行,编译器识别
    例如:xxx segment
    segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
    segment是段的开始,ends是段的结束
    一个段必须要有一个名称来标识
    段名 segment

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

定义一个段

  • 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。
  • 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

程序经编译链接后变为机器码

在这里插入图片描述

标号

  • 一个标号指代了一个地址
  • codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、链接程序处理为一个段的段地址

DOS中的程序运行

  • DOS是一个单任务操作系统
    在这里插入图片描述
    应该再程序的末尾添加返回的程序段
mov ax,4c00H
int 21H
这两条指令所实现的功能就是程序返回

在这里插入图片描述

4.3 编辑源程序

可以用任意的文本编辑器来编辑源程序
在这里插入图片描述

4.4 编译

在这里插入图片描述

4.5链接

在这里插入图片描述

问题4.1

在这里插入图片描述

问题4.2

程序结束运行后,返回到哪里?
在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 9907350 查看本文章

4.9 程序执行过程的跟踪

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PSP的段地址是SA,PSP的物理地址是SA*0x10+0,即SA:0
PSP占256字节,16进制是0x100,故程序的开始地址是SA+10H:0

发布了87 篇原创文章 · 获赞 45 · 访问量 5094

猜你喜欢

转载自blog.csdn.net/weixin_43092232/article/details/104927998
今日推荐