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 的替補用。
最后,說一下,代碼是死的,就看你怎么用。說到底,還是要去體會和理解 單片機的工作原理。
|