📄 emc单片机学习笔记(3)page.txt
字号:
EMC单片机里面有个Page的概念,这里特指程序Page。
什么导致了这个Page的出现呢?仔细研究过指令集的人都会注意到,
EMC的jmp指令的操作数只有10个bit,也就是说最大的表示范围是1K。这
样jmp指令的有效跳转范围就是当前所在的1K范围内,比如当前的PC=0x450,
那么跳转范围就是0x400~0x4FF,这跟MCS51的相对跳转的127范围的模型
是不同的。那怎么办呢?EMC提供了跨Page操作的方法,页选择寄存器,
一个bit可以表示2个page,二个bit可以表示4个Page,3个bit可以表示8
个Page,这就是PS0/PS1/PS2。在JMP之前做好Page寄存器的设置,然后执
行JMP,就可以跳转到目的地址了。
org 0 ;PAGE 0
mov A,@0x55
bs 0x03,5 ;set PS0
jmp MyTest ;PAGE jump
org 0x400 ;PAGE 1
MyTest:
mov 0x05,A
jmp $
如果不是JMP而是CALL,情况会如何呢?call之前我们会设置好PS寄存器,
会到跳转指定位置,如果执行到RET指令的时候,会Return到什么地方呢?
是否需要设定PS寄存器呢?如果设置了,那么这个子程序怎么通用呢?事实
证明我们多虑了,EMC已经为我们设计好了一套机制去保证,堆栈的宽度是足
以盛放call之前的PC数值,执行ret的时候,会先把堆栈里面的整个地址填写
到PC去的。
所以说,Page产生的原因,不是堆栈,也不是PC,是指令宽度不足造成
的。可能会有人说,为什么不增加宽度以消除Page的麻烦呢?RISC单片机使
用固定宽度的指令,跳转指令长了,其他的指令也会增长的,于是成本提高
了,就失去RISC的优势了。
EMC的软件模拟,对有Page的好像不能使用。上面的都是我参考其他家的
RISC单片机学习EMC单片机,例子程序未经试验,很多结论也是推测。请大家
多多指教。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -