导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:请教大家一个问题,困扰我一个下午了.[iamsxj]

 *第7760篇: 初学者:请教大家一个问题,困扰我一个下午了.

  
楼 主:iamsxj 2003年1月17日16:31
 初学者:请教大家一个问题,困扰我一个下午了.
请问各路高手,我如何将程序计数器pc 压栈??(然后我想通过修改堆栈值再将其pop出)
现在我就是不会压栈。谢谢指教了。
  
2楼:红心J 2003年1月17日18:33
 参考
    LCALL SUB_PC  ;PC=ADR
ADR:......

SUB_PC:POP BUFF_PCH
       POP BUFF_PCL
       PUSH BUFF_PCL
       PUSH BUFF_PCH
       RET
       

  
3楼:Kuang-chingTsui 2003年1月23日11:37
 修改BUFF_PCL/PCH 
这样就行,如果在两条POP指令后再增加两条修改BUFF_PCL/PCH 的指令,就可以RET到任何预定
的位置了:
.......
mov buff_pcl,#xxh
mov buff_pch,#xxh
.......
  
4楼:红心J 2003年1月23日11:50
 有这样的指令吗?
  
5楼:Kuang-chingTsui 2003年1月23日12:28
 这只是一个
这只是一个程序的片断,在程序的开头一定会对BUFF_PCL 和BUFF_PCH 进行定义的如:
......
buff_pcl equ xxh  ;xx是buff_pcl在内部ram中的位置
buff_pch equ yyh  ;yy是buff_pch在内部ram中的位置
.......
然后:
mov buff_pcl,#xxh
mov buff_pch,#xxh
.......
怎么不可以?
  
6楼:红心J 2003年1月23日13:03
 xxh,yyh到底是什么数,请明示。
  
7楼:tm1300 2003年1月23日13:10
 他的意思是
内部ram中的位置 十六进制表示
  
8楼:红心J 2003年1月23日13:33
 他搞错了
PCL/PCH根本就不再内部RAM中,之所以连问两次,
是希望不清楚的人能加深印象,牢牢记住。
  
9楼:dirty 2003年1月23日13:10
 guest
  
10楼:tm1300 2003年1月23日13:09
 把两个人的写法综合一下就可以了
   BUFF_PCL  EQU  XXH    ;存放于低128RAM区
   BUFF_PCH  EQU  YYH    ;存放于低128RAM区

    LCALL SUB_PC  ;PC=ADR
ADR:......

SUB_PC:POP BUFF_PCH
       POP BUFF_PCL
       ...........      ;对BUFF_PCH,BUFF_PCL修改到需要跳转的地址
       PUSH BUFF_PCL
       PUSH BUFF_PCH
       RET

  
11楼:tm1300 2003年1月23日13:16
 其实,也可以这么修改,只做参考
    MOV DPTR,#$+10   ;3
    PUSH DPL         ;2
    PUSH DPH         ;2
    LJMP MAIN        ;3
LOOP:......
      ......
main 是主程序标号
main中可以使用RET语句,使PC跳转到LOOP:
反正,PC是不可以直接进行附值操作的。

  
12楼:@123 2003年1月22日12:17
 答案
      ......
      lcall l_01   ;压栈
l_01: ........
      ........
      ret          ;出栈
  
13楼:a12345678 2003年1月23日22:10
 自动压栈,用RET/RETI出栈

>>>>>>对该主题发表你的看法

本主题贴数13,分页: [第1页]


[上一篇主题]:[+求助!!!] 谁能上传一个Protell 99 SE ?

[下一篇主题]:初学者:一个有难度的问题.....