新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC中檔單片機(jī)匯編指令詳解(4)

        PIC中檔單片機(jī)匯編指令詳解(4)

        作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
        INCFSZ f數(shù)據(jù)寄存器內(nèi)容遞增1,并作判0標(biāo)志
        語法形式:INCFSZ f,d
        操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
        d為目的寄存器的低7位地址(0x00~0x7F)
        當(dāng)d=f時(shí),結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變
        當(dāng)d=W時(shí),結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變
        執(zhí)行時(shí)間:一個(gè)指令周期或兩個(gè)指令周期
        執(zhí)行過程:【f】+1→d
        狀態(tài)標(biāo)志影響:Z
        說明:該指令首先對(duì)數(shù)據(jù)寄存器的內(nèi)容做加1操作,結(jié)果按照d的指示保存到相應(yīng)的地方,然后對(duì)Z進(jìn)行判0操作(分支跳轉(zhuǎn)控制):如果加1之后的結(jié)果非0,也就是Z=0,程序?qū)?huì)按照順序執(zhí)行下一條指令,使用1個(gè)指令周期;如果加1之后結(jié)果為0,也就是Z=1,那么程序?qū)?huì)跳過INCFSZ指令之后的第一條指令,開始執(zhí)行第二條指令,使用2個(gè)指令周期。該指令常用于計(jì)數(shù)次數(shù)和循環(huán)次數(shù)的控制。
        指令范例:
        MOVLW 0xC0 ;循環(huán)計(jì)數(shù)數(shù)據(jù)賦初值
        MOVWF Count ;此時(shí)循環(huán)計(jì)數(shù)器初值Count=0xC0
        Loop:INCFSZ Count,f ;Count內(nèi)容加1,放回Count中,并進(jìn)行Z標(biāo)志判斷
        GOTO Loop ;如果加1之后的結(jié)果不為0,則循環(huán)執(zhí)行Loop的內(nèi) 容,總共循環(huán)次數(shù)為0x00-0xC0=0x40次
        NOP ;結(jié)果為0,則跳到這條指令
        RRF 數(shù)據(jù)寄存器內(nèi)容帶進(jìn)位的循環(huán)右移
        語法形式:RRF f,d
        操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
        d為目的寄存器的低7位地址(0x00~0x7F)
        當(dāng)d=f時(shí),結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變
        當(dāng)d=W時(shí),結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變
        執(zhí)行時(shí)間:一個(gè)指令周期
        執(zhí)行過程:

        狀態(tài)標(biāo)志影響:C
        說明:該指令把C進(jìn)位寄存器(借位寄存器)和數(shù)據(jù)寄存器的8位數(shù)據(jù)結(jié)合在一起做9位的循環(huán)右移1位的操作。操作的結(jié)果是把C移到數(shù)據(jù)寄存器的最高位,原數(shù)據(jù)寄存器的最低位放到C中。
        指令范例:
        例1:實(shí)現(xiàn)數(shù)據(jù)寄存器自身8位的循環(huán)右移
        RRF Data,W ;數(shù)據(jù)寄存器Data的內(nèi)容右移1位,結(jié)果放入W寄存器,Data本身 的內(nèi)容不變,但是最低位已經(jīng)移到C中
        RRF Data,f ;再次進(jìn)行右移,結(jié)果寫入Data自身。這時(shí)上一條指令移入C中的最低位現(xiàn)在已經(jīng)變成Data的最高位,實(shí)現(xiàn)了最低位變最高位,最高位變成第二高位的目的
        例2:實(shí)現(xiàn)數(shù)據(jù)寄存器算數(shù)右移(除2操作)
        BCF STATUS,C ;確保C=0
        RRF Data,f ;數(shù)據(jù)寄存器右移1位,最高位現(xiàn)在為0,結(jié)果放入自身
        RLF 數(shù)據(jù)寄存器內(nèi)容進(jìn)行帶進(jìn)位的循環(huán)左移操作
        語法形式:RLF f,d
        操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
        d為目的寄存器的低7位地址(0x00~0x7F)
        當(dāng)d=f時(shí),結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變
        當(dāng)d=W時(shí),結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變
        執(zhí)行時(shí)間:一個(gè)指令周期
        執(zhí)行過程:

        狀態(tài)標(biāo)志影響:C
        說明:該指令將C和8位數(shù)據(jù)寄存器的數(shù)據(jù)結(jié)合起來進(jìn)行9位的循環(huán)左移操作,結(jié)果放入d指定的位置。操作結(jié)果是把C移到數(shù)據(jù)寄存器的最低位,將原數(shù)據(jù)寄存器的最高位移入C中。
        指令范例:
        例1:實(shí)現(xiàn)數(shù)據(jù)寄存器的8位內(nèi)容循環(huán)左移
        RLF Data,W ;Data的內(nèi)容左移1位放入W寄存器中,Data的內(nèi)容不變,Data的 最高位放入C中
        RLF Data,f ;Data的內(nèi)容經(jīng)操作后放回自身,C的內(nèi)容(經(jīng)上步操作后變成了原Data的最高位)放入Data的最低位。
        例2:實(shí)現(xiàn)數(shù)據(jù)寄存器的算數(shù)左移(結(jié)果乘以2)
        BCF STATUS,C ;確保C=0
        RLF Data,f ;數(shù)據(jù)寄存器Data左移1位,最低位補(bǔ)充為0,實(shí)現(xiàn)乘以2
        SWAPF 數(shù)據(jù)寄存器高低半字節(jié)內(nèi)容進(jìn)行交換
        語法形式:SWAPF f,d
        操作數(shù):f為數(shù)據(jù)寄存器的低7位地址(0x00~0x7F)
        d為目的寄存器的低7位地址(0x00~0x7F)
        當(dāng)d=f時(shí),結(jié)果放在f數(shù)據(jù)寄存器,W寄存器的內(nèi)容不變
        當(dāng)d=W時(shí),結(jié)果放在W寄存器中,f數(shù)據(jù)寄存器的內(nèi)容不變
        執(zhí)行時(shí)間:一個(gè)指令周期
        執(zhí)行過程:【f<3:0>】←→【f<7:4>】
        狀態(tài)標(biāo)志影響:無
        說明:該指令實(shí)現(xiàn)把數(shù)據(jù)寄存器的高低半字節(jié)的內(nèi)容進(jìn)行交換,結(jié)果放入d指定的地址。該指令在中斷服務(wù)程序退出前恢復(fù)W寄存器的內(nèi)容的過程中起著不可或缺的作用。不影響狀態(tài)寄存器。
        指令范例:
        SWAPF w_temp,f ;w_temp的高低半字節(jié)內(nèi)容交換,結(jié)果放回w_temp本身
        SWAPF w_temp,W ;w_temp的高低半字節(jié)內(nèi)容再次交換,但是結(jié)果放入W寄存器中,在不影響狀態(tài)寄存器的前提下,實(shí)現(xiàn)了把w_temp的原內(nèi)容復(fù)制到W寄存器中。



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 无极县| 汉川市| 建宁县| 确山县| 平塘县| 永济市| 浙江省| 新和县| 余姚市| 兖州市| 龙州县| 清新县| 炎陵县| 梓潼县| 奇台县| 定西市| 丹巴县| 新建县| 杭州市| 台东市| 江口县| 卫辉市| 扶余县| 海晏县| 蕉岭县| 乌拉特后旗| 鄂伦春自治旗| 焉耆| 紫阳县| 当阳市| 基隆市| 濮阳县| 元谋县| 衡水市| 新安县| 隆子县| 汉阴县| 中宁县| 杂多县| 安吉县| 大安市|