免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

PIC組合語言

在寫PIC18時若使用:
GOTO $-1或GOTO $+1會出現下列的警告
Warning[226] ... Destination address must be word aligned
但若是改為GOTO $-2或GOTO $+2就不會出現警告。

(GOTO $-1 和 GOTO $-2)與(GOTO $+1 和 GOTO $+2)在View內的Program Memory來看是一樣的,都是GOTO到相同位置,這對程式有何影響?這若在dsPIC是否就會跳到陷阱裡?

映像中PIC12系列在使用GOTO $-1或GOTO $+1時並沒有這警告。

若我想要GOTO到下面第五行,是否應該要參考在View內的Program Memory,再來決定到底是要goto $+多少呢?(有的指令是一個指令週期,有的是兩個指令週期)


-----------

$ 是代表組譯器(Assembler)目前的 PC (Program Counter, 程式計數器) 的值。

對於 PIC12/PIC16 這些傳統 14-bit core 的 PIC 而言,每個程式指令是 14 bit,PC 的單位是 word (此 1 word = 14 bit),因此 goto $+1 , goto $-1 就可以到下一個或前一個指令。

對於 PIC18 這些新的 16-bit core 的 PIC 而言,每個程式指令是 16 bit,PC 的單位是 byte (此 1 word = 2 byte = 16 bit),因此要到下一個或前一個指令,需寫成 goto $+2 , goto $-2 ;到下二個或前二個指令,是 goto $+4 , goto $-4 ,依此類推。( goto $+1 , goto $-1 只有半個指令,無法執行)

--------------------------------------------------------------------------------------------------

EQU 宣告 變數或位址用

RES 宣告 變數佔用多少空間,位址須看最前頭

-----------------------------------------------------------
GOTO 2K 跳躍範圍

-----------------------------------------------------------

程式PAGE規劃,滿了會有編譯錯誤

-----------------------------------------------------------

W暫存器為內部 WREG暫存器;F暫存器 為存到原暫存器,

---------------------------------------------------------------

GLOBAL 宣告為所有檔可用,非於MAIN 中的參數,正常情況只能給宣告時該區的程式碼使用,
若要給其他檔的程式碼呼叫,則須進行全域宣告,

---------------------------------------------------------------

INDF與FSR配合用法,主要用於間接定址,解釋為FSR的資料為存在INDF值的位址

--------------------------------------------------------------

巨集不僅僅是一個指令,巨集前不可執行btfsc,btfss,incfsz,decfsz等類似跳躍指令

-------------------------------------------------------------

MOVLW  XXXX ,若XXX為立即數,則W的值=XXX ,若XXX為暫存器,則W=XXX暫存器的位址
返回列表