0%

《汇编语言》(第四版) 实验 2

《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019

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

实验任务(1)

使用 DeBug,将书上程序段写入内存,逐条执行

实验任务(2)

分析:为什么 2000:0 ~ 2000:f 中的内容会发生改变?

按照实验过程进行


观察 2000:0 ~ 2000:f 这一段内存单元的变化,在变化发生之前,我们通过将 SS:SP 指向 2000:0010 这一操作将这段内存当作栈来使用,于是 2000:0010 为栈的栈顶,在 8086CPU 中,入栈时,栈顶从高地址向低地址方向增长,而我们发现,2000:0010 的低地址内存中出现了原来没有的机器码,如下:

00 00 00 00 00 00 00 20 00 00 08 01 40 07 A4 01

我们知道,8086CPU 的字节序为小端序,可以看出来,这里的 0x01A4 为之后要用到的标志寄存器的值,一共有 16 位,更为明显的是之后的 0x07400x0108,这显然是当前 CS:IP 的值,之后还有 0x2000AX 的值,我们可以猜测,8086CPU 会将一些寄存器中的值暂存在栈中

这里有比较好的解释,截取一些放在下面

当把 2000:0 ~ 2000:f 作为栈时。系统会把寄存器的一些数据暂存在栈中,以供后续相关操作使用,如数据 CS:IP 先后得到暂存

通过了解,知道了 dos 下系统只有一个栈,也就是说,外部操作未设置栈时,系统自己已经有一个栈在做暂存等相关工作了,当外部进行设置时,暂存等工作就发生在新栈中,因此没有进行 push 前系统已经先用来暂存相关数据了,这就是我们看到数据的原因


汇编语言实验合集

汇编语言实验合集

实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
实验 2 用机器指令和汇编指令编程
实验 3 编程、编译、连接、跟踪
实验 4 [bx] 和 loop 的使用
实验 5 编写、调试具有多个段的程序
实验 6 实践课程中的程序
实验 7 寻址方式在结构化数据访问中的应用
实验 8 分析一个奇怪的程序
实验 9 根据材料编程
实验 10 编写子程序
课程设计 1
实验 11 编写子程序
实验 12 编写 0 号中断的处理程序
实验 13 编写、应用中断例程
实验 14 访问 CMOS RAM
实验 15 安装新的 int9 中断例程
实验 16 编写包含多个功能子程序的中断例程
实验 17 编写包含多个功能子程序的中断例程
课程设计 2