汇编语言 实验二

· 在进行实验之前,有个小知识点: 中断机制 : Debug的T命令在执行修改寄存器SS的指令时, 下一条指令也紧接着被执行。

实验任务(1):

  敲下如下代码

-e 0021:0 31 32 33 34 35 36 37
mov ax, 0021
mov ds, ax

mov ax, 2200
mov ss, ax

mov sp, 0100

mov ax, [0]          ;ax = 3130
mov ax, [2]          ;ax = 6462
mov bx, [4]          ;bx = 3534
add  bx, [6]          ; bx = 6C6A

push ax                 ;sp = 00FE; 修改的内存单元的地址是  2200:00FE 内容为 6462
push bx                 ;sp = 00FC;修改的内存单元的地址是  2200:00FC 内容为 6C6A
pop ax                  ; sp = 00FE; ax = 6C6A
pop bx                  ; sp = 0100; bx = 6462

push [4]                ;sp = 00FE;修改的内存单元的地址是 2200:00FE 内容为 3534
push [6]                ;sp = 00FC;修改的内存单元的地址是 2200:00FC 内容为 3736

 

填空与实验结果一致。

————————————————————————————————————————————

实验任务(2):

1. 我们发现 2000:0~2000:f 的单元值是有变化的

   那么是什么原因呢?

   实事证明,我并没有悟性,通过百度得到,靠近栈顶的内存单元中存储的是SS, IP, CS中的值,通过对比就可以发现它们的位置,那么还有一些别的数据呢,代表什么意思?

2. 前3行的功能是:将段寄存器ss的值设置为段地址 2000, 将段寄存器sp的值设置为偏移地址 10 . 也就是安排 2000:0000 - 2000:000F为栈空间, 初始化栈顶为 2000:10

总结和体会: 所知尚浅,还须多读书,多敲代码,多“鼓捣”,多沉心静气。

原文地址:https://www.cnblogs.com/sunguanglin/p/9863240.html