汇编实验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=3130H;

add  ax,【2】;                                             ax=6462H;

mov bx,【4】;                                             bx=3534H;

add  bx,【6】;                                             bx=6C6AH;

push ax;                                                            sp=00FEH;           修改的内存单元的地址为2200:00FEH,内容为6462H;

push bx;                                                         sp=00FCH;           修改的内存单元的地址为2200:00FCH,内容为6C6AH;

pop ax;                                                           sp=00FEH;        ax=6C6AH;

pop bx;                                                           sp=0100H;         bx=6462H;

push 【4】                                                        sp=00FEH;        修改的内存单元的地址为2200:00FEH,内容为3534H;

push 【6】                                                        sp=00FCH;        修改的内存单元的地址为2200:00FCH,内容为3736H;

以上是我对这段代码的理论分析结果,接下来我们具体操作看看。

输入期间发生了点小差错,不过没关系,继续补上(不知道对内存空间有没有影响)

ax,bx的值都符合理论上的值。第一个SP也符合。

查看内存单元,符合预期值。

(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

输入7行指令,又打错了,汇编代码还需要多打打,用e命令对2000:0之后的16个内存单元值进行修改,

然后通过d命令对内存单元进行查看,修改成功。

2000:0开始的值未发生变化

这一步2000:0 f 的值开始发生变化,缺少了mov ss,10的操作,ss段寄存器的值变为2000,数据段的地址发生了变化,

进栈,操作

3366H进栈,

第一行代码的功能为将ax的值赋为2000,把ss段寄存器的赋为2000,此时的栈顶2000:0010,mov sp,10,的意思经过查阅资料发现是留10个内存空间给接下来的寄存器比如cs等等。

至于书上写的中断机制,即debug每用t执行命令,会停止继续执行,显示当前每个存储器的状态和下步操作,而上面mov ss,10肯定执行了,但是下一步栈不能完全还原上一步中个存储器的状态,所以导致2000:0之后的f‘个内存单元的数值发生了变化。

总结与反思

1.还需要注意push是sp-2,pop是sp+2,空栈的栈顶为0010H。

2.对于-d命令可以时刻观察某一或某段内存单元的内容,有助于进行实验。

3.通过查阅资料可以初步了解中断机制的过程,这是在以后的汇编编程中要注意的。

4.汇编语言的书写 还需要经常练,经常写错,多敲个回车......

原文地址:https://www.cnblogs.com/-Cold/p/9862586.html

时间: 2024-10-14 10:53:34

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

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

实验二  用机器指令和汇编指令编程 任务一: (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

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

一.实验目的 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命令执行一条语句: 三.实验

【汇编语言】实验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

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

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]                     

汇编实验一——利用这3条指令计算2的8次方

安装dosbox 运行 DOSBox 0.74 (noconsole) 实验内容: 将下面3条指令写入2000:0开始的内存单元中,利用这3条指令计算2的8次方. mov ax,1 add ax,ad jmp 2000:3 原文地址:https://www.cnblogs.com/wszme/p/9192992.html