自学王爽老师《汇编语言》笔记——第4章 第一个程序
第四章 第一个程序
4.1 一个原程序从写出到执行的过程
- 编写汇编源程序
- 编辑源程序
- 产生存储源程序的文本文件
- 对源程序进行编译链接
- 源文件 -> 目标文件 -> 可执行文件
- 产生可执行文件
- 可执行文件包含两部分:
- 程序和数据
- 相关的描述信息(程序的大小,占用多少内存空间)
- 执行可执行文件中的程序
- 在操作系统中执行文件中的程序
4.2 源程序
4.2.1 伪指令
没有对应机器指令,由编译器根据伪指令来进行相关的编译操作。
类型:
- XXX segment ... XXX ends
- 成对使用,定义一个段
- 一个有意义的汇编程序至少要有一个段,这个段用来存放代码
- end
- 切忌搞混ends和end
- 汇编程序的结束标记,编译器编译时如果碰到end,就结束编译
- assume
- 假设某一段寄存器和程序中的某一个用segment...ends定义的段相连
4.2.2 源程序中的“程序”
用汇编语言写的源程序,包括伪指令和汇编指令。
4.2.3 标号
- 一个标号指代一个地址
- XXX 在segment前面作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的地址。
4.2.4 程序的结构
源程序是由一些段构成的。我们可以在这些段中存放代码、数据、或将某个段当作栈空间。
4.2.5 程序返回
程序返回:一个程序结束后,将CPU的控制权交还给使它得以运行的程序的过程。
与结束相关的概念:
目的 | 相关指令 | 指令性质 | 指令执行者 |
---|---|---|---|
通知编译器一个段结束 | 段名 ends | 伪指令 | 编译时,由编译器执行 |
通知编译器程序结束 | end | 伪指令 | 编译时,由编译器执行 |
程序返回 | mov ax,4c00 int 21 | 汇编指令 | 执行时,由CPU执行 |
4.2.6 语法错误和逻辑错误
一般来说,程序在编译时被编译器发现的错误是语法错误;在运行时发生的错误是逻辑错误。
4.3 编辑源程序
- 可以使用任意文本编辑器来编辑汇编程序,只要最终将其存储为纯文本文件即可
- 后缀名为
.asm
4.4 编译
使用masn编译器。
在编译过程中,最多可以得到3个输出:目标文件(.obj)、列表文件(.lst)、交叉引用文件(.crf)。
4.5 连接
使用Overlay Linker连接器。
连接的作用:
- 当源程序很大时,可以将它分为多个源程序文件来编译,生成多个目标文件后再连接成为一个可执行文件。
- 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成可执行文件。
- 源文件编译后生成的目标文件中有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。
4.6 以简化的方式进行编译和连接
masm file; link file;
4.7 1.exe的执行
4.8 谁将可执行文件中的程序装载进入内存并使它运行?
操作系统的外壳:
- 任何通用的操作系统,都要提供一个成为shell(外壳)的程序,用户使用这个程序来操作计算机系统进行工作。
- DOS中有一个程序command.com,这个程序是DOS的shell。
- DOS启动时,先完成其它重要的初始化工作,然后运行command.com。
- 如果用户要执行一个程序,则输入该程序的名称,command首先根据文件名找到可执行文件,然后将这个可执行文件加载到内存,设置CS:IP指向程序的入口。
4.9 程序执行过程的追踪
- 可以用Debug来跟踪一个程序的运行过程。
- Debug将程序从可执行文件加载入内存后,CX寄存器中存放的是程序的长度。
- EXE文件中程序的加载过程
- 程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为ds:0;
- 这个内存区的前 256个字节中存放的是PSP,DOS用来和程序进行通信。从256字节处向后的空间存放的是程序。
- 使用p命令指行
int 21
实验3 编程、编译、连接、跟踪
assume CS : codesg codesg segment mov ax, 2000H mov SS, ax mov sp,0 add sp, 10 pop ax pop bx push ax push bx pop ax pop bx mov ax, 4c00H int 21H codesg ends end#汇编语言##自学##读书笔记#