一款练习汇编的神器——DosBox

往期回顾
CPU的“三条”总线
物理地址是怎么确定的?以8086为例

前面两节简单地阐述了CPU和内存如何通信以及物理地址的确定方法。今天开始实战演练下如何操纵寄存器和内存,因为岛主是基于8086来学习的汇编,先不谈Linux,这里我们借助一款神器来通透的观察寄存器和内存——DosBox。

DosBox

体验一个裸机的环境,在一个没有操作系统的环境中直接对硬件编程是很酷的一件事情。学习汇编需要使用debug来帮助我们更好地了解计算机系统。王爽老师的《汇编语言》上级环境使用的是dos系统,我们现在一般不会装dos系统,为了模拟dos环境的debug,可以使用DosBox这一软件再配合相应的编译器masm、链接器link和调试器debug来展开汇编的学习。关于软件的下载和相应工具岛主已经打包上传,后台回复汇编,即可获取。

闲言少叙,书归正传。

今天主要介绍debug的常用命令。

dosbox安装后的界面如图所示。

图片

在电脑上任意一个位置新建个目录作为工作区。岛主在e盘建立了dos文件夹。每次进入软件都需要对工作区的路径进行挂载:

 mount c  e:\dos

为了免我们一打开就要输入这个挂载的命令,我们找到DOSBox安装根目录下的DOSBox 0.74-3 Options.bat这个配置文件,可以看到它是一个windows批处理文件,双击它在文件的末尾我们可以找到[autoexec]开头的信息,添加上我们需要让程序一开始就执行的命令,最后保存就行了,下一次打开DOSBox程序后,程序就自动运行我们在配置文件中写好的命令了。

 [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here.  mount C E:\dos C:

8086CPU共有14个寄存器:

  • 通用寄存器:ax,bx,cx,dx
  • 变址寄存器:ci,di
  • 指针寄存器:sp,bp
  • 指令指针寄存器:ip
  • 段寄存器:cs,ds,ss,es
  • 标志寄存器:psw

注意,寄存器不区分大小写

在掌握上了上述14个寄存器的含义后我们用debug工具简单做下演示。

debug最常用的六个指令,写成两个单词比较好记忆:red uat(红色的uat测试)。

首先输入:debug,进入调试模式。

r:查看或改变CPU寄存器的内容

直接输入r可以查看所有寄存器的值以及下一条执行的指令

输入r + 寄存器即可改变寄存器的值。如下图所示。

图片

d:命令查看内存中的内容

直接输入d可以查看debug预设的内存值。输入CS:IP加上偏移量可以查看任意你想观察的内存值。

图片

e命令:改写内存中的内容

e和d相结合即可查看改写后的内容。

图片

u:将内存中的机器指令翻译成汇编指令

汇编指令:

 mov ax, 0123 mov bx,3 mov ax,bx add ax,bx

对应机器码:

 B8 23 01 BB 03 00 89 D8 01 D8

我们通过e命令将上述机器码写入内存,然后执行u即可看到机器指令被翻译成了汇编指令,且一一对应。

图片

a:以汇编指令的格式在内存中写入一条机器指令

相比u命令,我们更常用a命令,毕竟我们是编写汇编,不是写机器码。我们将上述的汇编指令写入3000:0,然后执行u查看,没有问题,依然一一对应。

图片

t:执行一条机器指令

该命令就相当于vs中的单步运行语句。我们用r命令将cs和ip修改为上述操作的3000:0地址段,单步执行t观察寄存器的变化。

图片

总结

  • 本文介绍了dos环境下debug调试汇编程序的方法,常用的命令为reduat;
  • 后台回复 汇编 即可获取软件安装包及相应工具。

在这里插入图片描述

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子孤岛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值