汇编语言程序设计 实验1 用机器指令和汇编指令编程
<h1 style="text-align: center">汇编语言程序设计 实验1 用机器指令和汇编指令编程</h1><h2>一、实验目的</h2>
<ol>
<li><span class="fontstyle0"><span class="fontstyle2">熟练掌握使用<span class="fontstyle0">debug<span class="fontstyle2">工具编写和调试<span class="fontstyle0">x86</span></span></span></span></span>汇编命令的方法</li>
<li class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2">掌握<span class="fontstyle0">8086CPU</span></span></span></span></span></span></span></span></span>、寄存器、内存的基础知识</li>
<li class="fontstyle2">理解并掌握内存中多字节数据的存放:小端法</li>
<li class="fontstyle2">理解并掌握「栈」内存空间的特性和使用</li>
<li class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2"><span class="fontstyle0"><span class="fontstyle2">掌握指令<span class="fontstyle0">mov, add, sub, jmp, push, pop<span class="fontstyle2">的基础用法 </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li>
</ol>
<h2>二、实验内容及结果</h2>
<h3>(一)汇编语言(王爽第4版)实验1 查看CPU和内存,用机器指令和汇编指令编程</h3>
<h4 style="margin-left: 30px">1、实验准备</h4>
<h5 style="margin-left: 30px">(1)DOSBox的安装</h5>
<p style="margin-left: 60px">超级贴心的老师已经准备好了<span class="fontstyle0">Windows<span class="fontstyle1">平台下的下载安装程序(<span class="fontstyle2">DOSBox0.74-3-win32-installer<span class="fontstyle1">),以及Mac OS<span class="fontstyle1">下的安装镜像(<span class="fontstyle2">DOSBox-0.74-3-2.dmg),下载好之后一步一步按照老师的教程也可以顺利使用啦!</span></span></span></span></span></span></p>
<p style="margin-left: 60px">链接:https://pan.baidu.com/s/1xkV_L_4G42AvKPidYu_czA 提取码:1314</p>
<h5 style="margin-left: 30px">(2)Debug的使用</h5>
<h6 style="margin-left: 60px">① 常用的Debug功能</h6>
<p style="margin-left: 60px">R命令:查看、改变CPU寄存器的内容</p>
<p style="margin-left: 60px">D命令:查看内存中的内容</p>
<p style="margin-left: 60px">E命令:改写内存中的内容</p>
<p style="margin-left: 60px">U命令:将内存中的机器指令翻译成汇编指令</p>
<p style="margin-left: 60px">T命令:执行一条机器指令</p>
<p style="margin-left: 60px">A命令:以汇编指令的格式在内存中写入一条机器指令</p>
<p style="margin-left: 60px">P命令:执行汇编程序,单步跟踪。(与T命令的不同:P命令不会跟踪进入子程序或软中断。)</p>
<p style="margin-left: 60px">Q命令:退出Debug,回到DOS状态。</p>
<h6 style="margin-left: 60px">② 在DOSbox中进入Debug</h6>
<p style="margin-left: 60px">输入命令</p>
<div class="cnblogs_code">
<pre>mount d: d:\masm</pre>
</div>
<p style="margin-left: 60px">如下图所示,可以在指定盘中运行Debug程序</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009191711153-1721765003.png"></p>
<h6 style="margin-left: 60px">③用R命令查看、改变CPU寄存器的内容</h6>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009192830421-497358756.png"></p>
<p style="margin-left: 60px">需要注意的是CS和IP的值,CS=073F,IP=0100,也即内存073F:0100处的指令为CPU当前要读取、执行的指令。</p>
<p style="margin-left: 60px">Debug还列出了CS:IP所指向的内存单元处所存放的机器码,并将它翻译成汇编指令,此处CS:IP所指向的内存单元为073F:0100,存放的机器码为0000,对应的汇编指令为ADD ,AL。感觉这条指令挺特别的就在网上搜了搜,就是把al的值与ds:的值相加,然后将结果放到ds:中(但其实好像没啥意义,就是0000反编译而成的TAT)。右下角还有一个DS:0000=CD,网上查了之后得知:DS:0000就是这个DS的数据段偏移量0000的地址,就是进阶寻址这个数据,看到是CD。</p>
<p style="margin-left: 60px">同时,R命令也可以用来改变CPU寄存器的内容,如下图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009194820871-2054101751.png"></p>
<h6 style="margin-left: 60px">④用D命令查看内存中的内容</h6>
<p style="margin-left: 60px">用D命令直接查看,将列出Debug预设的地址处的内容,如图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009195504473-608566688.png"></p>
<p style="margin-left: 60px">可以用”d段地址:偏移地址“的格式来查看内存某处的内容,如图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009195325862-707385306.png"></p>
<h6 style="margin-left: 60px">⑤用E命令改写内存中的内容</h6>
<p style="margin-left: 60px">可以用E命令改写内存中的内容,如图所示:</p>
<h6><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009195748717-759527973.png"></h6>
<h6 style="margin-left: 60px">⑥用U命令将内存中的机器指令翻译成汇编指令</h6>
<p style="margin-left: 60px">可以用U命令将内存中的机器指令翻译成汇编指令,如图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009200217397-197006060.png"></p>
<h6 style="margin-left: 60px">⑦用T命令执行一条机器指令</h6>
<p style="margin-left: 60px">可以用T命令执行一条机器指令,如图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009200625257-446852054.png"></p>
<p style="margin-left: 60px">(A指令的使用方法将在实验任务中展示。)</p>
<h4 style="margin-left: 30px">2、实验任务</h4>
<p style="margin-left: 30px">(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。</p>
<div class="cnblogs_code" style="text-align: left">
<pre><span style="color: rgba(0, 0, 0, 1)"> 机器码 汇编指令
b8 </span><span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)"> 4e mov ax,4E20H
</span><span style="color: rgba(128, 0, 128, 1)">05</span> <span style="color: rgba(128, 0, 128, 1)">16</span> <span style="color: rgba(128, 0, 128, 1)">14</span><span style="color: rgba(0, 0, 0, 1)"> add ax,1416H
bb </span><span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)"> mov bx,2000H
</span><span style="color: rgba(128, 0, 128, 1)">01</span><span style="color: rgba(0, 0, 0, 1)"> d8 add ax,bx
</span><span style="color: rgba(128, 0, 128, 1)">89</span><span style="color: rgba(0, 0, 0, 1)"> c3 mov bx,ax
</span><span style="color: rgba(128, 0, 128, 1)">01</span><span style="color: rgba(0, 0, 0, 1)"> d8 add ax,bx
b8 1a </span><span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> mov ax,001AH
bb </span><span style="color: rgba(128, 0, 128, 1)">26</span> <span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> mov bx,0026H
</span><span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> d8 add al,bl
</span><span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> dc add ah,bl
</span><span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> c7 add bh,al
b4 </span><span style="color: rgba(128, 0, 128, 1)">00</span> mov ah,<span style="color: rgba(128, 0, 128, 1)">0</span>
<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)"> d8 add al,bl
</span><span style="color: rgba(128, 0, 128, 1)">04</span> 9c add al,9CH</pre>
</div>
<p style="margin-left: 30px">提示,可用E命令和A命令以两种方式将指令写入内存。注意用T命令时,CS:IP的指向。</p>
<p style="margin-left: 30px">首先用R命令查看当前寄存器内容,如图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009202520632-857070960.png"></p>
<p style="margin-left: 30px">分别用E命令和A命令以两种方式将指令写入内存</p>
<p style="margin-left: 30px">Ⅰ E命令</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009202046845-1129279634.png"></p>
<p style="text-align: left; margin-left: 30px">Ⅱ A命令</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009203254333-1772152371.png"></p>
<p style="text-align: left; margin-left: 30px">反汇编结果:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009203351206-2048210625.png"></p>
<p style="text-align: left; margin-left: 30px">执行代码前需修改CS:IP,以指向指定的内存段,并用R命令查询是否修改成功:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009203500015-60677325.png"></p>
<p style="text-align: left; margin-left: 30px">用T命令执行</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009204159122-1602089059.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009205427786-456253349.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009205824783-1294663390.png"></p>
<p style="text-align: left; margin-left: 30px">由执行过程可以看出,IP的增加值与对应的代码的机器码长度有关。</p>
<p style="text-align: left; margin-left: 30px">(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。</p>
<div class="cnblogs_code">
<pre>mov ax,<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
add ax,ax
jmp </span><span style="color: rgba(128, 0, 128, 1)">2000</span>:<span style="color: rgba(128, 0, 128, 1)">0003</span></pre>
</div>
<p style="margin-left: 30px">输入3条指令,并且修改CS:IP,用R命令检查:</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009210449583-958723778.png"></p>
<p style="margin-left: 30px">AX作为累加单元,初始值为0001。JMP为立即数,表示将立即数转移到IP中,执行结果中IP的值在不断改变,在执行过程中充当循环的作用,题目所求2的8次方,即使mov ax,ax循环8次,结果如下:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009211230320-1367253999.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009211302416-210487157.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009211319364-1591827764.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009211349825-1710885175.png"></p>
<p style="text-align: left; margin-left: 30px">图中标识处即为求得的2的8次方结果(16进制表示)</p>
<p style="text-align: left; margin-left: 30px">(3)查看内存中的内容</p>
<p style="text-align: left; margin-left: 30px">PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009211856239-914799701.png"></p>
<p style="margin-left: 30px">由结果可得,生产日期为01/01/92,下面试图改变这个日期:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009212006356-1463672453.png"></p>
<p style="text-align: left; margin-left: 30px">由结果可得,生产日期在只读的地址空间,故只能读取而不能写入,也就不能改变它。</p>
<p style="text-align: left; margin-left: 30px">(4)向内存从B8100H开始的单元中填写数据,如:</p>
<div class="cnblogs_code">
<pre>-e B810:<span style="color: rgba(128, 0, 128, 1)">000</span> <span style="color: rgba(128, 0, 128, 1)">01</span> <span style="color: rgba(128, 0, 128, 1)">01</span> <span style="color: rgba(128, 0, 128, 1)">02</span> <span style="color: rgba(128, 0, 128, 1)">02</span> <span style="color: rgba(128, 0, 128, 1)">03</span> <span style="color: rgba(128, 0, 128, 1)">03</span> <span style="color: rgba(128, 0, 128, 1)">04</span> <span style="color: rgba(128, 0, 128, 1)">04</span></pre>
</div>
<p style="margin-left: 30px">请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。</p>
<p><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009212415200-2134943186.png"></p>
<p style="text-align: center"><span style="color: rgba(255, 0, 0, 1); font-family: "Microsoft YaHei"; font-size: 16px"><strong>有图片欸!!!!!</strong></span></p>
<p style="text-align: left; margin-left: 30px"><span style="text-align: left">改变填写的数据和填写的地址:</span></p>
<p><span style="text-align: left"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009212701091-461407292.png"></span></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009212715796-1974867399.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009212726113-1339102185.png"></p>
<p style="text-align: left; margin-left: 30px">结果显示,B8100H在显存地址空间,故在B8100H开始的单元中填写数据会被读取并解析为对应的屏幕信息并显示。</p>
<h3 style="text-align: left; margin-left: 30px">(二)汇编语言(王爽第4版)实验2 用机器指令和汇编指令编程</h3>
<h4 style="margin-left: 30px">1、实验任务</h4>
<p style="margin-left: 30px">(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mov ax,ffff
mov ds,ax
mov ax,</span><span style="color: rgba(128, 0, 128, 1)">2200</span><span style="color: rgba(0, 0, 0, 1)">
mov ss,ax
mov sp,</span><span style="color: rgba(128, 0, 128, 1)">0100</span><span style="color: rgba(0, 0, 0, 1)">
mov ax,[</span><span style="color: rgba(128, 0, 128, 1)">0</span>] ;ax=<span style="color: rgba(0, 0, 0, 1)">_____
add ax,[</span><span style="color: rgba(128, 0, 128, 1)">2</span>] ;ax=<span style="color: rgba(0, 0, 0, 1)">_____
mov bx,[</span><span style="color: rgba(128, 0, 128, 1)">4</span>] ;bx=<span style="color: rgba(0, 0, 0, 1)">_____
add bx,[</span><span style="color: rgba(128, 0, 128, 1)">6</span>] ;bx=<span style="color: rgba(0, 0, 0, 1)">_____
push ax ;sp</span>=<span style="color: rgba(0, 0, 0, 1)">_____ ; 修改的内存单元的地址是_____内容为_____
push bx ;sp</span>=<span style="color: rgba(0, 0, 0, 1)">_____ ; 修改的内存单元的地址是_____内容为_____
pop ax ;sp</span>=_____ ; ax=<span style="color: rgba(0, 0, 0, 1)">_____
pop bx ;sp</span>=_____ ; bx=<span style="color: rgba(0, 0, 0, 1)">_____
push [</span><span style="color: rgba(128, 0, 128, 1)">4</span>] ;sp=<span style="color: rgba(0, 0, 0, 1)">_____ ; 修改的内存单元的地址是_____内容为_____
push [</span><span style="color: rgba(128, 0, 128, 1)">6</span>] ;sp=_____ ; 修改的内存单元的地址是_____内容为_____</pre>
</div>
<p style="margin-left: 30px"><span class="fontstyle0">为了便于验证实验结果,对「</span><span class="fontstyle1">2. </span><span class="fontstyle0">实验任务」的</span><span class="fontstyle1">(1)</span><span class="fontstyle0">做如下两点调整:<br></span><span class="fontstyle3">① 在使用 </span><span class="fontstyle4">a </span><span class="fontstyle3">命令输入指令调试之前,先使用 </span><span class="fontstyle4">e </span><span class="fontstyle3">命令将内存单元 </span><span class="fontstyle1" style="color: rgba(119, 119, 119, 1)">0022:0 ~0022:7</span><span class="fontstyle3">连续 </span><span class="fontstyle4">8 </span><span class="fontstyle3">个字<span class="fontstyle3">节数据修改为 </span><span class="fontstyle1" style="color: rgba(119, 119, 119, 1)">50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H</span></span><span class="fontstyle1" style="color: rgba(119, 119, 119, 1)"><br></span><span class="fontstyle3">② 将 </span><span class="fontstyle4">P74 </span><span class="fontstyle3">实验任务</span><span class="fontstyle4">(1)</span><span class="fontstyle3">中第</span><span class="fontstyle4">1</span><span class="fontstyle3">行的 </span><span class="fontstyle5">mov ax, ffff </span><span class="fontstyle6">→ </span><span class="fontstyle3">改为 </span><span class="fontstyle5">mov ax, 0022</span> </p>
<p style="margin-left: 30px">过程如下所示:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009214252215-669996386.png"></p>
<p style="text-align: left; margin-left: 30px">结果如下图所示:</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009214518370-1607493583.png"></p>
<p style="text-align: left; margin-left: 30px">在这里执行mov ss,ax时,mov sp,0100也跟着执行了</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009214526673-1839413127.png"></p>
<p style="text-align: left; margin-left: 30px">执行push时,先sp-2,再将数据放入到栈中</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009214533297-2089964707.png"></p>
<p style="text-align: left; margin-left: 30px">执行pop时,先取出数据到寄存器,然后sp+2</p>
<p style="text-align: left; margin-left: 30px">需要特别注意的是,ss:sp始终指向栈顶元素</p>
<p style="margin-left: 30px"> 故需填内容为:</p>
<div class="cnblogs_code">
<pre>mov ax,[<span style="color: rgba(128, 0, 128, 1)">0</span>] ;ax=<span style="color: rgba(0, 0, 0, 1)">5150H
add ax,[</span><span style="color: rgba(128, 0, 128, 1)">2</span>] ;ax=<span style="color: rgba(0, 0, 0, 1)">A4A2H
mov bx,[</span><span style="color: rgba(128, 0, 128, 1)">4</span>] ;bx=<span style="color: rgba(0, 0, 0, 1)">5554H
add bx,[</span><span style="color: rgba(128, 0, 128, 1)">6</span>] ;bx=<span style="color: rgba(0, 0, 0, 1)">ACAAH
push ax ;sp</span>=00FEH<span style="color: rgba(0, 0, 0, 1)"> ; 修改的内存单元的地址是2200:00FE内容为A4A2H
push bx ;sp</span>=<span style="color: rgba(0, 0, 0, 1)">00FCH ; 修改的内存单元的地址是2200:00FC内容为ACAAH
pop ax ;sp</span>=PPFEH ; ax=<span style="color: rgba(0, 0, 0, 1)">ACAAH
pop bx ;sp</span>=00FCH ; bx=<span style="color: rgba(0, 0, 0, 1)">A4A2H
push [</span><span style="color: rgba(128, 0, 128, 1)">4</span>] ;sp=<span style="color: rgba(0, 0, 0, 1)">00FEH ; 修改的内存单元的地址是2200:00FE内容为5554H
push [</span><span style="color: rgba(128, 0, 128, 1)">6</span>] ;sp=00FCH ; 修改的内存单元的地址是2200:00FC内容为5756H</pre>
</div>
<p style="margin-left: 30px">(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009220134795-1342501225.png"></p>
<p style="text-align: left; margin-left: 30px">由此可以看出:没有数据可以作为栈用</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009220313605-1271815773.png"></p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009220323392-156426296.png"></p>
<p style="text-align: left; margin-left: 30px">当把2000:0~2000:f作为栈的时候,系统会把寄存器的一些数据暂存在栈中,比如数据CS:IP先后得到暂存。</p>
<p style="text-align: center"><img src="https://img2020.cnblogs.com/blog/2175605/202010/2175605-20201009222300095-1245971567.png"></p>
<p style="text-align: left; margin-left: 30px">进一步执行代码后发现,栈还可以暂存AX寄存器的数据,对应标志寄存器。</p>
<p style="text-align: left; margin-left: 30px">其中,<span style="font-family: "Helvetica Neue", Helvetica, Verdana, Arial, sans-serif">前3行汇编指令的功能分别为:</span></p>
<p style="text-align: left; margin-left: 30px">第1行:为AX寄存器赋值2000;第2行:初始化栈基地址为ax中的值;第3行:初始化栈顶偏移地址为10。</p>
<p style="text-align: left; margin-left: 30px">需要特别注意的是:mov ss,ax和mov sp,0100先后一起执行。</p>
<p style="padding-top: 0; padding-right: 0; padding-bottom: 0; font-family: "Helvetica Neue", Helvetica, Verdana, Arial, sans-serif; margin-left: 30px">基于单步调试观察到的变化,<span style="font-family: "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif">且经查询可得,DOS下系统只有一个栈,当外部操作未设置栈的时候,系统已经有了一个栈在保存相关数据;当外部操作设置栈的时候,暂存的数据就被保存在新设置的栈中,也即push前,系统已经在暂存数据了,但由于是暂存的,故其内容会发生改变。</span></p>
<h2 style="text-align: left; margin-left: 30px">三、实验总结</h2>
<p style="margin-left: 30px">1、实验1总结:实验中印象最深刻的是Jmp立即数,其表示立即数转移到ip中,短短一条指令却可以实现指令的循环和跳跃执行。以及!才发现高级语言是多么的方便和简单!!!!QAQ</p>
<p style="margin-left: 30px">2、实验2总结:实验中发现,类似mov sp,10H这样的指令,可以对栈多很多的动作(有点神奇)。</p>
<p style="margin-left: 30px">同时,经查询得到,DOS下,栈只有一个,其可以暂存很多数据,如CS:IP,AX,标志寄存器,但是是否暂存更多的数据仍需要进一步的学习与探索!!!</p><br><br>
来源:https://www.cnblogs.com/amikeco/p/13789298.html
頁:
[1]