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


    在装完DosBox环境之后,就可以用debug模式进行汇编指令的编程了。

    • 实验内容:

        

    首先用a指令进行数据的储存,然后用t命令进行调试。

    可以发现ax,bx在不同的命令下发生了改变,cs的地址和指令是相同的,ip的值也是根据输入指令的长度而不断的增加。

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

        mov ax,1

        add ax,ax

        jmp 2000:0003

    先观察一下实验要求,执行完第一步后ax= 1,第二步后ax  = 2,执行add 1次 2*2,执行2次,就是2*2*2就是2的3次方,那么2的8次方 就 add 执行 7次。

    执行之前先将指令指向add语句 这样就会重复执行 add语句,用jmp 指令更改CS、IP寄存器的值,从而控制CPU执行目标指令。之后,就可执行我们写的汇编指令了,我们要先使用r指令改变 cs 和ip的指向,cs为代码段寄存器,ip为指针寄存器。在任意时刻,CPU将cs:ip指向的内容当做指令执行。

    关于执行命令t的执行次数:执行第一二步执行需 2个t,那么执行第三步的t的时候实际上只是改变cs:ip的指向,并没执行cs:ip指向内容的机器指令,后面的7个jmp 每个需要执行2个t才能执行add方法。所以共需要执行t 16次才能计算出2的8次方。

    第一次t命令:

    最后一次t命令:(最后短线位置的t手抖了)

    (3)查看内存中的内容。

    PC机主板上的ROM中有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。 

     

    尝试修改:

    发现无法修改。

    (4)向内存从B8100H开始的单元中填写数据,如:

    -e B8100:0000 01 01 02 02 03 03 04 04

    请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。

    可以看到,向B8100H单元中输入这些数据后,可以观察到界面上出现了一些彩色的图案,黄方框标识。

     接着在相同的地址内填写不同的数据,可以看到出现了完全不同的图案。

     

    下面改变输入数据的地址,可以看到显示的内容不变,位置改变了。

     

    说实话,我也不知道这是怎么回事。我就去查了查,度娘告诉我:这一段内存为显存,是RAM,可以改变其值在屏幕上的显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII码,后一个(高)为要显示的颜色。

    实验总结:

    (1)首先得理解并且熟练操作的一些指令。

    在debug模式下常用的命令:

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

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

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

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

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

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

    (2)通过这次实验,对debug的一些基本操作有了基本了解,如何写入机器代码和汇编代码,查看所需要的内容,并且知道了某些内存中存储的内容,以及它们中的内容是否可变等知识。

    如果有什么错误的话,还希望各位大佬指出。谢谢!

  • 相关阅读:
    字符串与Unicode码的相互转换
    关于es6中的yield
    ajax请求中的6个全局事件
    用H5上传文件
    类型化数组
    git笔记-9-29
    js正则表达式验证身份证号和密码
    assertThat用法
    java产生随机数的几种方式
    jQuery之Deferred对象详解
  • 原文地址:https://www.cnblogs.com/skyen/p/9734896.html
Copyright © 2011-2022 走看看