实验1:查看CPU和内存,用机器指令和汇编指令编程

预备知识:Debug的使用

1.Debug:

  Debug时DOS、Windows都提供的实模式(8086 方式)程序的调试工具。

debug是Windows 16位或者32位机器上的一款调试工具。

也就是说,在WindowsXP及以前的机器上都有debug,直接Win+X debug就可以调出;

在之后的32位机也有;但是在之后的64位机器上不存在,即使有,也无法运行。
相似的,微软的masm也无法在64位版本的系统上运行。
可以通过安装dosbox来虚拟一个DOS环境或者使用WindowsXP(虚拟机即可)的方式来使用debug和masm。                    
原文链接:https://blog.csdn.net/Apheal/article/details/80617302

使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

R命令:查看、改变CPU寄存器的内容

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

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

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

T命令:执行一条机器指令

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


 2.进入Debug

Debug是在DOS方式下使用的程序

步骤:win+R——cmd——debug

由于64位的 Windows 11 系统无法直接使用 16 位的 Debug 工具

因为它只支持 32 位和 64 位程序,这里选择开个虚拟机进行实验。(win2003_server) 

 注意CS和IP的值,CS=0AF0,IP=0100

也就是说,内存0AF0:0100处的指令为CPU当前要读取、执行的指令。

Debug还列出了CS:IP所指向的内存单元处存放的机器码,并将它翻译为汇编指令。

可以看到,CS:IP 所指向的内存单元为0AF0:0100,

此处存放的机器码为74E4

对应的汇编指令为JZ 00E6

3.r命令 

 还可以用Debug修改寄存器中的值:

如AX中的值,输入“r ax”将出现“:”作为输入提示。

此时寄存器AX中的值被改成了:1111

4.d命令

使用Debug的D命令,可以查看内存中的内容,D命令的格式较多。这里只用一部分。

eg:想知道内存10000H处的内容:"d 段地址:偏移地址“ 

使用D命令,Debug将输出3部分的内容:

1.中间是从指定地址开始128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元的内容。

2.左边是每行的起始地址

3.右边是每个内存单元的数据中对应的可显示的ASCII码字符,如果没有,就用”.“代替。

 其他:

接着使用d命令——列出后续内容

也可以指定D命令查看范围——d 段地址:起始偏移地址 结尾偏移地址

eg:要查看1000:0~1000:9中内容——d 1000:0 9

5.E命令

 可以使用E命令来改写内存中的内容,

格式:”e 起始地址 数据 数据 ……“的格式来进行。

6.U命令

  查看写入的或内存中原有的机器码所对应的汇编指令。

比如U命令将从1000:0开始的内存单元中的内容翻译为汇编指令,并显示。

 

 由此,我们再一次看到内存中的数据和代码没有任何区别,关键在于如何解释。

7.T命令

 执行一条或多条指令,简单地使用T命令,可以执行CS:IP指向的指令。

 8.A命令

  前面曾使用E命令写入机器指令,这样做很不方便。

A命令可以直接以汇编指令的形式写入指令。

如图以汇编语言向从1000:0开始的内存单元中写入了几条指令,然后用D命令查看A命令执行的结果。可以看到,Debug已经将这些汇编指令翻译为对应的机器指令你个,将它们的机器码写入内存。

 小结:本次实验中用到的命令

查看、修改CPU中寄存器的内容:R命令

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

修改内存中的那日容:E命令

将内存中的内容解释为机器指令和对应的汇编命令:U命令

执行CS:IP指向的内存单元处的指令:T命令

以汇编指令的形式向内存中写入指令:A命令

 实验任务:

1.使用Debug,将一段程序写入内存

 可以看到指令成功被写入,现在修改CS:IP指向,用T指令逐条执行。

 可以看到寄存器中内容按照我们的编程改变。

2.利用指令计算2的八次方

答案是:0x0020 

3.查看内存中的内容,尝试修改主板ROM中的生产日期

找不见了。

4.向B8100开始的单元中填写数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值