AR0~AR7 是伪地址, 属于KEIL A51 专用,在KEIL的帮助里面可以找到,一般讲汇编的书,不会写,要讲KEIL的书才会写, 主要是为了弥补 A51 指令的空白, 你如果已经打了一点汇编基础,你会知道, 你如果要把R7 的东西复制给 R6, 是不能直接复制的,这个时候,就可以用到 “伪地址”: MOV R6,AR7 来达到目的, 此时的 AR7, 其实是一个 指向 R7 所在的直接地址。相当于: MOV R6,07H 这条指令,唯一的好处是,AR7 可以指代 4组通用寄存器的 任何一个组,编译的时候,会帮你自动 改直接地址。所以,同样道理,PUSH 只能PUSH 直接地址,我们可以用PUSH AR7来填补无法 PUSH R7的空白。 其实主要内容就这么点。你要还有兴趣 可以去KEIL的 帮助里面搜一下。
再跟你讲一下SP, SP其实就是指针,你仔细看51方面的书,会提到 3个8位地址指针,2个16位指针,分别对应的就是: R0,R1,SP,DPTR,PC 这5个指针。 其中: SP是半自动,PC 是全自动, R0,R1,DPTR是全手动。所以,基于SP是8位指针的特性,他的工作原理和 R0,R1 是一样的,就是访问的 IDATA 间接寻址内存。而PUSH 和 POP 指令你可以理解成:PUSH ACC
PUSH PSW
........
POP PSW
POP ACC
RETI
//以下代码不存在,是解释上面代码的动作。
MOV @SP,ACC
INC SP
MOV @SP,PSW
INC SP
..............
DEC SP
MOV PSW,@SP
DEC SP
MOV ACC,@SP
RETI
通过这个代码,我们可以看到。其实,你用 R0,R1 完全可以 软件模拟出 PUSH POP 指令。 反过来,指针不够用的时候, SP也可以临时拿来当 R0,R1 的替补用。
最后,说一下,代码是死的,就看你怎么用。说到底,还是要去体会和理解 单片机的工作原理。
|