堆栈
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 SP :退栈 退栈3 退栈
退栈,从堆栈中弹出数据。 退栈,从堆栈中弹出数据。 S08系列只能把数据弹出到 , 系列只能把数据弹出到A, 系列只能把数据弹出到 X,H。对应的指令为 , 。对应的指令为PULA, PULX, PULH。 。 退栈时, 先增1, 退栈时, SP先增 ,再弹出数 先增 先增后退” 据,“先增后退”。 堆栈 $0070 …… $00FD SP $05 $00FE $00FF SP = $00FD+1 = $00FE
堆栈顶部 $0070 …… $03 $07 $05 堆栈底部 $00FD $00FE $00FF
2 CPU内部寄存器 内部寄存器:SP 内部寄存器
堆栈指针SP(Stack 堆栈指针 ( Pointer): 位寄存器, ):16位寄存器 ): 位寄存器, 里面存放的是地址值, 里面存放的是地址值,这 个地址指向堆栈的下一个 空白单元” “空白单元”。 单片机在复位时, 单片机在复位时,一般的 做法是令SP指向堆栈的底 做法是令 指向堆栈的底 部,AC16的栈底为 的栈底为 $046F,JL3的栈底为 , 的栈底为 $00FF。 。 指令RSP使SPL=$FF, 指令 使 , 则不受影响。 而SPH则不受影响。 则不受影响
SP
$00FD #06T $00FE #05T $00FF SP = $00FD
5 SP的操作指令 的操作指令7 的操作指令
LDHX #$0100 $0070 TXS ; 设置SP,SP=$00FF LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T $00FD PSHA ;SP=$00FE SP $00FE PSHX ;SP=$00FD #05T $00FF CLRA ;(A)=#0T CLRX ;(X)=#0T SP = $00FD+1 = $00FE PULX ;(X)=#6T,SP=$00FE
SP $07 $05
$00FD $00FE $00FF
SP = $00FD
4 SP :退栈 退栈2 退栈
退栈,从堆栈中弹出数据。 退栈,从堆栈中弹出数据。 S08系列只能把数据弹出到 , 系列只能把数据弹出到A, 系列只能把数据弹出到 X,H。对应的指令为 , 。对应的指令为PULA, PULX, PULH。 。 退栈时, 先增1, 退栈时, SP先增 ,再弹出数 先增 先增后退” 据,“先增后退”。 堆栈 $0070 …… $00FD SP $07 $05 $00FE $00FF SP = $00FD+1 = $00FE
SP = $00FE-$1= $00FD
4 SP:退栈 退栈1 退栈
退栈,从堆栈中弹出数据。 退栈,从堆栈中弹出数据。 S08系列只能把数据弹出到 , 系列只能把数据弹出到A, 系列只能把数据弹出到 X,H。对应的指令为 , 。对应的指令为PULA, PULX, PULH。 。 退栈时, 先增1, 退栈时, SP先增 ,再弹出数 先增 先增后退” 据,“先增后退”。 堆栈 $0070 ……
5.9 堆栈
2011-4-26
Hale Waihona Puke Baidu
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
1 堆栈的特性
堆栈是一种特殊的存 储空间,其特点是: 数据“先进后出”, 即先放进去的数据后 拿出来,后放进去的 数据先拿出来。 堆栈空间和数据区复 用,一般把他们安排 在RAM区的末尾。
5 SP的操作指令 的操作指令6 的操作指令
LDHX #$0100 TXS ; 设置SP,SP=$00FF LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T PSHA ;SP=$00FE PSHX ;SP=$00FD CLRA ;(A)=#0T CLRX ;(X)=#0T
堆栈 $0070 ……
6 SP在中断中的作用 在中断中的作用
中断的发生是随机的,进中断时应先对 中断的发生是随机的,进中断时应先对PC,A, A CCR压栈保护 压栈保护, X,H,CCR压栈保护,退出中断时再把它们退 这样才能保证程序的正常运行。 栈,这样才能保证程序的正常运行。 中断进栈内容依次为PC低位,PC高位 PC低位 高位, 中断进栈内容依次为PC低位,PC高位,X,A, CCR;退栈时顺序则刚好相反。 CCR;退栈时顺序则刚好相反。这是由系统自 动完成的。 动完成的。 寄存器不自动进栈保护,要由程序自决处理。 H寄存器不自动进栈保护,要由程序自决处理。 一般在进入中断程序后第一件事是对H 一般在进入中断程序后第一件事是对H作压栈 保护(PSHH),在中断返回RTI前再退栈恢复 在中断返回RTI 保护(PSHH),在中断返回RTI前再退栈恢复 PULH)。 (PULH)。
SP $07 $05
$00FD $00FE $00FF
SP = $00FD
3 SP:压栈 压栈3 压栈
压栈,把数据放入到堆栈中。 压栈,把数据放入到堆栈中。 S08系列只能把 ,X,H中的 系列只能把A, , 中的 系列只能把 内容(数据)压栈。 内容(数据)压栈。对应的指 令为PSHA, PSHX, PSHH。 令为 。 压栈时, 压栈时, 先把数据压入到堆栈 然后SP减 , 中,然后 减1,“先压后 减”。 堆栈 $0070 …… $00FD SP $07 $05 $00FE $00FF SP = $00FE
3 SP:压栈 压栈4 压栈
压栈,把数据放入到堆栈中。 压栈,把数据放入到堆栈中。 S08系列只能把 ,X,H中的内 系列只能把A, , 中的内 系列只能把 数据)压栈。 容(数据)压栈。对应的指令为 PSHA, PSHX, PSHH。 。 压栈时,先把数据压入到堆栈中, 压栈时,先把数据压入到堆栈中, SP 然后SP减小 减小, 先压后减” 然后 减小,“先压后减”。 堆栈 $0070 …… $00FD $07 $05 $00FE $00FF
5 SP的操作指令 的操作指令1 的操作指令
假设堆栈空间初始状态如右面所 示。
SP $07 $05 堆栈 $0070 …… $00FD $00FE $00FF SP = $00FD
5 SP的操作指令 的操作指令2 的操作指令
LDHX #$0100 TXS ; 设置SP,SP=$00FF
堆栈 $0070 …… $00FD $00FE SP $00FF SP = $00FF
7 SP在子程序调用中的作用 在子程序调用中的作用
中断的发生是随机的,是不可预计的。而 中断的发生是随机的,是不可预计的。 子程序的调用则是程序员根据一些情况而 进行的,是可以预期的。为了保护现场, 进行的,是可以预期的。为了保护现场, 保证子程序执行完毕后程序能从正确的地 方继续执行,也应根据实际需要先对PC, 方继续执行,也应根据实际需要先对 A,X,H,CCR压栈保护,顺序可以借鉴中 CCR压栈保护, 压栈保护 断压栈时的顺序, 断压栈时的顺序,退出子程序之前再退栈 恢复。 恢复。
堆栈 $0070 …… $00FD $00FE SP $00FF SP = $00FF
3 SP:压栈 压栈1 压栈
压栈,把数据放入到堆栈中。 压栈,把数据放入到堆栈中。 堆栈 $0070 …… $00FD SP $05 $00FE $00FF SP = $00FE
3 SP:压栈 压栈2 压栈
压栈,把数据放入到堆栈中。 压栈,把数据放入到堆栈中。 堆栈 $0070 ……
LDHX #$0100 TXS ; 设置SP,SP=$00FF LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T PSHA ;SP=$00FE PSHX ;SP=$00FD
堆栈 $0070 ……
SP #06T #05T
$00FD $00FE $00FF
SP = $00FE-1 = $00FD
5 SP的操作指令 的操作指令3 的操作指令
LDHX #$0100 TXS ; 设置SP,SP=$00FF LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T
SP 堆栈 $0070 …… $00FD $00FE $00FF SP = $00FF
5 SP的操作指令 的操作指令4 的操作指令
…… 堆栈
5 SP的操作指令 的操作指令8 的操作指令
堆栈 LDHX #$0100 TXS ; 设置SP,SP=$00FF $0070 LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T $00FD PSHA ;SP=$00FE $00FE PSHX ;SP=$00FD SP $00FF CLRA ;(A)=#0T CLRX ;(X)=#0T PULX ;(X)=#6T,SP=$00FE SP = $00FE+1 = $00FF PULA ;(A)=#5T,SP=$00FF …… 实例程序:cpu_demo_堆栈指针
LDHX #$0100 TXS ; 设置SP,SP=$00FF LDA #5T ;(A)=#5T LDX #6T ;(X)=#6T PSHA ;SP=$00FE
堆栈 $0070 …… $00FD SP #05T $00FE $00FF SP = $00FF-1 = $00FE
5 SP的操作指令 的操作指令5 的操作指令