程序計數器是一個16位或32位寄存器,它包含下一條要執行的指令的地址。每次獲取指令時,PC會自動遞增到下一個順序內存位置。分支、跳轉和中斷操作使用下一個順序位置以外的地址加載程序計數器。
啓動上電復位將導致寄存器中的所有值丟失。這意味著復位時PC(程序計數器)的值爲0,迫使CPU從ROM存儲器位置0000獲取第一個操作碼。這意味著我們必須將upcode的第一個字節放在ROM位置0000中,因爲這是CPU希望找到第一條指令的地方
Reset Vector
重置向量的意義在於它將處理器指向包含固件第一條指令的內存地址。如果沒有重置向量,處理器將不知道從何處開始執行。復位後,處理器從預定義的存儲器位置加載帶有復位矢量值的程序計數器(PC)。在CPU08架構上,這是在$FFFE:$FFFF位置。
當不需要重置向量時,開發人員通常認爲這是理所當然的,並且不會對最終圖像進行編程。因此,處理器不會在最終產品上啓動。這是調試階段常見的錯誤。
Stack Pointer
堆棧是在RAM中實現的,CPU寄存器用來訪問它,稱爲SP(堆棧指針)寄存器。SP寄存器是一個8位寄存器,可以尋址範圍從00h到FFh的內存地址。最初,SP寄存器包含值07以指向位置08,作爲8051用於堆棧的第一個位置。
當CPU寄存器的內容存儲在堆棧中時,稱爲推送操作。當堆棧的內容存儲在CPU寄存器中時,稱爲POP操作。換句話說,一個寄存器被推到堆棧上保存它,並從堆棧中彈出來檢索它。
Infinite Loop
無限循環或無限循環可以被識別爲電腦程式中的一系列指令,它們在循環中無休止地執行,原因如下&負;
- loop with no terminating condition.
- loop with a terminating condition that can never be met.
- loop with a terminating condition that causes the loop to start over.
這種無限循環通常會導致較舊的作業系統變得無響應,因爲無限循環會消耗所有可用的處理器時間。等待用戶輸入的I/O操作也稱爲「無限循環」。計算機「凍結」的一個可能原因是無限循環;其他原因包括死鎖和訪問衝突。
嵌入式系統與PC不同,它從不「退出」應用程式。它們通過無限循環空閒,等待以中斷或預先安排的任務形式發生的事件。爲了省電,一些處理器進入特殊的「睡眠」或「等待」模式,而不是通過無限循環空閒,但它們會在計時器或外部中斷時退出此模式。
Interrupts
中斷主要是指示程序發生事件的硬體機制。它們可能隨時發生,因此與程序流異步。它們需要處理器進行特殊處理,並最終由相應的中斷服務例程(ISR)處理。中斷需要迅速處理。如果你花太多時間來處理一個中斷,那麼你可能會錯過另一個中斷。
Little Endian Vs Big Endian
儘管數字總是以相同的方式顯示,但它們在內存中的存儲方式不同。大端機將最重要的數據字節存儲在最低的內存地址中。大端機存儲0x12345678 as−
ADD+0: 0x12 ADD+1: 0x34 ADD+2: 0x56 ADD+3: 0x78
另一方面,小端機將數據的最低有效字節存儲在最低的內存地址中。一個小小的Endian機器存儲0x12345678 as−