第四章 第一个程序
第四章 第一个程序*注:完整程序会被框起来,并带有编号,使用consolas字体。控制台和command用Time New Roman字体。输出使用
4.1一个源程序从写出到执行的过程
1. 编译的过程:先使用编译器对源程序文件中的源程序进行编译,产生目标文件,再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
2. 可执行文件的组成
·程序(从源程序汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
·相关的描述信息
3. 程序的执行:操作系统依照描述信息,将可执行文件的机器码和数据加载入内存,并进行相关的初始化,然后由CPU执行程序
4.2源程序
Program 4-1
assume cs:codesg
codesg segment
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h
int 21h
codesg ends;不要写错了!!!!!!!!!!
end
程序说明
1. 伪指令
(1) segment...ends(成对使用)
该伪指令定义一个段,segment说明段的开始,ends说明段的结束(注意不是end!!!!!!)格式:
段名 segment
...
段名 ends
一个有意义的汇编程序至少要有一个段,该段用来存放代码。
以上的程序定义了一个叫做codesg的代码段
(2) end是一个汇编程序结束的标记
(3) assume用于假设某一个段寄存器和程序中某个段的关联,以上的代码将codesg与cs寄存器关联,表明codesg是代码段。
2. 标号
以上的程序中codesg是一个标号。一个标号指代了一个地址。这里codesg作为段名会被处理为一个段的段地址。
3. 程序返回
(1) DOS系统是一个单任务操作系统,若一个程序P2在可执行文件中,正在执行的程序P1将P2从可执行文件中载入内存中后,CPU的控制权被交给P2,才可以运行P2,P1暂停运行。P2运行完毕,应将CPU控制权返还给P1,该过程为程序返回。
(2) 在汇编中返回:
mov ax,4c00h
int 21h
4. 注释:分号后是注释:
;这是一条注释
5. 语法错误:在编译时发现的错误
6. 逻辑错误:在运行时,程序没有按照预期执行
总结:源程序的结构
assume cs:段名
段名 segment
...
段名 ends
end
4.3~4.7程序的编辑到运行
DOS中的编辑程序:edit
Microsoft masm 5.0的编译器使用:
汇编源文件默认拓展名:.asm
masm 文件名指定要生成目标文件的源文件
在编译过程忽略列表文件(.lst)、交叉引用文件(.crf)的生成
若程序有Severe Errors必需修正
Microsoft Overlay Linker 3.60连接器使用:
link 文件名;简化过程,直接生成可执行文件,忽略中间文件生成。
4.8 谁将可执行文件中的程序装载入内存并使它运行? 4.9 程序执行过程的跟踪
1.任何的操作系统都提供一个shell(外壳),让用户操作计算机系统。DOS的shell是command.com
2.debug将程序载入内存后寄存器cx存放程序的长度
3.DOS中*.EXE的加载
(1)程序加载后,DS存放程序所在内存区域的段地址,偏移地址为0
(2)内存区的前256个字节中存放的是PSP,用于与DOS通信。256个字节后是程序.即程序的位置在SA+10H:0处
4.debug中用P命令执行int 21h.
程序正常返回时显示
“Program terminated normally”,G命令可以让程序从头到尾执行。
实验3 编程、编译、连接、跟踪
(1) 将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。
Program ex-t1
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
(2) 用DEBUG跟踪t1.exe的执行过程,写出一步执行后,相关寄存器的内容和栈顶内容。
(3)PSP的头两个字节是CD20,用DEBUG加载t1.exe,查看PSP的内容。
解答
指令寄存器
[init]CX=0016H,DS=075AH,CS=076AH,SS=0769H,IP=0000H
mov ax,2000HIP=0003H
mov ss,ax
mov sp,0 IP=0008H
add sp,10 IP=000BH
pop ax AX=0000H
pop bx BX=0000H
push ax
push bx
pop ax
pop bx
mov ax, 4c00h
int 21H
PSP的查看:
