新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于C51匯編ADD與SUBB指令問題

        關于C51匯編ADD與SUBB指令問題

        作者: 時間:2012-08-10 來源:網絡 收藏

        今天在寫關于 PID 算法時 , 突然發現 , 偏差是有正負之分 , 那么應當如何表示呢 ? 當然是用一個字節的第八位來表示啦 , 這想都不用想 , 這是 ADD 指令與 SUBB 指令會認識他們嗎 ? 這是一個問題 .

        所以 , 我做了以下幾個測試 . 看看單片機有有參與的運算 .

        我使用編譯環境是 wave6000, 將代碼抄到環境 , 編譯 , 再設置 CY 的標志位 .

        先看看 CY=0 的情況 :

        MOV A,#89H
        MOV B,#09H
        ADD A,B

        這時 ,A=92H. 此時 , 單片機不認識 .

        再看看 CY=1 的情況 :

        MOV A,#89H
        MOV B,#09H
        ADD A,B
        A=92H,CY=0

        可以看出 ,Cy 并不影響 add 指令的計算 .

        再看看減法

        Cy=0 時 :

        MOV A,# 09H
        MOV B,# 89H
        SUBB A,B

        這時 ,A=80H,CY=1.

        Cy=1 時 :

        MOVA,#09H
        MOVB,#89H
        SUBB A,B

        這時 ,A=7FH,CY=1.

        通過上面對比 , 我們可以發現 SUBB 指令的運算與 Cy 有關系 . 那么如果 SUBB 與 ADD 聯合起來用會有什么效果呢 ?

        Cy=0

        MOV A,#09H
        MOV B,#89H
        SUBBA,B ;A=80H,CY=1
        MOV B,#80H
        ADD A,B

        A=00H,CY=0

        本來 80H+80H=100H, 即 CY=1, 但 CY 已經為 1,1+1=10, 所以 Cy=0. 這時 , 你發現 add 指令的計算結果與 Cy 好像有點關系了 . 這個例子好像有點特殊 , 我們在看看其他例子 :

        MOV A,#09H
        MOV B,#29H
        SUBBA,B ;A=E0,CY=1
        MOV B,#80H
        ADD A,B

        A=60H,CY=0

        這應該怎么解釋呢 ?E0 如果除去最高位不算 , 那么實際他會是 20. 所以 (-20)H+80H=60H

        但是為什么前面我設置標志位 Cy 的時候 ,ADD 運算結果都一樣 , 而此時卻會影響呢 ?

        雖然我不知這種情況是怎么回事 , 但是只要 ADD 與 SUBB 連用時 , 我們可以知道 , 不用考慮關于溢出的問題 , 特別是我們用于連續做加減法的時候 .



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 浑源县| 博爱县| 佛山市| 禹城市| 灵宝市| 习水县| 资兴市| 五家渠市| 安泽县| 湘乡市| 贺兰县| 海伦市| 庆元县| 蒙自县| 大同市| 民和| 孟连| 红桥区| 西宁市| 随州市| 盐城市| 新乐市| 宜州市| 潜江市| 阳高县| 阳东县| 通河县| 安岳县| 呼伦贝尔市| 时尚| 获嘉县| 尖扎县| 宝应县| 南丹县| 荃湾区| 辛集市| 昆山市| 张家港市| 金寨县| 龙岩市| 海盐县|