順序程序結構
將20H單元低4位取出存入21H,高四位取出存入22H
要點:ANDLW和SWAPF
MOVF 20H,0 ;將20H單元的內容送人W
ANDLW 0FH ;W高四位清零低4位保持不變
MOVWF 21H ;將拆分后的低4位送21H
SWAPF 20H,0 ;將20H單元內容高、低半字節換位后送W
ANDLW 0FH ;再將W高四位清0低四位保持不變
MOVWF 22H ;將拆分后的高四位送22H單元
分支程序結構
RAM中20H和21H單元存放2個數,找出大着存入22H單元
要點:兩數做減法,判斷標志位C的值
STATUS EQU 03H ;定義STATUS寄存器地址為03H
C EQU 0 ;定義進位/借位標志C在STATUS中得地址為0
MOVF 20H 0 ;將20H單元的內容送人W
SUBWF 21H 0 ;用21H單元的內容減去W中的內容,結果存在W中
BTFSS STATUS,C ;若C=1,沒借位,則21H單元中的數大,跳到F21BIG
GOTO F20BIG ;若C=0,有借位,20H單元中得數較大,則跳至F20BIG
F21BIG MOVF 21H,0 ;將21H中的內容存入W寄存器
MOVWF 22H ;再將它轉存到22H單元
GOTO STOP ;跳過下面兩條指令到程序末尾
F20BIG MOVF 20H,0 ;將20H中的內容存入W寄存器
MOVWF 22H ;再將它轉存到22H單元
STOP GOTO STOP ;任務完成,停機,原地踏步
循環程序結構
數據存儲器中,從地址30H開始的50個單元全部寫入00H
要點:間接尋址寄存器FSR當做地址指針
COUNT EQU 20H ;指定20H單元作為循壞次數計數器(即循環變量)
FSR EQU 04H ;定義FSR寄存器地址為04H
INDF EQU 00H ;設定INDF寄存器地址為00H
MOVLW D50 ;把計數器初值50送入W
MOVWF COUNT ;再把50轉入計數器(作為循環變量的操作值)
MOVLW 30H ;把30H(起始地址)送入W
MOVWF FSR ;再把30H轉入寄存器FSR(用作地址指針)
NEXT CLRF INDF ;把以FSR內容為地址所指定的單元清0
INCF FSR,1 ;地址指針內容加1,指向下一單元
DECFSZ COUNT,1 ;計數值減1,結果為0就跳過到下一條指令到STOP處
GOTO NEXT ;跳轉回去並執行下一次循環
STOP GOTO STOP ;循環結束之后執行該語句,實現停機
子程序結構
3個數最大者放入40H單元
STATUS EQU 03H
C EQU 00H
X EQU 20H
Y EQU 21H
Z EQU 22H
主程序
MAIN MOVF 30H,0
MOVWF X
MOVF 21H,0
MOVWF Y
CALL SUB
MOVF Z,0
MOVWF X
MOVF 32H,0
MOVWF Y
CALL SUB
MOVF Z,0
MOVWF 40H
STOP GOTO STOP
子程序
子程序:(入口參數:X和Y,出口參數:Z)
SUB MOVF X,0 ;將X內容送人W
SUBWF Y,0 ;Y內容減去W內容,結果存入W
BTFSS STATUS,C ;若C=1,沒有發生借位,執行下一條,否則跳轉
GOTO X_BIG
Y_BIG MOVF Y,0 ;將Y中的數據送入W
MOVWF Z ;再將它轉存到Z
GOTO THEEND ;跳過下面兩條到末尾
X_BIG MOVF X,0 ;將X中的數據送入W
MOVWF Z ;再將它轉存到Z
THEEND RETURN ;子程序返回