汇编语言实验三
Posted kksjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言实验三相关的知识,希望对你有一定的参考价值。
(一)将下面的程序保存为 t1.axm 文件,将其生成为可执行文件 t1.exe
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
(1)编辑
(2)编译
完成对源程序的编辑后,得到一个源程序文件 c:ASM 1.asm。可以对其进行编译,生成包含机器代码的目标文件
使用汇编编译器 masm 来完成编译任务。
(3)连接
可以看到经过编辑、编译、连接 3 个步骤后,当前文件夹下总共有 3 个文件,它们分别是:
- T1.ASM
- T1.OBJ
- T1.EXE
其中 T1.EXE 是一个可执行文件,也就是我们最终想要得到的文件。
(二)用 Debug 跟踪 t1.exe 的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容
下面说一说 DOS 中一个 EXE 文件被加载进内存的过程。
一个程序被加载进内存后,操作系统会为我们创建一个程序段前缀(PSP),DOS 需要通过 PSP 来和我们的程序进行通信,其中 PSP 和我们的程序在内存中的关系图大致如下:
程序加载后,DS 中存放着程序所在内存区的段地址,由于 PSP 也是程序在内存中的一部分,所以 DS = SA。
而 CS 是指向程序的第一条指令,CS = DS + 10H,通过上面动图里寄存器的内容也能看出来。DS = 0A67H,CS = 0A77H。
所以我们也可以说,通过 Dubug 命令,将这段程序从可执行文件中载入内存,程序起始地址为 0A67H,第一条指令起始地址为 0A77H,其中 0A67H ~ 0A77H 这段地址存放的是该程序对应的程序段前缀(PSP)。
程序从 0A77:0000 开始执行如下:
(三)PSP 的头两个字节是 CD 20,用 Debug 加载 t1.exe,查看 PSP 中的内容。
0A67:0000 ~ 0A67:0100 这段内容就是程序段前缀(PSP)里的内容。
以上是关于汇编语言实验三的主要内容,如果未能解决你的问题,请参考以下文章