一、实验目的
理解程序在CS和IP寄存器的控制下运行的过程
学会观察栈工作的过程
学会由汇编语言源程序到可执行文件的生成过程,学会用Debug运行程序
二、实验内容过程记录
任务1-理解程序的执行过程
内存中的情况如下图:
各寄存器的初始值为:(CS)=2000H, (IP)=0, (DS)=1000H, (AX)=0, (BX)=0
1-1 用“人脑”完成
序号 (1)写出CPU执行的指令序列 (2)CS、IP和相关寄存器中数值的变化
1 Mov ax,6622H CS=2000;IP=3;ax=6622;bx=0;
2 Jmp 0ff0:0100 CS=0ff0;IP=0100;ax=6622;bx=0;
3 Mov ax,2000H CS=0ff0;IP=0103;ax=2000;bx=0;
4 Mov ds,ax CS=0ff0;IP=0105;ax=2000;bx=0;ds=2000;
5 Mov ax,[0008] CS=0ff0;IP=0108;ax=c189;bx=0;ds=2000;
6 Mov ax,[0002] CS=0ff0;IP=010b;ax=ea66;bx=0;ds=2000;
1-2 用“电脑”验证:
在debug中布置出如上所示的环境(预置内存和寄存器的值),截屏:
任务2-理解栈机制
已知(SS)=3000H,(SP)=200H,(AX)=785AH,(BX)=1234H
2-1 在下面空白处写下你的“人脑”run的结果(请在分析的过程中,在草稿纸上画出栈的结构来)
先执行下面的指令
PUSH AX
PUSH BX
此时
(SS)= 3000__
(SP)= 1fc____
存放12H的字节数据的物理地址是__01fd____
再执行
POP AX
POP BX
此时
(AX)= 1234____
(BX)= 785a____
栈结构如下图所示(可以将草稿纸上内容拍照插入)
2-2 用“电脑”验证:在debug中布置环境,运行上面的程序,通过查看栈区的数据,验证你的上述结论。
下面是验证过程的截屏:
提示:在做下面任务之前,请看完视频“0402 由源程序到程序运行”和“0403 用Debug跟踪程序的执行”
任务3-编制第一个汇编程序
(1)将下面的程序保存为p1.asm,将其生成可执行文件p1.exe。
assume cs:codesg
codesg segment
mov ax,0123H ;(1)
add ax,ax ;(2)
mov ax,4c00h
int 21h
codesg ends
end
(2)在Debug中单步执行这个程序
下面是编辑、编译、连接、运行的各个步骤的截图:
(3)请修改这个程序,使其能完成的任务是
传送25H到AL寄存器
将AL的内容乘以2
传送15H到BL寄存器
AL的内容加上BL的内容
完成程序的编辑、编译、连接、运行,并截图说明
提示:用4条指令替换p1.asm中的加注释(1)和(2)的两行即可。
下面是完成任务过程的截屏: