志杨 發表於 2023-8-2 13:19:54

汇编语言 masm5与debug命令使用方法小结

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>前言</li><li>一、汇编程序的代码框架</li><li>二、使用masm生成exe文件</li><li>三、使用debug调试程序</li><li>四、debug命令小结</li><li>总结</li></ul></div><p class="maodian"></p><h2>前言</h2>
<p>在学习完王爽老师《汇编语言》(第四版)第六章之后,我决定整理一下masm5.0与debug命令的使用方法,方便之后回顾。(我使用的环境是DosBox。)</p>
<p class="maodian"></p><h2>一、汇编程序的代码框架</h2>
<p>以下是汇编程序基本规范。其中也包含了一些小知识点。注释符号我借用了java语言中的&ldquo;//&rdquo;。</p>
<div class="jb51code"><pre class="brush:asm;">assume cs:code     //开头使用关键字assume,并且要将段寄存器与段名关联
  a segment       //数据、代码、栈 要分段存放,段用“段名 segment”开头,用“段名 ends”结尾
  db 1,2,3,4,5,6,7,8    //db 为8字节型数据申请空间(byte),或理解为定义了8个字节型数据
  a ends            //不足16字节的,系统会分配16字节的空间来存放
  b segment
  dw 0123H,0456H,0789H,0abcH    //汇编中数据不能以字母开头,如“a234H”就要写成“0a234H”
  b ends
  c segment    //栈段 要开辟一定的空间作为栈使用
  dw 0,0,0,0,0,0,0,0    //dw 开辟4个字型数据的空间(word),或理解为定义了4个字型数据
  c ends
  code segment     //代码段,code是标识符,不是关键字
  start:           //start是标识符,上下呼应,标识程序入口,即cs:ip指向处
      mov ax,11H     //H标识十六进制,也可以用十进制
      mov cx,8    //通常在循环之前,用cx保存循环次数
      s:              //s是标号,标识一段循环体,上下呼应
          add ax,10H
      loop s             //CPU执行cx-1后若≠0,则跳到标号s所在处执行,否则继续向下执行
      mov ax,4c00H    //这两行作用是 程序返回 ,这是汇编程序的规范
      int 21H
  code ends    //代码段结束
end start      //end是程序结束。  start是标识符,标识程序入口</pre></div>
<p class="maodian"></p><h2>二、使用masm生成exe文件</h2>
<p>1.编译</p>
<p>将写好代码的源程序保存为 文件名.asm文件,然后在DosBox中编译。</p>
<p>编译最简单的方法就是在DosBox中输入&nbsp; masm 文件名 ; 回车。如下。</p>
<div class="jb51code"><pre class="brush:asm;">masm 1;</pre></div>
<p>如果不加分号,那么连续回车就可以,中间步骤生成的中间文件,现在不必去管它。</p>
<p>这一步是在当前文件夹下生成.obj文件。</p>
<p>没有指明路径是因为源程序1.asm与masm5.0放在同一文件夹下。如果源程序放在别处,就要指明路径。</p>
<p>2.连接</p>
<p>最简单的方法就是在DosBox中输入 link 文件名 ; 回车。如下。</p>
<div class="jb51code"><pre class="brush:asm;">link 1;</pre></div>
<p>如果不加分号,就要多回车几次。中间生成的中间文件,现在不必去管它。</p>
<p>这一步是在当前文件夹下生成.exe文件。</p>
<p>同理,没有指明路径是因为1.obj与link.exe放在同一文件夹下,否则要指明路径。</p>
<p class="maodian"></p><h2>三、使用debug调试程序</h2>
<p>在DosBox中可以直接运行exe程序,如下。</p>
<div class="jb51code"><pre class="brush:asm;">1.exe</pre></div>
<p>但更多时候需要使用debug进行分步调试。调试方法是,在DosBox中输入 debug 文件名.exe 回车。如下。</p>
<div class="jb51code"><pre class="brush:asm;">debug 1.exe</pre></div>
<p class="maodian"></p><h2>四、debug命令小结</h2>
<p>1.R命令&nbsp; 查看、修改寄存器内容</p>
<p>(1)查看CPU寄存器的内容</p>
<p>R&nbsp; 回车</p>
<p>(2)改变CPU寄存器的内容</p>
<p>例如将段寄存器DS的值改为2000H:&nbsp;&nbsp;&nbsp;</p>
<p>R DS 回车,&nbsp; 2000 回车(输入目标值)</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119022239.png" /></p>
<p>2.D命令&nbsp; 用于查看内存内容(从数据角度)</p>
<p>(1)D回车,查看默认地址的内容</p>
<p>(2)D 段地址:偏移地址 回车,查看指定地址的内容,如 D 2000:0&nbsp; &nbsp;。</p>
<p>(3)段地址可以使用段寄存器名,如&nbsp; D ds:0002&nbsp; 。</p>
<p>(4)可以指定查看范围,D 段地址:起始偏移地址 结尾偏移地址 ,如 D 1000:0 f&nbsp; &nbsp;。</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119022240.png" /></p>
<p>3.E命令&nbsp; 用于改写内存内容(从数据角度)</p>
<p>(1)E 段地址:起始偏移地址 数据 数据 数据 ...&nbsp; &nbsp; ,用空格分隔数据,用回车来退出修改。</p>
<p>(2)用提问的方式一个字节一个字节地改写。E 段地址:偏移地址 回车,(屏幕显示原有数据)然后输入新数据,回车。</p>
<p>(3)用第一种方式还可以写入字符或字符串。注意定界符,字符如&#39;a&#39;,字符串如&quot;Hello&quot;。</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119022241.png" /></p>
<p>4.U命令&nbsp; 用于查看内存内容(从指令角度)</p>
<p>即查看内存内容对应的汇编指令。</p>
<p>与D命令相同的使用方式,只不过查看角度不同而已。</p>
<p>如 U ds:0 回车,查看 ds:0000处开始的汇编指令。</p>
<p><img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119022242.png" /></p>
<p>5.A命令&nbsp; 用于改写内存内容(从指令角度)</p>
<p>即方便地输入汇编指令存储在内存中。</p>
<p>注意,指令必须一行一行地输入。输入一条指令之后要回车。最后以回车结束输入。</p>
<p>(1)a 回车,从默认地址开始输入指令。</p>
<p>(2)a 段地址:偏移地址 回车,从指定地址开始输入指令。</p>
<p>6.T命令&nbsp; 执行指令</p>
<p>用于执行cs:ip当前指向的那条指令。(IP寄存器将自动改写。)</p>
<p>7.P命令</p>
<p>(1)遇到程序返回语句 int 21H 时,要用P命令而不是T命令执行。</p>
<p>(2)遇到loop循环语句时,使用P命令可以自动执行完整个loop(也就是执行到cx=0),而不用一步步执行。</p>
<p>8.G命令&nbsp; 跳转到某条指令</p>
<p>用于跳到某一条指令处,例如 G 0012 回车,即表示设置IP=0012H。</p>
<p>9.其它</p>
<p>alt+Enter可以全屏/恢复 窗口大小。</p>
<p class="maodian"></p><h2>总结</h2>
<p>本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令的基本使用方法。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>8086汇编开发环境搭建和Debug模式介绍(图文详解)</li><li>汇编语言Debug命令详解教程</li><li>汇编语言DOSBox及debug.exe在Windows64下环境搭建</li><li>汇编语言学习手把手的Debug教程</li><li>汇编:Debug的常用命令</li><li>汇编语言中debug命令使用小结</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 汇编语言 masm5与debug命令使用方法小结