码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-23 00:07:44      阅读:543      评论:0      收藏:0      [点我收藏+]

标签:ati   log   堆栈   分享   lan   表示   依次   相对   实验   

一、实验目的

1、熟悉基本debug命令:ardeut

2、掌握汇编指令与机器指令的对应关系

3、掌握利用debug命令查看修改内存、寄存器的方法

二、实验要求

1)仔细阅读实验教程中DEBUG的使用部分;

2)使用DEBUG中的A命令输入一段程序段;

3)用DEBUG中的R命令观察寄存器中数据的存放情况,改变寄存器的值;

4)用DEBUG中的D命令查看数据在内存中的表示方法;

5)用DEBUG中的E命令修改内存中的数据;

6)用DEBUG中的T命令执行一条语句;

三、实验步骤和实验内容

(1)使用debug的-a命令,将下面程序段写入内存,再使用-t命令逐条执行,根据指令执行后的实际情况填空。

 技术分享图片

1-1 -a命令输入全部程序指令

 技术分享图片

1-2 -t命令执行每段指令

(2)重新执行上面的程序。在执行前4条语句后,使用-e 0FFFF:0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8,再执行后面的语句,每条语句的执行结果会有什么变化?为什么?

  在使用-e命令后,使用-d 0ffff:0 f查看从ffff:0开始的16个单元内容,如图1-3。

  e命令的功能是用来连续修改内存中的数据的,但是这条语句执行后,并没有变化,这是为什么呢?

  这是因为在系统内存中,对不明确的地址单元信息不能随便修改,因为修改的如果是系统程序就会导致系统崩溃,所以系统中会有某些保护机制,保护数据不被修改。所以这里修改0ffff的值并没有成功,想必就是这个原因。那么这里我尝试修改了1000:0到1000:f的内容,就修改成功,如图1-4。

 技术分享图片

1-3 修改并查看ffff:0~ffff:f的内容

 技术分享图片

1-4 修改并查看1000:0~1000:f的内容

四、实验结果

(1)使用debug,将下面程序段写入内存,逐条执行,根据指令执行后的实际情况填空。

mov  ax,ffffh

mov ds,ax

mov ax,2200h

mov ss,ax

mov sp,0100

mov ax,[0] ;(ax=)  C0EAH    

add ax,[2] ;(ax=)  C0FCH    

mov bx,[4] ;(bx=)  30F0H    

add bx,[6] ;(bx=)  6021H    

push ax ;(sp=)  00FEH   ;修改的内存单元的地址是 2200:0100    ;内容是 C0ECH    

push bx ;(sp=)  00FCH    ;修改的内存单元的地址是 2200:00FEH    ;内容是 6021H    

pop ax ;(sp=)  00FEH      ;(ax=   6021H     

pop bx ;(sp=)  0100H      ;(ax=   C0FCH     

push [4] ;(sp=)  00FEH    ;修改的内存单元的地址是 2200:0100H   ;内容是  30F0H(数据段DS:0004=30F0   

pop [6] ;(sp=)  0100H   ;修改的内存单元的地址是 2200:00FEH    ;内容是  2F31H(数据段DS:0004=2F31     

(2)重新执行上面的程序。在执行前4条语句后,使用-e 0FFFF:0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8,再执行后面的语句,每条语句的执行结果会有什么变化?为什么?

在使用-e命令后,使用-d 0ffff:0 f查看从ffff:0开始的16个单元内容。

这是因为在系统内存中,对不明确的地址单元信息不能随便修改,因为修改的如果是系统程序就会导致系统崩溃,所以系统中会有某些保护机制,保护数据不被修改。所以这里修改0ffff的值并没有成功,想必就是这个原因。那么这里我尝试修改了1000:0到1000:f的内容,就修改成功。(在【《汇编语言》(第3版)清华大学出版社 王爽 著 】的P123提示了0:200~0:2ff是相对安全的

五、实验心得

①给数据段ds、堆栈段ss添加地址时,需要先把数据movax中,在用mov移动到数据段和堆栈段中。

-a-t命令并用,-a输入一段程序,-t执行下一条指令

-r命令查看或修改单个寄存器的值

格式:r / r ax

-d-e命令并用,-d查看一段地址的内容,-e修改一段地址的内容

格式:d 1000:0 f 查看100001000f的地址内容

e 1000:0 0 1 2 3 4 5 6 7 8 9依次修改1000:0开始的10个内容单元

这次实验比较简单,帮助我理解和熟悉了debug的命令下,每条指令执行了什么,改变了什么。

 


最后附上实验报告供大家参考顺便鄙视一下CSDN的下载内容需要积分这类方式,开源就开源嘛,搞什么稀奇?

https://files.cnblogs.com/files/jdemarryme/%E6%B1%87%E7%BC%96%E5%AE%9E%E9%AA%8C%E4%B8%80.pdf


 

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

标签:ati   log   堆栈   分享   lan   表示   依次   相对   实验   

原文地址:https://www.cnblogs.com/jdemarryme/p/9074520.html

(0)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!