zoukankan      html  css  js  c++  java
  • 汇编语言 实验1

    实验1

    一、熟悉debug功能

    -r 查看/修改寄存器内容

    用法1:

    -r

    查看当前各寄存器中内容

    用法2:

    -r 段地址:偏移地址

    修改【段地址:偏移地址】表示的内存中的内容

    示例:

     

    -d :查看内存中的内容(右侧显示以内存中的内容作为ASCLL码的符号,如果没有对应符号则显示“.“)

    用法1:
    -d

    查看从当前CS:IP地址开始的默认128字节内容
    用法2:

    -d 段地址:偏移地址
    查看从【段地址:偏移地址】表示的内存开始的默认128字节内容

    用法3:
    -d 段地址:偏移地址1 偏移地址2(或l+数字)
    查看从【段地址:偏移地址1】表示的内存开始到偏移地址2的内容(或者显示指定长度的内容)

    示例:

     

    -e :改写内存中内容(后面一定要加地址,否则报错)

    用法1:

    -e 【段地址:偏移地址】 要改写的内容(用空格间隔)

    从【段地址:偏移地址】开始改写内存中的内容,最多能一次性输入32个左右

    用法2:

    -e  ‘字符’ ‘字符’ ……(或者“字符“)

    从【段地址:偏移地址】开始改写内存中的内容,以ASCLL码的方式存入内存单元

    用法3:

    -e 【段地址:偏移地址】

    可以逐个修改从【段地址:偏移地址】开始内存中的内容,形式为“原值.修改值“,(原值会自动给出)按空格进入下一个值得修改。若原值不需要修改,则按空格跳过。

    示例:

     

     单步跟踪指令

    -t :执行一条指令。遇到loop、call会进入循环内部继续单步执行;遇到int中断指令会进入中断程序内部继续单步执行

    用法1:

    -t

    从当前CS:IP位置开始执行一条指令

    用法2:

    -t=【段地址:偏移地址】

    从【段地址:偏移地址】开始执行一条指令

    用法3:

    -t 数字

    从当前CS:IP位置开始执行“数字“条指令

    单步执行指令

    -p:用法同-t,只是在遇到循环或者int指令时不会进入内部单步执行

    -a :写入一条指令

    用法1:

    -a 指令

    从当前CS:IP位置开始写入指令

    用法2:

    -a 【段地址:偏移地址】

    从【段地址:偏移地址】开始写入指令

    *修改写入指令的地址后,执行前需要修改t的执行位置,或修改CS:IP的值

    示例:

     

     

    -g :一次性执行多条指令。若遇到程序结束或者int指令,则自行结束。

    用法1:

    -g 【段地址:偏移地址】

    从当前CS:IP位置开始执行指令,一直执行到【段地址:偏移地址】之前

    用法2:

    -g =【段地址:偏移地址1】 【段地址:偏移地址2】

    从【段地址:偏移地址1】开始执行指令,一直执行到【段地址:偏移地址2】之前

    示例:

     

    -u :反汇编(将机器指令翻译成汇编指令)

    用法1:

    -u

    从当前CS:IP位置开始显示默认32字节机器码

    用法2:

    -u 【段地址:偏移地址】

    从【段地址:偏移地址】开始显示默认32字节机器码

    用法3:

    -u 【段地址:偏移地址1】 偏移地址2(或者l+数字)

    从【段地址:偏移地址1】开始显示机器码直到偏移地址2(或者显示指定长度的机器码)

    示例:

     

    二、观察机器代码和汇编指令,感受汇编和反汇编的不同

    写入机器代码反汇编成指令:

     

    写入汇编指令反汇编成机器码:

     

    三、完成2^3=8的运算

    使用jmp指令多次相加得到

     

    四、在fff00~fffff中找到ROM的生产日期,并尝试修改

    在地址ffff0中,得到生产日期为01/01/92

    无法改写该地址的内容

     

     

    五、 向b8100H开始填写数据,观察现象

     

    向其它内存单元填写数据,观察现象

     

    实验1——总结

    常用DOS命令:

        help  DOS命令  查看具体指令的使用信息

        type  文件名  查看某个文件内容

        dir  目录名  显示某个目录下内容列表;如果省略参数不写,表示显示当前目录下内容列表

        cd  目录名  改变当前工作目录;如果目录名改为“..”则返回上一层目录

    Debug功能:

    Debug 是一种机器调试工具。可用于测试和调试 MS-DOS 可执行文件的程序。是汇编语 言程序设计中常用的调试工具。在 Debug 环境下,不但可以调试经汇编、连接后生成的可 执行程序,也可以编写简单的程序。具有跟踪程序执行、观察中间运行结果、显示和修改寄 存器或存储单元等多项功能。

    Debug使用注意:

    1、 不区分大小写

    2、 命令和参数之间可以没有空格间隔

    3、 -g后面要带地址参数,否则会卡住,需要关闭窗口重新打开

    几点发现:

    1、 在debug环境下按下“Ctrl+字母“会有些有趣的输入

    比如:

    Ctrl+i 向后数个空格(有点像放大版Table键)

    Ctrl+h 后退,相当于backspace功能

    Ctrl+j 换行,但行首不会出现“-“光标

    Ctrl+c 输入实心心形

    Ctrl+m 换行,相当于enter功能

    其它基本上是一些符号

    2、 修改内存地址b8000H——b8e0f的值可以在窗口显示彩色图案

        地址单元控制输出图案的位置

        输入的奇数个值控制图案,偶数个值控制颜色

    比如:

    03 04 输出红色爱心

    04 01 输出深蓝色方块

    感受:

    这些是比较基础的操作,学习起来不难,但是在实际过程中,也会由于不熟悉而敲错,需要退出重来的情况。因此不管高级语言还是汇编,都需要不断地上机操作巩固,不断熟练,直到知识真的变为自己的,融入自己的脑海中。

    问题:

    1、 当输入“-t”或者“-r”时,第二行末尾的8个标识NV UP EI PL NZ NA PO NC,上网搜索后发现这些是标志寄存器,但具体用法还不清楚。

    2、 当输入“-d”时,右侧的一块有的是对应的ASCLL码字符,有的有对应ASCLL码的符号却还是显示“.”,为什么会出现这种情况呢?

    3、 Int指令的作用是什么?

    4、 使用“-r”或者“-t”执行到已经写入指令的最后一条时,最后一行中间显示的是下一条指令,而修改的指令已经执行完,这时候显示的是计算机默认的指令吗?计算机中原本每个内存中都写入了默认指令吗?

  • 相关阅读:
    close 不弹出对话框
    ASP.NET会话(Session)保存模式
    ASP.NET页面刷新后滚动条保留在刷新前的位置 MaintainScrollPositionOnPostback
    CSS实现垂直居中的5种方法
    ExpandStackTrace
    HttpTunnel
    PropertyAccess类 Linq.Expressions 实现
    DatagramResolver
    AsyncUdpClient 类
    C# LockFreeStack类
  • 原文地址:https://www.cnblogs.com/cjh-1023/p/9852399.html
Copyright © 2011-2022 走看看