1.一个汇编语言程序从写出到最终执行的简要过程?
第一步:编写汇编源程序
第二步:对源程序进行编译连接(结果是:产生了一个可在操作系统中运行的可执行文件)
第三步:执行可执行文件中的程序
2.在汇编语言源程序中,包含两种指令,一种是汇编指令,一种是伪指令。
汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。
伪指令没有对应的机器指令,最终不能被CPU所执行。伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
3.伪指令的种类:
①.XXX segment XXX ends
②.end
③.assume
4.程序的结构
①定义一个段,名称为abc
abc segment
:
abc end
②在这个段中写入汇编指令,来实现我们的任务
abc segment
mov ax,2
add ax,ax
add ax,ax
abc end
③然后,要指出程序在何处结束
abc segment
mov ax,2
add ax,ax
add ax,ax
abc end
end
④abc当作代码段来用,所以,应该将abc和cs联系起来
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,ax
abc end
end
5.程序返回
mov ax,4c00H
int 21H
这两条指令所实现的功能就是程序返回,在目前阶段,我们不必去理解int 21H的含义和mov ax,4c00H的含义。
6.编译源程序和连接成可执行文件
用到的编译器是:微软的masm5.0 masm.exe
用到的连接器是:微软的Overlay Linker3.60 Link.exe
编译源程序.asm,生成的目标文件.obj,中间会生成中间文件.lst和.crf,可以不用生成这些文件。
连接目标文件.obj,生成可以执行文件.exe,中间会生成中间文件.map和.lib,也可以不用生成这些文件。
7.程序执行过程的跟踪
在dos下,执行命令:
debug 文件名称.exe 在debug下运行,并跟踪程序执行过程
-r 可以查看,把.exe程序加载进内存后,哥哥寄存器的设置情况
-u 可以以汇编代码的形式查看,内存中各个地址中存放的机器码
-t 可以单步执行,并跟踪程序的运行情况
8. 程序被装入内存的什么地方?
①程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为ds:0
②这个内存区的前256个字节中存放的是PSP,DOS用来和程序进行通信。从256字节处向后的空间存放的是程序。
从ds中可以得到PSP的段地址SA,PSP的偏移地址为0,则物理地址为SA*16+0。