第4章 第一个程序
4.1 一个源程序从写出到执行的过程
- 第一步:编写汇编程序
- 第二步:对源程序进行编译连接
- 第三步:执行可执行文件中的程序
4.2.源程序
汇编语言中包含两种指令:汇编指令 和 伪指令
- 汇编指令:有对应机器码的指令,最终被 CPU 执行
- 伪指令:由编译器进行执行,进行相关的编译动作
伪指令:
源程序中的程序
将源程序文件中所有内容称之为源程序,然后通过编译连接后转变为机器码,存储在可执行文件中
mov ax,4c00H int 21H
在程序末尾使用这两条指令就可以实现程序返回
标号
一个标号指代了一个地址,例如:codesg 在 segment 的前面,作为一个段的名称,这个段的名称最终会编译一个段的段地址。
任务:编程运算 2*3。源程序应该怎样来写?
assume cs:abc
abc segment
mov ax,2
mov ax,ax
mov ax,ax
mov ax,4c00H
int 21H
abc ends
end
4.3 谁将可执行文件中的程序装载入内存并使它运行?
在 DOS 中,可执行文件中的程序 P1 若要运行,必须有一个正在运行的程序 P2 ,将 P1 从可执行文件中加载入内存,将 CPU 的控制权交给它,P1 才能得以运行;当 P1 运行完毕后,会将 CPU 的控制权交还给使它得以运行的程序 P2。
这个 P2 程序就是 command.com(命令解释器),也就是 DOS 系统的 shell。具体可看下图。
4.4 程序执行过程的追踪
在 DOS 中运行一个程序时,command 将程序从可执行文件中加载入内存并使其运行,之后就放弃了 CPU 的控制权,并不能对程序的执行过程进行跟踪分析,所以这时需要使用到 Debug。Debug 也可以将程序加载如内存,设置 CS : IP 指向程序的入口,但 Debug 并不放弃对 CPU 的控制,这样就可以使用 Debug 相关的命令来单步执行程序,查看每一条指令的执行结果。但最后还是会把 CPU 控制权交还给 command。
- 使用 Debug 命令
- 程序加载的顺序:command 加载 Debug,Debug 加载 1.exe 。
- 返回的顺序是:1.exe 返回到Debug,从 Debug 返回到 command。
图4.20解释在 DOS 系统中的程序的加载过程。
调试命令:(不区分大小写)
- 输入R:查看各个寄存器的设置情况
- 输入U:查看此程序其他指令
- 输入T:单步执行程序中的每一条指令