|
AR0~AR7 是偽地址, 屬于KEIL A51 專用,在KEIL的幫助里面可以找到,一般講匯編的書,不會(huì)寫,要講KEIL的書才會(huì)寫, 主要是為了彌補(bǔ) A51 指令的空白, 你如果已經(jīng)打了一點(diǎn)匯編基礎(chǔ),你會(huì)知道, 你如果要把R7 的東西復(fù)制給 R6, 是不能直接復(fù)制的,這個(gè)時(shí)候,就可以用到 “偽地址”: MOV R6,AR7 來達(dá)到目的, 此時(shí)的 AR7, 其實(shí)是一個(gè) 指向 R7 所在的直接地址。相當(dāng)于: MOV R6,07H 這條指令,唯一的好處是,AR7 可以指代 4組通用寄存器的 任何一個(gè)組,編譯的時(shí)候,會(huì)幫你自動(dòng) 改直接地址。所以,同樣道理,PUSH 只能PUSH 直接地址,我們可以用PUSH AR7來填補(bǔ)無法 PUSH R7的空白。 其實(shí)主要內(nèi)容就這么點(diǎn)。你要還有興趣 可以去KEIL的 幫助里面搜一下。
再跟你講一下SP, SP其實(shí)就是指針,你仔細(xì)看51方面的書,會(huì)提到 3個(gè)8位地址指針,2個(gè)16位指針,分別對應(yīng)的就是: R0,R1,SP,DPTR,PC 這5個(gè)指針。 其中: SP是半自動(dòng),PC 是全自動(dòng), R0,R1,DPTR是全手動(dòng)。所以,基于SP是8位指針的特性,他的工作原理和 R0,R1 是一樣的,就是訪問的 IDATA 間接尋址內(nèi)存。而PUSH 和 POP 指令你可以理解成:PUSH ACC
PUSH PSW
........
POP PSW
POP ACC
RETI
//以下代碼不存在,是解釋上面代碼的動(dòng)作。
MOV @SP,ACC
INC SP
MOV @SP,PSW
INC SP
..............
DEC SP
MOV PSW,@SP
DEC SP
MOV ACC,@SP
RETI
通過這個(gè)代碼,我們可以看到。其實(shí),你用 R0,R1 完全可以 軟件模擬出 PUSH POP 指令。 反過來,指針不夠用的時(shí)候, SP也可以臨時(shí)拿來當(dāng) R0,R1 的替補(bǔ)用。
最后,說一下,代碼是死的,就看你怎么用。說到底,還是要去體會(huì)和理解 單片機(jī)的工作原理。
|
|