汇编语言 第三章小节
汇编语言第三章小结
概述: 此章节的总标题叫做 “寄存器(内存访问)”, 其教学目的是“从访问内存的角度继续学习几个寄存器“。那么,介绍了哪些寄存器呢。其一: 用来访问数据段的”DS寄存器“; 其二:用来访问栈段的SS:SP寄存器。
第一部分:提炼几个基础而又关键的知识点
- 8086CPU的入栈和出栈操作都是以字为单位进行的。
- push指令的执行步骤:a. SP = SP – 2; b. 向SS:SP指向的字单元中送入数据。
- pop指令的执行步骤: a. 从SS:SP 指向的字单元中读取数据; b. SP = SP + 2;
- 关于push 指令和pop指令的执行步骤,其实有点像 “拉抽屉—SP = SP - 2“, “放东西——向字单元中送入数据”, “拿东西——读取数据”,
“关抽屉—SP-= 2”。胡乱地打个比方。
5.从栈操作指令完成的功能角度上来看,push, pop等指令在执行的时候只修改SP, 所以栈顶的变化范围是 0 到 FFFF,从栈空时候的SP = 0;一直压栈,直 到栈满时SP = 0;如果再次压栈,栈顶将环绕,覆盖了原来栈中内容。所以一个栈段的容量最大为64KB。
6.一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即CS, IP, SS, SP, DS的 指向。
7.关于 “将 10000 – 1FFFF 这段空间当作栈段,初始状态栈是空的,此时,SS = 1000, SP = 0”, 为啥SP会等于零呢。首先栈底的偏移地址必然为FFFE,把 栈底元素踢掉就是空栈了,那么FFFE + 2 = 10000。其中 1 就被进位舍掉了。所以SP = 0。
“你看那条凄惶的狗,东探探,西望望,冀图讨要,就是不肯锻炼了筋骨去猎食!”