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