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

文章目录

前言

一、汇编程序的代码框架

二、使用masm生成exe文件

1.编译

2.连接

三、使用debug调试程序

四、debug命令小结

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

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

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

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

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

6.T命令  执行指令

7.P命令

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

9.其它

总结


前言

在学习完王爽老师《汇编语言》(第四版)第六章之后,我决定整理一下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命令的基本使用方法。

想学习汇编的话,这个压缩包把初学者需要的软件,文档都包含了,希望大家一起来开心的学习,没必要为了找个软件而消耗时间.内容有: # 压缩文件 C:\Users\ypf\Desktop\汇编语言程序设计.rar f6ab9f75 masm5\CREF.EXE 4ed83818 masm5\ERROUT.EXE c9c564bd masm5\EXEMOD.EXE 59a60bb0 masm5\EXEPACK.EXE 6fd4b83f masm5\LIB.EXE 2c603b49 masm5\MAKE.EXE 7f7db26d masm5\README.DOC 21b533f2 masm5\SETENV.EXE 2943acfb masm5\软件说明.txt 27500a0a WORD\实验报告格式及作业-电子版.doc ed894451 WORD\第一章_DEBUG使用.doc f2b230aa WORD\第二章8086指令系统1.doc 1905a8f2 WORD\第二章8086指令系统2.doc a75af1c5 WORD\第二章8086指令系统3.doc dfb8184e WORD\第二章8086指令系统4.doc a62e7a8a WORD\组成汇编实验指导书.doc f20dc1ba 帮助文档\80386.chm 5a93417b 帮助文档\汇编基础知识及问题.chm a136f973 帮助文档\汇编程序设计教程.chm bd866487 asmw.rar e926b6c1 masm5.rar 7b649fae Masm615.rar aa41703c debug\debug.exe 55ddcc5b debug\DEBUG32.EXE ed6be8ab debug\DEBUG32.TXT 02295cf1 EditPlus\!)注册.reg 1b0fe728 EditPlus\936.chm bb1eda3f EditPlus\936.dll 7f9e0a9d EditPlus\ANSI.CTL 36057446 EditPlus\clear_registry.vbe 1e708e27 EditPlus\codepage.txt d12be912 EditPlus\CONTROL.CTL 8decc548 EditPlus\CPP.ACP 5ed08cfe EditPlus\CPP.STX 7a3dc4ee EditPlus\cs.stx f134caf4 EditPlus\CSS.CTL 07073578 EditPlus\css.stx b4c90a8f EditPlus\CSS2.CTL 43ba1da6 EditPlus\editplus.chm 84b69c25 EditPlus\editplus.exe d64a4ba0 EditPlus\eppie.exe 5ae4ba37 EditPlus\eppshell.dll f218f057 EditPlus\eppshell64.dll a3486bc1 EditPlus\eppshellreg.exe 9f3ec63a EditPlus\HTML.CTL a744cc7f EditPlus\HTML.STX b54f7357 EditPlus\HTML4.CTL 95784060 EditPlus\HTMLBAR.ACP 78764c0e EditPlus\initialization.vbe 04ecc251 EditPlus\JAVA.ACP fa7f9491 EditPlus\JAVA.STX a2648f14 EditPlus\JS.STX b6d4cce5 EditPlus\jsp.stx 23869735 EditPlus\launcher.exe 2be229f0 EditPlus\license-cn.txt ff1efb38 EditPlus\LICENSE.TXT 14dac005 EditPlus\otherfile\ssce-uk.exe acb21493 EditPlus\otherfile\ssce-us.exe b69910de EditPlus\patch.txt a4c34e6f EditPlus\PERL.ACP 91aab0d2 EditPlus\PERL.STX b8b499f4 EditPlus\PHP.STX 6633c73e EditPlus\README.TXT b184add0 EditPlus\readme_cn.txt 39332130 EditPlus\remove.exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值