美文网首页
这款神器帮你钻到CPU和内存的肚子里!

这款神器帮你钻到CPU和内存的肚子里!

作者: 量子孤岛 | 来源:发表于2020-12-03 22:07 被阅读0次

    大家晚上好。今天是汇编学习的第三弹!前面两节简单地阐述了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;

    • 后台回复 汇编 即可获取软件安装包及相应工具。

    相关文章

      网友评论

          本文标题:这款神器帮你钻到CPU和内存的肚子里!

          本文链接:https://www.haomeiwen.com/subject/hibvwktx.html