新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC中檔單片機匯編指令詳解(3)

        PIC中檔單片機匯編指令詳解(3)

        作者: 時間:2016-11-19 來源:網絡 收藏
        ADDWF W寄存器內容和f數據寄存器內容相加

        語法形式:ADDWF f,d

        本文引用地址:http://www.104case.com/article/201611/318558.htm

        操作數:f為數據寄存器的低7位地址(0x00~0x7F)

        d為目的寄存器的低7位地址(0x00~0x7F)

        當d=f時,結果放在f數據寄存器,W寄存器的內容不變

        當d=W時,結果放在W寄存器中,f數據寄存器的內容不變

        執行時間:一個指令周期

        執行過程:【f】+【W】→d

        狀態標志影響:Z DC C

        說明:數據寄存器內容和W寄存器內容相加,結果放入d指定的地方

        指令范例:

        MOVLW 0x55 ;W=0x55,假定Sum=0xAA

        ADDWF Sum,f ;W不變,Sum=0xFF

        MOVF 傳送f數據寄存器的內容到目的寄存器

        語法形式:MOVF f,d

        操作數:f為數據寄存器的低7位地址(0x00~0x7F)

        d為目的寄存器的低7位地址(0x00~0x7F)

        當d=f時,把數據寄存器的內容放回自己本身,目的用于判斷數據寄存器的內容是否為0。

        當d=W時,結果放在W寄存器中,將數據寄存器f的內容傳送至W寄存器

        執行時間:一個指令周期

        執行過程:【f】→d

        狀態標志影響:Z

        說明:將數據寄存器的內容傳送至它處,或者對f數據寄存器的內容做判0操作,如果傳送的數據是0,則置位Z標志。

        指令范例:

        例1:數據傳送

        MOVF Var1,W ;Var1內容傳送至W寄存器

        MOVWF Var2 ;W寄存器內容傳送至Var2,此時Var1=Var2

        例2:數據判0

        MOVF Var3,f ;Var3寄存器內容被送往自身,其他寄存器內容不變,但是影 響Z標志

        BTFSC STATUS,Z ;如果Var3不等于0,則跳過下一條指令

        GOTO Var3Zero ;如果Var3等于0,則轉向其他操作

        COMF f數據寄存器內容取反

        語法形式:COMF f,d

        操作數:f為數據寄存器的低7位地址(0x00~0x7F)

        d為目的寄存器的低7位地址(0x00~0x7F)

        當d=f時,結果放在f數據寄存器,W寄存器的內容不變

        當d=W時,結果放在W寄存器中,f數據寄存器的內容不變

        執行時間:一個指令周期

        執行過程:!【f】→d

        狀態標志影響:Z

        說明:求數據寄存器內容的反碼,求一個數的補碼可以使用這個指令完成(按位求反再加一)

        指令范例:

        COMF num,f ;對num變量取反碼

        INCF num,f ;反碼加1就是其補碼

        DECFSZ 數據寄存器內容遞減1,并作判0標志

        語法形式:DECFSZ f,d

        操作數:f為數據寄存器的低7位地址(0x00~0x7F)

        d為目的寄存器的低7位地址(0x00~0x7F)

        當d=f時,結果放在f數據寄存器,W寄存器的內容不變

        當d=W時,結果放在W寄存器中,f數據寄存器的內容不變

        執行時間:一個指令周期或兩個指令周期

        執行過程:【f】-1→d

        狀態標志影響:Z

        說明:該指令將首先將f數據寄存器的內容做減1運算,結果放到d指定的目的地址內,同時它還會對Z標志進行判0操作(進行分支跳轉控制);如果f數據寄存器減1后結果非0,那么Z=0,程序將順序執行下一條指令,本次指令操作耗費一個指令周期;如果結果為0,那么Z=1,此時程序將會跳過緊跟其后的第一條指令,去執行緊跟其后的第二條指令,本次指令操作耗費兩個指令周期。該指令常用于計數次數或者循環次數的控制。

        指令范例:

        MOVLW 0x10 ;準備給循環計數器賦初值

        MOVWF Count ;此時循環計數器Count=0x10

        Loop:DECFSZ Count,f ;Count遞減1,結果放入Count中,并進行Z標志判 GOTO Loop ;斷,如果遞減后結果不為0,繼續執行Loop操作, ;總共循環0x10(16進制)次。

        NOP ;如果遞減后結果為0,就跳到這條指令



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 内乡县| 四平市| 布尔津县| 云安县| 保康县| 静安区| 信宜市| 西乌| 林口县| 吴川市| 十堰市| 左贡县| 冀州市| 读书| 西盟| 无极县| 特克斯县| 昭觉县| 开远市| 兴山县| 安庆市| 长治市| 白水县| 武定县| 揭东县| 绥滨县| 武功县| 商河县| 福安市| 麻栗坡县| 隆回县| 镇坪县| 洪湖市| 庄浪县| 福鼎市| 桓台县| 太康县| 武汉市| 孝感市| 永城市| 怀化市|