dosbox相关操作
安装准备
在这里下载完了之后,在C盘根目录下(比较方便,爱建哪建哪)创建名为dosbox的文件夹,里面放好debug、edit、link、masm等工具。打开dosbox会见到如下图所示的界面:
之后需要挂载工作目录,输入mount C C:\dosbox
(刚才的目录)
之后再输入C:
即可
再输入debug
就可以进入debug模式。
debug相关操作
总览
- R命令:查看、改变CPU寄存器的内容
- D命令:查看内存中的内容
- E命令:改写内存中的内容
- U命令:将内存中的机器指令翻译成汇编指令
- T命令:执行一条机器指令
- A命令:以汇编指令的格式在内存中写入一条机器指令
R命令
-r : 直接查看寄存器中的内容
-r [寄存器名] : 修改寄存器中的值
输完之后会弹出该寄存器当前存储的值,下面会有一个冒号,在里面输入数据即可改变寄存器的值,比如输入0001再用-r
查看:
D命令
注意,D命令中的段地址都可以省略,只给出偏移地址的[偏移地址]
,此时段地址默认从ds段寄存器中取得。
-d : 查看内存中的内容
随后再使用-d
命令看的就是下一段内存里的内容。其他D指令也同理
-d 段地址:偏移地址 : 查看指定地址后的内容
-d 段地址:偏移地址1 偏移地址2 : 查看指定地址段的内容
E命令
-e 段地址:偏移地址 : 修改内存中的内容
直接连续修改
直接将要添加进去的数据写在段地址:偏移地址
后面,如图
以提问的方式逐个修改
输完-e 段地址:偏移地址
之后换行,之后会逐个跳出来该内存原本存放的内容,在.
后面填写想要变更成的内容。按空格
键继续填写下一个,按enter
键结束修改
写入字符
如果想写进去的是字符,只需要加一个‘’
即可,如下图
我们可以看到加了引号的几个元素被存进去的是它们的ascII码而不是原本的数值了。
U指令
-u 段地址:偏移地址 : 将机器码翻译成汇编代码
先用-e
写入一段机器码。下面是它的涵义:
机器码 | 对应的汇编指令 |
---|---|
b80100 | mov ax,0001 |
b90200 | mov cx,0002 |
01c8 | add ax,cx |
接下来用-u
查看这段机器码的汇编指令
T指令
-t : 执行CS:IP指向的指令
还是上面那段汇编码,首先我们得把CS:IP指向写入代码的1000:0(利用之前的-r
指令)
接下来就可以用-t
指令来执行这段汇编代码,而且每次都会显示执行完各个寄存器的结果。
A指令
-a 段地址:偏移地址 : 向指定地址写入汇编代码
输完一行按enter
键,全部输完按两次enter
键即可
如图所示用-a
指令写完汇编代码之后再用-u
查看
先改变CS:IP再执行这段汇编代码的结果:
G命令
-g [偏移地址]
直接显示到该偏移地址的指令的运行结果。(图片来自《汇编语言》第三版-王爽)
可以用于跳过loop循环的重复计算过程。
P命令
-p
跳过循环执行过程
程序相关操作
编辑
输入edit
进入源程序的编辑
(在输文件名的时候记得加上后缀.asm)
有不明白的地方可以按F1
查看提示。
编辑好源程序之后按F3+E
保存并退出。保存的地方是和edit相同的路径
编译
输入masm
对汇编源程序进行编译。把待编译的文件放在和masm同一个目录下(否则之后的操作都要加上路径名,连接时同理)。这次输入文件名不需要再输入扩展名。跳出来的几项中只需用输入第一项,后几项全部回车跳过即可
快速编译:直接输入masm [文件名];
(注意结尾的分号)即可
要注意的是,masm对于偏移地址的解释是与debug不同的,单独出现时,masm将[ ]
里的数据直接理解成常量而不是一个内存单元(如果是寄存器则没有关系)。这时候需要在前面显式地给出段地址所在的段寄存器,ds:[数据]
。
连接
输入link
对汇编源程序进行编译。同样,输入文件名不需要再输入扩展名。跳出来的几项中只需用输入第一项,后几项全部回车跳过即可。
快速连接:直接输入link [文件名];
(注意结尾的分号)即可
运行
输入文件名(带不带后缀均可)即可。下图为有显示效果的程序的执行效果。
对该程序进行debug
输入debug [文件名(带后缀)]
即可,其余操作和debug模块无差。
执行int 21h需要用-p
退出