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

 更新时间:2023年08月02日 13:19:54   作者:奶酪博士  
本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令的基本使用方法

前言

在学习完王爽老师《汇编语言》(第四版)第六章之后,我决定整理一下masm5.0与debug命令的使用方法,方便之后回顾。(我使用的环境是DosBox。)

一、汇编程序的代码框架

以下是汇编程序基本规范。其中也包含了一些小知识点。注释符号我借用了java语言中的“//”。

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是标识符,标识程序入口

二、使用masm生成exe文件

1.编译

将写好代码的源程序保存为 文件名.asm文件,然后在DosBox中编译。

编译最简单的方法就是在DosBox中输入  masm 文件名 ; 回车。如下。

masm 1;

如果不加分号,那么连续回车就可以,中间步骤生成的中间文件,现在不必去管它。

这一步是在当前文件夹下生成.obj文件。

没有指明路径是因为源程序1.asm与masm5.0放在同一文件夹下。如果源程序放在别处,就要指明路径。

2.连接

最简单的方法就是在DosBox中输入 link 文件名 ; 回车。如下。

link 1;

如果不加分号,就要多回车几次。中间生成的中间文件,现在不必去管它。

这一步是在当前文件夹下生成.exe文件。

同理,没有指明路径是因为1.obj与link.exe放在同一文件夹下,否则要指明路径。

三、使用debug调试程序

在DosBox中可以直接运行exe程序,如下。

1.exe

但更多时候需要使用debug进行分步调试。调试方法是,在DosBox中输入 debug 文件名.exe 回车。如下。

debug 1.exe

四、debug命令小结

1.R命令  查看、修改寄存器内容

(1)查看CPU寄存器的内容

R  回车

(2)改变CPU寄存器的内容

例如将段寄存器DS的值改为2000H:   

R DS 回车,  2000 回车(输入目标值)

2.D命令  用于查看内存内容(从数据角度)

(1)D回车,查看默认地址的内容

(2)D 段地址:偏移地址 回车,查看指定地址的内容,如 D 2000:0   。

(3)段地址可以使用段寄存器名,如  D ds:0002  。

(4)可以指定查看范围,D 段地址:起始偏移地址 结尾偏移地址 ,如 D 1000:0 f   。

3.E命令  用于改写内存内容(从数据角度)

(1)E 段地址:起始偏移地址 数据 数据 数据 ...    ,用空格分隔数据,用回车来退出修改。

(2)用提问的方式一个字节一个字节地改写。E 段地址:偏移地址 回车,(屏幕显示原有数据)然后输入新数据,回车。

(3)用第一种方式还可以写入字符或字符串。注意定界符,字符如'a',字符串如"Hello"。

4.U命令  用于查看内存内容(从指令角度)

即查看内存内容对应的汇编指令。

与D命令相同的使用方式,只不过查看角度不同而已。

如 U ds:0 回车,查看 ds:0000处开始的汇编指令。

5.A命令  用于改写内存内容(从指令角度)

即方便地输入汇编指令存储在内存中。

注意,指令必须一行一行地输入。输入一条指令之后要回车。最后以回车结束输入。

(1)a 回车,从默认地址开始输入指令。

(2)a 段地址:偏移地址 回车,从指定地址开始输入指令。

6.T命令  执行指令

用于执行cs:ip当前指向的那条指令。(IP寄存器将自动改写。)

7.P命令

(1)遇到程序返回语句 int 21H 时,要用P命令而不是T命令执行。

(2)遇到loop循环语句时,使用P命令可以自动执行完整个loop(也就是执行到cx=0),而不用一步步执行。

8.G命令  跳转到某条指令

用于跳到某一条指令处,例如 G 0012 回车,即表示设置IP=0012H。

9.其它

alt+Enter可以全屏/恢复 窗口大小。

总结

本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令的基本使用方法。

相关文章

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

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

    本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令的基本使用方法
    2023-08-08
  • iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法

    iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法

    在Xcode中嵌入汇编代码主要依赖了C语言支持通过 __asm__ 引入汇编代码的功能。这篇文章主要介绍了iOS汇编入门教程之在Xcode工程中嵌入汇编代码的方法,需要的朋友可以参考下
    2020-02-02
  • 汇编程序 查表求平方的实现

    汇编程序 查表求平方的实现

    这篇文章主要介绍了汇编程序 查表求平方的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 在vs2017中编写汇编的实现(图文)

    在vs2017中编写汇编的实现(图文)

    这篇文章主要介绍了在vs2017中编写汇编的实现(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C 表达式中的汇编指令

    C 表达式中的汇编指令

    这篇文章主要介绍了C 表达式中的汇编指令,需要的朋友可以参考下
    2020-01-01
  • iOS汇编入门教程之ARM64汇编基础教程

    iOS汇编入门教程之ARM64汇编基础教程

    这篇文章主要介绍了iOS汇编入门教程之ARM64汇编基础教程,本文通过例子给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 汇编高效乘法运算的具体使用方法

    汇编高效乘法运算的具体使用方法

    在汇编语言中,乘法指令通常是通过mul(无符号乘法)和imul(有符号乘法)这两个指令实现的,本文就来详细的介绍一下汇编高效乘法运算,感兴趣的可以了解一下
    2024-03-03
  • ARM体系下的GCC内联汇编教程详解

    ARM体系下的GCC内联汇编教程详解

    在操作系统级的编程中,有时候,C语言并不能完全的使用硬件的功能,这时候就需要嵌入一些汇编代码来实现功能。这篇文章主要介绍了ARM体系下的GCC内联汇编,需要的朋友可以参考下
    2020-02-02
  • 汇编语言学习手把手的Debug教程

    汇编语言学习手把手的Debug教程

    这篇文章主要为大家分介绍了汇编语言学习的Debug教程内容,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)

    汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)

    汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。这篇文章主要介绍了汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作,需要的朋友可以参考下
    2020-01-01

最新评论