|
在使用汇编编程时,临时用到个暂存器,用以存入中间结果,要达到这个目的的方法很多,最方便快捷的是使用它的内部寄存器。然而,在某些情况下不能使用内部的寄存器,如寄存器已经作它用、某些指令不支持寄存器操作等,这时就会想到使用变量来暂存它。
对于C28,还有更好的办法来达到这个目的,那就是堆栈寻址。
C28的堆栈寻址形式如下:
*−SP[6bit]:寻址SP以前的[6bit]位置。
*SP++ :入栈
*--SP : 出栈。
示例:
ADD AL,*−SP[5]
----- 将SP前5位置的数据与AL相加
MOVL *-SP[34], ACC
--------将ACC的数据存入SP的前34字的位置
MOV *SP++,AL
------- AL内容入栈
MOVL ACC,*−−SP
--------出栈。
TI的CCS编译器,也常常使用栈操作来处理暂时存储的内容。如某一函数产生的汇编程序是这样的:
ADDB SP,#2 ; [CPU_U] -------- 在函数的入口处,将堆栈位置调整一下。
…………………………
MOV AH,#16451 ; [CPU_] |175|
MOVL *-SP[2],ACC ; [CPU_] |175| -------使用堆栈暂存数据
…………………………
SUBB SP,#2 ; [CPU_U] ---------- 在返回指令前,将堆栈再调整过来。
LRETR ; [CPU_]
|
|