出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。

出栈(释放栈)和引用栈内数据意义不等同,和嵌套有关系但不是等同关系,局部变量进栈操作,不是局部变量自动带有进栈指令。汇编语言后局部变量操作是包含进栈操作指令PUSH和栈内地址存储数据调用,出栈。

2. 栈操作
【操作 3】 PUSH direct
功能:将源字节中的数据送入堆栈中,称为压栈或进栈。
说明:首先栈指针 SP 内容加 1,执行(SP)←(SP)+1,然后将直接地址(用 00H~FFH
形式表示的)单元中的内容送入新的 SP 所指向的堆栈单元中,执行((SP))←(direct)。
【例 2.2】 试分析指令的执行结果。
序号 指令
① MOV SP,#09H
② MOV DPTR,#1234H
③ PUSH DPL
④ PUSH DPH
解释操作过程:
第①条 SP 是符号,代表片内 SFR 地址 81H,即 SP=81H,(SP)=09H 后,其意义是
将片内 RAM 地址由 09H~7FH 区域设为堆栈空间。
第②条 (DPTR)=1234H,即(DPH)=12H,(DPL)=34H。
第③条 (SP1)←(SP0)+1=09H+1=0AH。
}
www.bzfxw.com
第 2 章 单片机指令系统及程序设计 ·35·
·35·
(SP1)=(0AH)←(DPL)=34H。
第④条 (SP2)←(SP1)+1=0AH+1=0BH。
(SP2)=(0BH)←(DPH)=12H。
执行结果:(0AH)=34H,(0BH)=12H,(SP)=0BH。
执行过程示意图如图 2.1 所示。
12H
34H
0BH
0AH
09H
82H
81H
83H 12H
34H
09H
DPL
SP
DPH
栈底
③2
④2
④1
③1
图 2.1 进栈示意图
注意:PUSH 指令的执行过程中实际隐含着一个数据堆栈,且将堆栈作为目的地址。
【操作 4】 POP direct
功能:将堆栈中的数据送入目的字节中,称为弹栈或出栈。
说明:先读出由栈指针 SP 寻址的片内 RAM 单元内容送到指定的直接寻址字节,然后
栈指针 SP 减 1,即执行操作为(direct)←((SP)),(SP)←(SP)-1。
【例 2.3】 试分析指令的执行结果。
序号 指令
① MOV SP,#32H
② MOV 31H,#23H
③ MOV 32H,#01H
④ POP DPH
⑤ POP DPL
解释操作过程:
第①条 (SP)=32H。
第②条 片内 RAM 地址 31H 的内容为 23H,即(31H)=23H。
第③条 (32H)=01H。
第④条 (DPH)←((SP0))=(32H)=01H;然后(SP1)←(SP0)-1=32H-1=31H。
第⑤条 (DPL)←((SP1))=(31H)=23H;然后(SP2)←(SP1)-1=31H-1=30H。
执行结果:(DPTR)=(DPH)(DPL)=0123H,(SP)=30H。
执行过程示意图如图 2.2 所示。
标准分享网 www.bzfxw.com 免费下载
www.bzfxw.com
·36· 单片机原理及应用
·36·
01H
23H
32H
31H
30H
82H
81H
83H 01H
23H
32H
DPL
SP
DPH
栈底
⑤1
④2
④1
⑤2
图 2.2 出栈操作过程
注意:POP 指令的执行过程中实际隐含着一个数据堆栈,且将堆栈作为源地址。
 

猜你喜欢

转载自blog.csdn.net/qq_25814297/article/details/108462904