新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8 CPU寄存器描述

        STM8 CPU寄存器描述

        作者: 時間:2016-11-11 來源:網絡 收藏
        簡介
        STM8S是基于8位框架結構的微控制器,其CPU內核有6個內部寄存器,通過這些寄存器可高效 地進行數據處理。STM8S的指令集支持80條基本 20種尋址模式,而且CPU的6個內部寄 存器都擁有可尋址的地址。如果想了解全部STM8S指令集,請參考STM8 微控制器家族編程手冊 (PM0044)。 CPU寄存器

        在圖1所示的編程模型中可以看到6個CPU寄存器。在一個中斷發生后,寄存器以圖2所示順序入棧,它們以相反的順序出棧。如果需要的話,中斷服務程序可使用POP和PUSH指令來對之進行操作。

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

        CPU寄存器描述


        累加器(A)
        累加器是一個8位通用目的寄存器,用于保存算術運算、邏輯運算以及數據操作的操作數及結果。
        索引寄存器(X和Y)
        X和Y都是16位的寄存器,可實現高效率的尋址模式。它們也可用作數據操作的暫存器以及用于像乘除法這樣的操作。在大多數情況下,交叉匯編器會在使用了Y寄存器的指令代碼中生成PRECODE指令,用以和使用了X寄存器的指令相區別。
        程序計數器(PC)
        程序計數器是一個24位的寄存器,用于存儲CPU下一條要執行指令的地址。其內容在每一次指令操作后被自動刷新。由于程序指針有24位,因此STM8的最大尋址范圍可達16M字節。

        圖(1)


        堆棧指針(SP)
        堆棧指針是一個16位的寄存器,其內容為堆棧中下一個可自由分配的單元地址。根據不同的型號,堆棧指針的高位會有一個指定的預設值。
        堆棧一般用于在中斷調用或子程序調用時存儲 CPU的上下文(程序計數器,關鍵寄存器,相關函數的參數及局部變量,等等)。用戶也可以通過POP和PUSH指令直接對堆棧操作。
        SP可以被C編譯器的啟動代碼初始化,C語言應用程序會根據用戶所使用的包含絕對地址信息的鏈接文件來進行初始化。如果用戶使用了自己編寫的鏈接文件和啟動代碼,請確認SP被恰當地初始化(具體地址信息請參考相應的數據手冊)。在MCU復位后,或在執行了堆棧復位指令后(RSP),堆棧指針被設為其被允許的最大值。對于使用了匯編語言的應用程序,用戶可使用ST提供的啟動代碼或編寫自己的啟動代碼來對SP進行正確的初始化。
        入棧操作使堆棧指針值減小,出棧操作使堆棧指針值增加。當堆棧指針值為其被允許的最小值時,繼續入棧會使堆棧指針值回卷至其最大值,從而會導致先前存儲的數據被覆蓋,但此時沒有中斷或硬件標志位來指示該事件發生。應用程序需確保堆棧被正確的操作,沒有溢出。
        子程序調用會占用2或3字節空間。中斷調用會占用9字節空間來存儲內部寄存器(除SP之外)。請參考圖2。

        圖(2)

        *注:WFI/HLAT指令會預先保存CPU上下文。如果CPU處于WFI或HALT狀態下有中斷發生,則進入中斷所需的延時會相應減少。

        • 條件代碼寄存器(CC)
          條件代碼寄存器是一個8位寄存器,用于指示剛剛被執行的指令結果及處理器的狀態。寄存器的第7位(MSB)是保留位,這些位可以被用戶的程序或代碼單獨地測試,測試的結果可用于指示程序或代碼執行后的狀態 。下面的段落將描述每一位的含義。
          • V:溢出
            在上一次有符號數的算術操作中,如果結果的最高位有溢出發生,則當該位被置1。請參考INC,INCW,DEC,DECW,NE
            G,NEGW,ADD,ADDW,ADC,SUB,SUBW,SBC,CP,CPW等指令。

          表(1)

          I1:中斷屏蔽級別1
          I1和I0共同用于指示當前狀態下CPU的可中斷性,請參考表1。通過執行RIM,SIM,HALT,WFI,IRET,TRAP和POP指令可對I1和I0置位或清零。I1和I0也會在CPU進入中斷服務程序時被硬件自動設置為該中斷對應的中斷級別。

        • H:半進位
          在執行ADD或ADC操作的過程中,當ALU的第3位和第4位間發生進位時,H位會被置1,這對于
          BCD碼算術運算很有意義。
        • I0:中斷屏蔽級別0
          請參考表1。
        • N:負數
          當上一次的算術、邏輯或數據操作的結果是負的情況下,N位被置1(例如結果的最高位是邏輯1)。
        • Z:零
          當上一次的算術、邏輯或數據操作的結果是零時,Z位被置1。
        • C:進位
          在上一次的算術操作中,如果結果的最高位發生進位或借位,則當該位被置1。當執行位測試,分支,移位,旋轉和加載指令時,該位也會收到影響。請參考ADD,ADC,SUB, SBC等指令。
          在除法操作中,C位用來指示在指令執行中是否有錯誤發生(商溢出或0作除數)。請參考DIV指令。
          在位測試操作中,被測試的位被復制到C位;請參考BTJF,BTJT指令。在移位和旋轉操作中,C位根據結果進行相應地更新;請參考RRC,RLC,SRL,SLL,SRA指令。
          用戶還可以通過SCF,RCF,CCF指令對C位進行置位,清除和取反。
          例子:加法操作



        關鍵詞: STM8CPU寄存

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临邑县| 依兰县| 临汾市| 页游| 隆安县| 赤水市| 五华县| 四子王旗| 罗甸县| 报价| 万年县| 阳春市| 禹州市| 新建县| 樟树市| 石阡县| 襄樊市| 永城市| 三门峡市| 邵阳市| 饶河县| 永和县| 鄂伦春自治旗| 宁城县| 仁布县| 织金县| 绍兴县| 页游| 思南县| 萝北县| 长武县| 阜新市| 咸宁市| 蒲城县| 秦皇岛市| 石城县| 华容县| 四川省| 广南县| 清水县| 宜城市|