实验一 用机器指令和汇编指令编程
南京信息工程大学实验报告
实验(实习)名称 用机器指令和汇编指令编程 实验(实习)日期 2017-10-25 得分 指导教师 耿学华
系 计软院 专业 计科 年级 2017级 班次 4 姓名 江漪雯 学号 20171308150
一、实验目的
1. 掌握使用debug工具编写和调试汇编命令的方法
2. 掌握第1章~第2章所学的关于CPU、寄存器、内存的基础知识
3. 掌握第1章~第2章涉及的几条指令mov, add, sub, jmp的用法
二、实验准备
1. 复习教材第1~2章内容,完成教材内相关检测点
2. 结合教材实验1(P35)及公邮文件中心→实验下的“实验1辅助文档.pdf”学习debug工具用法。
三、实验内容
1. 教材实验1(P35)
(1)练习教材P35-45「预备知识:Debug的使用」,学习debug启动、退出及常用指令用法;
(2)在练习基础上,完成「2. 实验任务」
四、实验结论
实验任务 1:
用E指令将机器码逐条写入到内存中,然后用U命令翻译。

可以发现每一行写完,会自动跳转到下一行,IP的值逐条增加,根据指令长度增加。
用u指令进行翻译时,后面要加上要写入内存数据的CS:IP的值,不然会显示默认CS:IP中未写入数据的空数据值。
用T指令运行:
需要一条一条执行,在执行T命令之前必须使CS:IP指向0:200(即要写入的内存单元),即执行T命令之前执行R命令先查看原来的CS和IP的值,然后通过rcs和rip改变CS和IP的值分别为0和200.


用A指令将汇编指令写入到指定的内存中,用T命令执行:
图1中我用A命令执行之后用D命令查看,由于没有指定CS和IP的值导致查看错误
图2中我先用T命令逐条执行然后用D命令加0:200查看了汇编命令对应的机器码的值,右边是可显示的ASCII字符,“.”代表不可显示的数据。


可以看出,汇编指令和机器指令的差别在于指令的表示方法上。
实验任务 2:
将3条汇编指令写入到指定位置,计算2的8次方。
用R命令查看,观察到汇编指令写入的段地址和偏移地址与CS IP不同,因为T指令令CPU执行CS:IP指向的指令,所以用R指令修改CS与IP的值。

用T指令逐条执行:

可以观察到,指令执行后,机器自动将IP改变,将CS:IP指向下一条指令。当寄存器AX中的值到0100时停止执行。因为2的8次方十进制中为256,十六进制中为100H.
实验任务 3:
根据题目提示,用D命令查看内存FFF00H~FFFFFH中的数据,

-d fff0:0 ff是指从fff00开始查看,ff长度的内存。
可以观察到,生产日期为01/01/92,所对应的内存地址为FFFF5H~FFFFCH,
用E命令试图改变它,发现生产日期无法改变。
实验任务 4:
向内存从B8100H开始的单元中写入数据:

更改内存中的数据:

更改写入的内存地址和数据:

可以观察到此内存地址为地址,是RAM,可以改变其值来在屏幕中显示。一个字符占两个字节,内存B810:0和B810:1这两个字节对应着屏幕中的第一个字符的位置,以此类推。
五、总结与体会
1. T指令是使CPU执行CS:IP指向的指令,不能指定内存执行,需要逐条执行。
2.MOV指令不能用于设置CS,IP的值,最简单的可以修改CS,IP的指令是JMP指令。
3.掌握了关于CPU、寄存器、内存的基础知识。
4.掌握了mov, add, sub, jmp的用法。
5.掌握了R指令、D指令、E指令、A指令、U指令、T指令和G指令的基本用法。
其中值得注意的是查看内存FFF00H~FFFFFH中的数据,是执行-d fff0:0 ff语句,即从fff00开始查看,ff长度的内存。
浙公网安备 33010602011771号