汇编语言 masm5与debug命令使用方法 小结
在学习完王爽老师《汇编语言》(第四版)第六章之后,我决定整理一下masm5.0与debug命令的使用方法,方便之后回顾。(我使用的环境是DosBox。)本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令(R命令、D命令、E命令、U命令、A命令、P命令、G命令、T命令)的基本使用方法。
前言
在学习完王爽老师《汇编语言》(第四版)第六章之后,我决定整理一下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命令的基本使用方法。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)