zoukankan      html  css  js  c++  java
  • 实验1 查看CPU和内存,用机器指令和汇编指令编程

    四、实验结论

    任务一:使用debug,将下面程序段写入内存,逐条执行,观察每条程序执行后CPU中相关寄存器的内容的变化

    方法一:

    (1)使用e命令在1000:0的起始位置将程序的机器码读取到内存单元中,利用d命令查看内存中的信息,并且利用u命令进行反汇编,将读取的机器码转化为汇编指令;

    (2)先改写cs:ip的指向,使cs:ip的值指向写入程序段的位置,然后用t命令分步调试,执行汇编指令

     

    可以看到,当每次执行完一条汇编指令之后,不只是相应的寄存器的值由于汇编指令发生变化,cs:ip的值也会发生变化,这是为了保证汇编指令能够持续进行,每执行一次汇编指令,cs:ip的值就会加上这条汇编指令的长度。

     方法二:

    (1)利用a命令写入汇编指令

    (2)用t命令对相应汇编指令分步调试,观察相应寄存器的变化

    结果与方法一的(2)相同

    任务二:

    将下面指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方。

    (1)利用a命令从2000:0开始的内存单元写入相应汇编指令

    (2)更改cs:ip的指向,使其指向2000:0,用t命令分条执行汇编指令

    可以看到,由于汇编指令“jmp 2000:0003”的存在,汇编指令的执行构成了一个循环。因此,我们可以用这段指令来计算2的8次方的具体值。

    (3)多次用t命令执行循环后,得到结果

    ax=100H

    任务三:查看内存中的内容

    (1)用r指令查看内存FFF00-FFFFF之间的内存信息

    我们可以清楚的看到,该内存段中,右侧只有“01/01/92”这一个日期,所以,不难猜测,该日期就是我们要找的主板生产日期

    (2)尝试改写生产日期

    可以看到,该日期对应的ASCII码值为:30 31 2F 30 31 2F 39 32 

    我们将日期改写为“02/02/92”,对应的ASCII码为:30 32 2F 30 32 2F 39 32

    用e命令对其进行改写

     

    改写完之后,再次用d命令显示内存信息

    可以看到,内存信息并没有发生改变,这是为什么呢?

    因为该生产日期写在了主办的ROM(只读存储器)上,因此我们无法对其进行改动。

    任务四:

    向内存从B8100H开始的单元处填写数据

    (1)用e命令向该内存单元处写入数据

     上面的两张图我们可以看出,当输入一个数据时,会在屏幕右上角生成一个符合,输入两个相同的数据时,对应符号的颜色会发生改变。

    (2)出现这种情况的原因

    这是因为在8086CPU之中,内存地址空间分配情况导致的,8086CPU中,A0000-BFFFF是显存地址空间,我们向显存地址空间输入数据,就是向显存中写入数据,这些数据当然会被显示卡输出到显示器上,就出现了我们看到的结果。

    五、总结与体会

    汇编知识方面:

    通过这次实验,加深了我对汇编语言中各个指令使用的熟练程度,具体的实验操作也使得我对于8086CPU的实际工作状态有了认识。例如:cs:ip的地址代表着指令的执行指向,要执行相应指令之前先改变场cs:ip的指向;8086CPU机内存地址空间分配的情况;如何利用汇编指令进行数据的处理,计算;等等。通过此次实验,我发现培养对于一门学科的兴趣的最好方法就是让自己参与进去,亲自动手操作,这样才能发现自己对于知识的掌握情况,才能发现自己的不足

    纸上得来终觉浅,绝知此事要躬行

    博客园操作方面:

    随笔的写作过程中一定要按时保存,不要寄希望于系统的自动保存,做完一个部分及时保存到草稿箱才是最重要的,否则就会和我一样,做到最后不小心按到退档键,只能重新写一遍了/(ㄒoㄒ)/~~。

  • 相关阅读:
    数据库
    linux
    linux
    python_函数进阶1
    python_函数初识
    python_文件操作
    python_基础数据类型补充
    python 小数据池,代码块总览
    python_基础数据类型二
    python_基础数据类型一
  • 原文地址:https://www.cnblogs.com/xihongqing/p/9824141.html
Copyright © 2011-2022 走看看