汇编语言 实验1

时间:2021-01-14 01:21:48

实验1

 

一、熟悉debug功能

 

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

用法1:

-r

查看当前各寄存器中内容

用法2:

-r 段地址:偏移地址

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

 

示例:

 汇编语言 实验1

 

 

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

用法1:
-d

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

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

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

 

示例:

 汇编语言 实验1汇编语言 实验1

 

 

 

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

用法1:

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

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

用法2:

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

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

用法3:

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

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

 

示例:

 汇编语言 实验1

 

 

-t :执行一条指令

用法1:

-t

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

用法2:

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

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

用法3:

-t 数字

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

 

 

-a :写入一条指令

用法1:

-a 指令

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

用法2:

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

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

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

 

示例:

 汇编语言 实验1

 汇编语言 实验1汇编语言 实验1

 

 

 

-g :一次性执行多条指令

用法1:

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

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

用法2:

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

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

 

示例:

 汇编语言 实验1汇编语言 实验1

 

 

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

用法1:

-u

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

用法2:

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

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

用法3:

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

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

 

示例:

 汇编语言 实验1

 

 

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

 

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

 汇编语言 实验1汇编语言 实验1

 

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

 汇编语言 实验1汇编语言 实验1汇编语言 实验1

 

 

 

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

 

使用jmp指令多次相加得到

 汇编语言 实验1汇编语言 实验1

 

 

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

 

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

无法改写该地址的内容

 汇编语言 实验1汇编语言 实验1汇编语言 实验1

 汇编语言 实验1

 

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

 

 汇编语言 实验1

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

 汇编语言 实验1

 

实验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”执行到已经写入指令的最后一条时,最后一行中间显示的是下一条指令,而修改的指令已经执行完,这时候显示的是计算机默认的指令吗?计算机中原本每个内存中都写入了默认指令吗?