1.为什么称CS为代码段寄存器?为什么称SS为堆栈段寄存器?
答: 因为在取指令的时候,规定的段寄存器就是CS,所以CS为代码段寄存器;
而堆栈操作时规定的寄存器是SS,所以SS为堆栈寄存器;
2.请举例说明何为段前缀超越。什么场合下要使用段前缀超越?
答: 在存取一般存储器操作数时,段寄存器可以不是DS;当偏移设计BP寄存器时,段寄存器
也可以不必是SS;如mov AX,[si] 默认段地址在DS中,也可以改变:mov AX, ES:[si]
当数据并不在默认的DS指定段时,可以采用段前缀超越;
3.什么情况下,缺省的段寄存器是SS?为什么要这样安排?
答: 当使用堆栈时,缺省的段寄存器是SS;
因为SS定义为堆栈段寄存器,配合SP堆栈指针,用来指向堆栈的栈顶;
4.如果实现数据段与代码段相同?
答: 将数据段的内容写入代码段中,并将代码段的段值赋给DS即可;
5.堆栈有哪些用途,请举例说明?
答: 堆栈的用途主要有:
1、现场和返回地址的保护;
MOV AX, OFFSET ADDRESS
PUSH AX
JMP XXX
…
RET
2、寄存器内容的保护;
PUSH AX
PUSH BX
…
POP BX
POP AX
3、传递参数;
PUSH [BX]
CALL XXX
…
XXX:
POP AX
…
4、存储局部变量;
PUSH DS
PUSH CS
POP DS
…
POP DS