【汇编语言】实验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 0000 2200 0100
mov sp,0100
mov ax,[0] C0EA 0000 2200 0100
add ax,[2] C0FC 0000 2200 0100
mov bx,[4] C0FC 30F0 2200 0100
add bx,[6] C0FC 6021 2200 0100
push ax C0FC 6021 2200 00FC
push bx C0FC 6021 2200 00FC
pop ax 6021 6021 2200 00FE
pop bx 6021 C0FC 2200 0100
push [4] 6021 C0FC 2200 00FE
push [6] 6021 C0FC 2200 00FC

注:背景涂色的两行代码,在使用t命令单步执行时,同时进行。

6.书后习题

内存单元地址:DS:[ ]

栈地址:SS:SP

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

1.使用a命令输入汇编指令;

使用e命令修改2000:0段内存单元的值,使之为0;

使用d命令查看修改后的内存单元的值。

2.使用t命令单步执行;

使用d命令查看2000:0段内存单元的值。

3.分析

ss:sp,意味着栈顶指针,汇编指令mov修改了ss:sp,使之变为2000:0。

当对栈进行操作时,ss:sp随着入栈出栈的操作变化,会改变这一段内存单元的值。



五、总结与体会

通过任务一,我了解到,汇编指令对ss和sp是同时进行操作的,当两条语句在相邻的上下行时,使用t命令单步执行,这两个指令会同时进行;我还进一步理解了,当使用到内存单元的地址[ ]时,默认以DS寄存器里的值作为段地址,去访问DS:[ ];我还知道了,pop ax是把栈顶元素的值,弹到ax里,不是之前的错误理解(以为把ax弹出,其实一点都讲不通)。

通过实验二,我加深了对栈顶指针SS:SP的理解,明白了在编写汇编指令时,要注意栈内存单元的选取,不能影响其他正常的操作。

原文地址:https://www.cnblogs.com/Master-Sun/p/9859374.html

时间: 2024-08-29 07:16:42

【汇编语言】实验2 用机器指令和汇编指令编程(2)的相关文章

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

一.实验目的 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)用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 —— 用机器指令和汇编指令编程(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) 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;       

汇编实验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)及公