一、实验目的
- 理解程序在CS和IP寄存器的控制下运行的过程
- 学会观察栈工作的过程
- 学会由汇编语言源程序到可执行文件的生成过程,学会用Debug运行程序
二、实验内容过程记录
任务1-理解程序的执行过程
内存中的情况如下图:
各寄存器的初始值为:(CS)=2000H, (IP)=0, (DS)=1000H, (AX)=0, (BX)=0
1-1 用“人脑”完成
序号 | (1)写出CPU执行的指令序列 | (2)CS、IP和相关寄存器中数值的变化 |
1 | mov ax,6622 | cs=2000 ip=0000 ds=1000 ax=6622 bx=0000 |
2 | jmp 0ff0:0100 | cs=0ff0 ip=0100 ds=1000 ax=6622 bx=0000 |
3 | mov ax,2000 | cs=0ff0 ip=0103 ds=1000 ax=2000 bx=0000 |
4 | mov ds,ax | cs=0ff0 ip=0105 ds=2000 ax=2000 bx=0000 |
5 | mov ax,[0008] | cs=0ff0 ip=0108 ds=2000 ax=c389 bx=0000 |
6 | mov ax,[0002] | cs=0ff0 ip=010b ds=2000 ax=ea66 bx=0000 |
1-2 用“电脑”验证:
在debug中布置出如上所示的环境(预置内存和寄存器的值):
单步执行上面的程序,验证结论:
任务2-理解栈机制
已知(SS)=3000H,(SP)=200H,(AX)=785AH,(BX)=1234H
2-1 在下面空白处写下你的“人脑”run的结果(请在分析的过程中,在草稿纸上画出栈的结构来)
先执行下面的指令`
PUSH AX
PUSH BX
此时
(SS)= __3000__
(SP)= __01FC___
存放12H的字节数据的物理地址是__301FD____
再执行
POP AX
POP BX
此时
(AX)= __1234______
(BX)= ___785A_____
栈结构如下图所示(可以将草稿纸上内容拍照插入)
2-2 用“电脑”验证:在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)的两行即可。
三、实验总结
记录:
在实验过程中,我对于程序的顺序判断很准确,因为了解程序执行的开始是CS:IP指向的地址,对于jmp指令的知识较为了解。但在写程序的时候a指令没有在指定CS,IP的位置内存开始写指令。用记事本写文件时,发现一个很好用的编辑器editplus在看了贺老师的截图发现会有彩色标记关键字,在网上搜索了一下,添加了asm.sxt文件,可以更加简便的检查拼写错误等。在使用DOS中的edit编辑中,鼠标无法跳出界面,我当时强制打开任务管理器才好,后来搜了一下csdn,发现快捷键Ctrl+F10可以跳出鼠标;
感受:
纸上得来终觉浅,绝知此事要躬行。理论知识固然重要,可是真正操作的时候就会暴露很多问题,所以要多实践操作,遇到问题就要请教去解决。
学习这门语言时如果能联系上以前学过的其他高级语言的知识,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。例如C语言程序的运行逻辑结构有顺序、分支结构,循环结构三种结构,也通过C语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。
思考:
学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构,学到这还没见到很多的指令和语句,但这是学习汇编前必须要知道和掌握的,只有知道了汇编的实质、如何工作及一些基本概念,才能进行下一步的学习。