汇编语言 实验二
· 在进行实验之前,有个小知识点: 中断机制 : 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
总结和体会: 所知尚浅,还须多读书,多敲代码,多“鼓捣”,多沉心静气。
“你看那条凄惶的狗,东探探,西望望,冀图讨要,就是不肯锻炼了筋骨去猎食!”