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

一、实验目的

1、熟悉基本debug命令:a、r、d、e、u、t

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添加地址时,需要先把数据mov到ax中,在用mov移动到数据段和堆栈段中。

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

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

格式:r / r ax

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

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

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



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

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

时间: 2024-10-07 19:41:55

实验一 用机器指令和汇编指令编程的相关文章

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

实验二  用机器指令和汇编指令编程 任务一: (1)用E命令将内存单元0021:0~0021:7连续8个字节数据修改为30H,31H,32H,33H,34H,35H,36H,37H. (2)用A命令输入汇编指令: (3)用T命令单步执行: 在用T命令执行MOV SS,AX时,它的下一条指令MOV  SP,0100同时执行. (4)填写书上内容: 任务二: 观察如图实验过程,分析为什么2000:0~2000:f中的内容会发生改变. 任意时刻,SS:SP指向栈顶元素,初始时栈为空.初始时,栈顶为0B

【汇编语言】实验2 用机器指令和汇编指令编程(2)

四.实验结论 任务一:使用debug,将下面程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空. 1.使用r命令查看各寄存器初始值. 2.使用a命令编写汇编指令. 3.使用t命令单步执行. 4.分析 此实验使用栈实现了寄存器值的交换 指令 ax bx ss sp mov ax,ffff FFFF 0000 073F 00FD mov ds,ax FFFF 0000 073F 00FD mov ax,2200   2200 0000 073F 00FD mov ss,ax   2200 0

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

实验结论 实验任务(1) 1.使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操作 2.使用 a 命令输入指令 3.每一行指令单步调试 4.指令执行后各个寄存器存值情况 mov ax,[0];             ax=3130H add ax,[2];              ax=6462H mov bx[4];              bx=3534H add bx,[6];              bx=6C6AH push ax;       

实验1 —— 用机器指令和汇编指令编程(2)

debug 指令补充 在执行 d 命令时可以带地址参数 (段地址: 偏移地址),其中的段地址会先被送到 ds 寄存器,再交给处理器. 因此,d 命令也可以这样用: d SR:offset (SR指段寄存器) 例如: -r ds :1000 -d ds:0 ;查看从 1000:0 开始的内存区间中的内容 -r ds :1000 -d ds:10 18 ;查看 1000:10 ~ 1000:18 中的内容 -d cs:0 ;查看当前代码段中的指令代码 -d ss:0 ;查看当前栈段中的内容 当然 e

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

实验任务 (1)使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空. a.使用 e 命令修改 0021:0~0021:f 数据为30H,31H,32H,33H,34H,35H,36H,37H,并查看. 截图 b.将下面的程序段写入内存 mov ax,0021 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0]:                                             ax=3

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

1.预备知识:Debug的使用 Debug在执行"d 1000:0"时,会将段地址送入ds中. Debug的命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行. 2.实验任务 补充: 为了便于验证实验结果,对「2. 实验任务」中的(1)做如下两点调整: ① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H ② 将 P74 实验任务(1)中第 1

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

 1. 预备知识:     用T命令执行修改栈寄存器SS的指令,如mov ss,ax,mov ss,[0],pop ss等时,它的下一条关于修改偏移地址SP的指令也紧接着执行,一般情况下,用T命令执行一条指令后,会停止继续执行,显示出当前CPU各个寄存器的状态和下一步要执行的指令,但如上情况却没有做到这点.这种现象属于后期学习内容:中断机制. 2. 实验任务 (1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空.   mov ax, 0021 mov ds, 

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

1.使用Debug,将下面的程序段写入内存,逐条执行,将执行结果与实验前结果比对. 前提:用E命令将内存单元0021:0~0021:7连续8个字节数据修改为30H,31H,32H,33H,34H,35H,36H,37H. (1)实验前理论分析. mov ax,oo21 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0]                    :ax=3130H add ax,[2]                     

用机器指令和汇编指令编程(修改版)

实验名称 用机器指令和汇编指令编程(1) 实验日期   2018.10.22 学院:计软院 专业:计算机科学与技术 年级:2017级 班次:5班 姓名:陈奕明 学号 20171308194 一.实验目的 1. 掌握使用debug工具编写和调试汇编命令的方法 2. 掌握第1-2章所学的关于CPU.寄存器.内存的基础知识 3. 掌握第1-2章涉及的几条指令mov, add, sub, jmp的用法 二.实验准备 1. 复习教材第1~2章内容,完成教材内相关检测点 2. 结合教材实验1 (P35)及公