周武 發表於 2021-10-23 18:53:00

汇编语言实验一

<p>实验任务一</p>
<p>1.教材实验一</p>
<p>(1)</p>
<p>通过A命令将汇编语言输入内存</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022110918396-676803826.png"></p>
<p>&nbsp;</p>
<p>&nbsp;用R cs和R ip将cs:ip指针指向第一条程序的位置073F:0100,接着用T命令逐条执行命令</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022111238966-403278927.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022111321399-533490335.png"></p>
<p>&nbsp;</p>
<p>(2)</p>
<p>将指令输入内存并且调整cs:ip指针</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022112207772-1173206036.png"></p>
<p>&nbsp;</p>
<p>&nbsp;重复执行若干次后得到0100即256</p>
<p>(3)</p>
<p>用D命令查看内存</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022112855886-454717684.png"></p>
<p>&nbsp;发现日期为92年1月1日;</p>
<p>&nbsp;尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022113746486-1175337263.png"></p>
<p>&nbsp;(4)</p>
<p>输入后结果如图</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022114016465-72098725.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211022114024933-1686475441.png"></p>
<p>&nbsp;</p>
<p>&nbsp;因为A0000到BFFFF为显存空间</p>
<p>&nbsp;</p>
<p>实验任务二</p>
<p>见上试验任务一(三)</p>
<p>&nbsp;</p>
<p>试验任务三</p>
<p>在debug中,使用e命令,向内存单元填写数据。</p>
<p>-e b800:0 03 04 03 04 03 04 03 04 03 04</p>
<p>从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。</p>
<p>结果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023170747365-471913399.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在debug中,使用f命令,向内存单元批量填写数据。</p>
<p>-f b800:0f00 0f9f 03 04</p>
<p>把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。</p>
<p>结果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023171322128-1467737200.png"></p>
<p>&nbsp;</p>
<p>&nbsp;尝试改变内存数据</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023171421195-1791570732.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>试验任务四</p>
<p>(1)</p>
<p>初始,(sp)=0030</p>
<p>执行完push 后 &nbsp; (sp)=002E</p>
<p>执行完push 后&nbsp;&nbsp; (sp)=002C</p>
<p>执行完push 后&nbsp;&nbsp; (sp)=002A</p>
<p>执行完push 后&nbsp;&nbsp; (sp)=0028</p>
<p>&nbsp;</p>
<p>执行完pop 后&nbsp;&nbsp; (sp)=002A</p>
<p>执行完pop 后&nbsp;&nbsp; (sp)=002C</p>
<p>执行完pop 后&nbsp;&nbsp; (sp)=002E</p>
<p>执行完pop 后 &nbsp; (sp)=0030</p>
<p>(2)栈空间数据如下图</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023173631816-1989778596.png"></p>
<p>&nbsp;</p>
<p>&nbsp;可见20:2e处为push所压入的字2010H</p>
<p>(3)</p>
<p>数据空间结果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023173951799-1622056902.png"></p>
<p>&nbsp;</p>
<p>&nbsp;数据没有变化</p>
<p>(4)</p>
<p>结果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023174802848-1244790249.png"></p>
<p>&nbsp;</p>
<p>&nbsp;可以发现数据顺序颠倒了</p>
<p>&nbsp;</p>
<p>试验任务五</p>
<p>结果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023175641284-1990152485.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023175652130-874796452.png"></p>
<p>&nbsp;</p>
<p>&nbsp;实验任务六</p>
<p>过程如下</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023182019430-1451696578.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023182029375-1820870106.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023182039923-2134114595.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023182044512-504368873.png"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023182050042-740711913.png"></p>
<p>&nbsp;</p>
<p>&nbsp;试验任务七</p>
<p>补全代码如下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
mov cx,</span><span style="color: rgba(128, 0, 128, 1)">23</span><span style="color: rgba(0, 0, 0, 1)">
s: mov al,
mov es:,al
inc bx
loop s

mov ax,4c00h
</span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> 21h
code ends
end</span></pre>
</div>
<p>&nbsp;</p>
<p>(1)第一空填写 cs,因为这是程序开始的地址;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二空填写 21;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看代码发现最后line3-line12所占空间为 0000H~0017H&nbsp; 17H=2</p>
<p><img src="https://img2020.cnblogs.com/blog/2596764/202110/2596764-20211023184542100-67447050.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>实验结论</p>
<p>&nbsp;实验二</p>
<p>尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据;</p>
<p>&nbsp;</p>
<p>实验三</p>
<p>截图见上</p>
<p>&nbsp;</p>
<p>实验四</p>
<p>问题一:SS:SP 20:30&nbsp; 02300H</p>
<p>问题二:截图见上</p>
<p>问题三:截图见上</p>
<p>问题四:截图见上</p>
<p>&nbsp;</p>
<p>实验五</p>
<p>问题一:debug的t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行</p>
<p>问题二:查阅资料知,与中断机制有关。</p>
<p>&nbsp;</p>
<p>实验六</p>
<p>见上</p>
<p>&nbsp;</p>
<p>实验七</p>
<p>见上</p>
<p>&nbsp;</p>
<p>&nbsp;实验总结</p>
<p>通过本次实验,对dosbox下的debug工具及其命令,edit工具,文件的编译、连接,汇编中栈的知识有了更加深入的理解。</p><br><br>
来源:https://www.cnblogs.com/nuistlyc/p/15437607.html
頁: [1]
查看完整版本: 汇编语言实验一