用PUSH往SS段传送一批数据后,再用POP取出时, 取出单元的顺序与存放时的顺序正好相反,“后进先出” ④ MOVAX,0066(BX)=0099 ③MOAX,006(4X)=006 ② PUSH BX3000200A OD ⑥ POP BX(BX)=0C0D OC ① PUSHAX3066:2C 0B+306:230c 0A ⑥ POPAX(AX)=0A0B 执行前6:0边36别E (AX=OAOB (BX)=0COD
用PUSH往SS段传送一批数据后,再用POP取出时, 取出单元的顺序与存放时的顺序正好相反, “后进先出” ⑥ POPAX (AX)=0A0B ①PUSH AX 3000:200E 执行前 SS:SP 3000SS: :200 SP C 3000:200A ②PUSH BX SS:SP 3000:200E SS:SP 3000SS: :200 SP C 0D 0C 0B 0A 34 12 ⑤ POP BX (BX)=0C0D (AX)=0A0B (BX)=0C0D ④MOVAX,0066 (BX)=0099 ③MOVAX,0066 (AX)=0066
堆栈的概念 stack ●堆栈是一个内存区域。 通常用于存放一些重要数据, 如程序的地址、或是需要恢复的数据。 SS: SP ●为方便数据的存放和恢复, 设置专门的指针,指向堆栈中要操作的单元。 段值由SS给出,偏移地址由SP给出 SS→堆栈段寄存器( stack segment) SP→堆栈指针寄存器( stack point
⚫ 堆栈是一个内存区域。 通常用于存放一些重要数据, 如程序的地址、或是需要恢复的数据。 SS:SP ⚫为方便数据的存放和恢复, 设置专门的指针,指向堆栈中要操作的单元。 段值由 SS 给出,偏移地址由 SP 给出 SS → 堆栈段寄存器 (stack segment) SP → 堆栈指针寄存器 (stack point) 堆栈的概念 stack
●堆栈操作指令PUSH和POP, sS:0000 堆栈 对SS和SP指向的内存单元, 未用 以“后进先出”方式进行操作。 空间 SS: SP PUSH→入栈操作SP减小 POP→出栈操作SP增加 SP指向栈顶,即堆栈的顶部, SS: FFFF ●编程员通过设置堆栈区域, 利用堆栈操作,可方便的进行数据的存放和恢复
⚫ 堆栈操作指令 PUSH 和 POP, 对 SS 和 SP 指向的内存单元, 以“后进先出”方式进行操作。 PUSH → 入栈操作 SP减小 POP → 出栈操作 SP增加 SP 指向栈顶,即堆栈的顶部, ⚫ 编程员通过设置堆栈区域, 利用堆栈操作,可方便的进行数据的存放和恢复。 SS:SP SS:0000 SS:FFFF 堆栈 未用 空间
堆栈使用的场合 ●用堆栈保存恢复信息 (如上例) ●子程序的调用、返回以及中断调用、返回 (控制转移指令中介绍) ●用堆栈传送数据 (程序设计中介绍)
堆栈使用的场合 ⚫ 用堆栈保存恢复信息 (如上例) ⚫ 子程序的调用、返回以及中断调用、返回 (控制转移指令中介绍) ⚫ 用堆栈传送数据 (程序设计中介绍)
注意事项 ●堆栈是一重要数据结构,使用堆栈应有明确目的。 不乱用堆栈操作,不乱修改堆栈内容。 乱修改SS和SP的内容 包括{乱用BP参与的存储器操作数 乱用指令 PUSH、POP、 PUSHF、POPF、 CALL、RET、INT、RRET
注意事项 ⚫ 堆栈是一重要数据结构,使用堆栈应有明确目的。 不乱用堆栈操作,不乱修改堆栈内容。 PUSH、POP、PUSHF、POPF、 CALL、RET、INT、IRET 乱修改 SS 和 SP 的内容 包括 乱用BP参与的存储器操作数 乱用指令