汇编语言实验一
<h1 id="实验结论">实验结论</h1><h2 id="任务1">任务1</h2>
<h5 id="安装dosbox">安装DosBox</h5>
<p>百度下载DosBox安装,打开界面如下,默认装载c盘下MYDEBUG作为当前目录。</p>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019161613509-2087571150.png" width="90%">
-
百度下载MASM文件,将文件夹中的**MASM.EXE****LINK.EXE**两个文件复制到MYDEBUG文件夹中就可以直接在DosBox中使用。
<h2 id="任务2">任务2</h2>
<ol>
<li>在debug中,使用d命令查看生产日期</li>
<li>使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看</li>
</ol>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019164521947-1274374069.png" width="60%">
-
尝试使用e命令修改,发现无法修改
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019164759737-976776355.png" width="60%">
-
原因分析:ROM是只读存储器,无法修改
<h2 id="任务3">任务3</h2>
<p>实验发现这是一个显示红心的数据</p>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019165630519-163412614.png" width="60%">
-
更改地址和数据
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019170207904-1295296090.png" width="60%">
<h2 id="任务4">任务4</h2>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019181104353-1594634008.png" width="60%">
-
1. 单步执行,在执行push指令和pop指令时,观察并记录栈顶偏移地址的寄存器sp值的变化情况。
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019181336531-403003989.png" width="60%">
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019181405034-2137504732.png" width="60%">
-
push ; 执行后,寄存器(sp) = 2E
push ; 执行后,寄存器(sp) = 2C
push ; 执行后,寄存器(sp) = 2A
push ; 执行后,寄存器(sp) = 28
pop ; 执行后,寄存器(sp) = 2A
pop ; 执行后,寄存器(sp) = 2C
pop ; 执行后,寄存器(sp) = 2E
pop ; 执行后,寄存器(sp) = 30
观察可以发现push的时候SP减小两字,8086CPU的栈操作都是以字作为单位的。
栈底是栈空间地址最大的位置,SP始终指向当前栈顶元素,也就是栈顶。
PUSH 时 SP = SP - 2
POP时 SP = SP + 2
<ol start="2">
<li>push 指令执行结束后, pop 指令执行结束前,使用d命令d 20:20 2f 查看此时栈空间的<br>
数据。</li>
<li>pop 指令执行结束后,使用d命令d 20:0 7 查看此时数据空间内的数据是否有变化。</li>
</ol>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019182811349-391712698.png" width="60%">
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019210537598-1000860950.png" width="60%">
-
4. 如果把最后四条指令改成截图中的顺序, pop 指令执行结束后,使用d命令d 20:0 7 查看此时数据空间内的数据是否有变化。
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019211502557-606655776.png" width="60%">
-
逆序了
<h2 id="任务5">任务5</h2>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211019211904455-1592612438.png" width="60%">
-
**问题1:使用t命令单步执行mov ss, ax 时,是单步执行完这一条指令就暂停了吗?后面的指令mov
sp, 30 是什么时候执行的?**
<p>答:通过观察mov ss,ax后寄存器的值可以发现,sp已经变成0030h了,所以此时mov sp, 30也同时执行完毕了。</p>
<p><strong>问题2:根据汇编指令,前三条指令执行后,00220H ~ 0022fH被设置为栈空间。并且,初始时,已通过f命令将初始栈空间全部填充为0。观察单步调试时,栈空间00220H ~ 0022fH内存单元值的变化,特别是图示中黄色下划线表示出的数据值。根据实验观察,尝试思考和分析原因。</strong></p>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211021083908440-1478232966.png" width="60%">
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211020201110330-2092049933.png" width="60%">
-
<p>答:观察发现第一次执行mov ss, ax时,会在给定的位置20:2f处放入当前的指令段的地址,同时会在20:28处放入当前ax的值,后续push数据时,sp指针正常移动,依次入栈数据。同时指定段地址和ax值依次向前覆盖,如果在此时改动ax中的数据,则上文描述放入的ax值也会改变。原因可能是因为中断没有保护现场等问题。</p>
<h2 id="任务6">任务6</h2>
<p>输出内容如下:</p>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211021092105291-426838541.png" width="60%">
-
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211021094642225-232377571.png" width="60%">
-
经验证确实是CD 20
<h2 id="任务7">任务7</h2>
<p>缺代码行的补全1:<code>mov ax, cs</code><br>
因为要把 mov ax, 4c00h 之前的指令复制到内存 0:200 开始的连续的内存单元, 这些都是代码段的内容,代码段的段地址存档在cs中。</p>
<p>缺代码行的补全2:<code>mov cx, 17H</code><br>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211021150619432-1967573637.png" width="60%"></p>
<p>因为cx中本身存放的是全部代码的大小,通过反汇编发现所有的指令的长度是23字节, 16进制是17H,就是要循环的次数。</p>
<p>调试结果:复制成功<br>
<img src="https://img2020.cnblogs.com/blog/2493407/202110/2493407-20211021152103455-513291179.png" width="60%"></p>
<h2 id="实验总结">实验总结</h2>
<ol>
<li>汇编是一门需要实践的语言,只有充分练习才能充分理解。</li>
<li>当不知道程序长度的时候可以通过u命令反汇编数程序长度,对于不同命令有不同长度,熟悉之后可以直接看代码得出长度。用减法也可以算出长度,利用cx本身存放的就是代码长度的特性。</li>
<li>汇编语言从底层操纵计算机,功能更加强大,但是也付出了安全性的代价。</li>
</ol><br><br>
来源:https://www.cnblogs.com/fyhtom/p/15425175.html
頁:
[1]