实验一 用机器指令和汇编指令编程

南京信息工程大学实验报告

实验(实习)名称 用机器指令和汇编指令编程 实验(实习)日期 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长度的内存。

 

posted @ 2018-10-27 09:30  江小雯  阅读(475)  评论(2)    收藏  举报