一、实验的预设置
1、设置DOSBox窗口大小
找到安装目录下的 DOSBox 0.74-3 Options.bat 文件,右键打开,(不要点击编辑),找到
fullscreen=false
fulldouble=false
fullresolution=original
windowresolution=1780x900
output=opengl
将windowresolution调整为自己觉得合适的大小,我这里调成1780x900,大小较为合适,随后保存重启DOSBox窗口即可。
2、将映射初始化
为避免每次启动都需要重复执行映射的麻烦,我们将其直接初始化
根据窗口中的路径,我们找到 dosbox-0.74-3.conf 文件,右键用记事本打开,在文件底部加入
mount c d:\Wangshuang_masmsetup
c:
(注:c后面为所下载资源文件目录,请勿直接照抄)
保存后重启DOSBox,此时加载界面如下,为我们省去了每次打开DOSBox都要进行映射的麻烦。
二、常用的Debug指令
1、R命令:查看、修改寄存器中的内容
查看:
修改:
2、D命令:查看内存中的内容
-
默认范围查看: D 段地址:偏移地址 //查看从给出地址开始的128个内存单元里的内容
-
指定位置范围查看: D 段地址:起始偏移地址 结尾偏移地址 //查看所给出起始地址到结束地址的内存单元里的内容
-
单独查看: D 段地址:所需查看地址 所需查看地址 //指定位置范围查看的特殊应用
3、E命令:修改内存中的内容
-
批量修改: E 起始位置 数据 数据 数据 数据 数据 数据………
-
逐个修改 E 起始地址+回车 进入提问方式修改内存单元内容
输入数据后+空格 修改下一单元数据(不需要修改的单元直接空格跳过)
所有数据输入完后,回车键结束操作
4、U命令:将内存中的内容解释为机器指令和对应的汇编指令
将内存中的内容解释为机器指令和对应的汇编指令: U 段地址:起始地址
5、T命令:执行CS:IP指向的内存单元处的指令
指令执行: T
根据已有知识,我们已经可以尝试在内存中写入并执行一个汇编程序
例如,完成一个计算2的四次方的汇编程序
机器码 对应的汇编指令
B8 02 00 mov ax,2
01 C0 add ax,ax
01 C0 add ax,ax
01 C0 add ax,ax
-E 1000:0 B8 02 00 01 C0 01 C0 01 C0 //将汇编指令对应机器码写入内存
-D 1000:0 9 //查看内存写入情况
-U 1000:0 //用u命令将内存单元中的内容翻译成汇编指令显示
-RCS //修改CS寄存器中内容,使CS:IP指向程序写入单元
-IP //修改IP寄存器中内容,使CS:IP指向程序写入单元
-T //执行指令
执行结果如下:(注意观察ax值的变化)
6、A命令:以汇编指令的形式向内存中写入指令
在内存单元中以机器码的形式写入汇编程序过于繁琐,因此在汇编语言中有专门用于写入汇编指令的A命令
- -A 段地址:偏移地址 //从指定单元开始写入
- -A //从预定地址开始写入
三、实验
- 使用A命令写入汇编指令
- 使用U命令查看汇编指令是否写入以及写入指令是否有误
- 使用R命令将CS:IP修改为写入汇编指令起始位置
- 使用T命令执行汇编指令
- 使用A命令写入汇编指令,使用R命令修改CS:IP,随后使用T命令执行汇编指令
由P12可知,地址A000H~FFFFH为各个ROM的地址空间,其无法修改。
DlR-1723059308066)]
由P12可知,地址8000H~9FFFH为显存地址空间,修改后效果如上图。