µC/OS-II在80x86上的移植

本章將介紹如何將µC/OS-II移植到Intel 80x86系列CPU上,本章所介紹的移植和代碼都是針對80x86的實模式的,且編譯器在大模式下編譯和連接。本章的內容同樣適用於下述CPU:
80186
80286
80386
80486
Pentium
Pentium II
實際上,將要介紹的移植過程適用於所有與80x86兼容的CPU,如AMD,Cyrix,NEC (V-系列)等等。以Intel的爲例只是一種更典型的情況。80x86 CPU每年的產量有數百萬,大部分用於個人計算機,但用於嵌入式系統的數量也在不斷增加。最快的處理器(Pentium系列)將在2000年達到1G的工作頻率。
大部分支持80x86(實模式)的C編譯器都提供了不同的內存使用模式,每一種都有不同的內存組織方式,適用於不同規模的應用程序。在大模式下,應用程序和數據最大尋址空間爲1Mb,程序指針爲32位。下一節將介紹爲什麼32位指針只用到了其中的20位來尋址(1Mb)。
本章所介紹的內容也適用於8086處理器,但由於8086沒有PUSHA指令,移植的時候要用幾條PUSH指令來代替。
圖F9.1顯示了工作在實模式下的80x86處理器的編程模式。所有的寄存器都是16位,在任務切換時需要保存寄存器內容。

80x86提供了一種特殊的機制,使得用16位寄存器可以尋址1Mb地址空間,這就是存儲器分段的方法。內存的物理地址用段地址寄存器和偏移量寄存器共同表示。計算方法是:段地址寄存器的內容左移4位(乘以16),再加上偏移量寄存器(其他6個寄存器中的一個,AX,BP,SP,SI,DI或IP)的內容,產生可尋址1Mb的20位物理地址。圖F9.2表明了寄存器是如何組合的。段寄存器可以指向一個內存塊,稱爲一個段。一個16位的段寄存器可以表示65,536個不同的段,因此可以尋址1,048,576字節。由於偏移量寄存器也是16位的,所以單個段不能超過64K。實際操作中,應用程序是由許多小於64K的段組成的。


代碼段寄存器(CS)指向當前程序運行的代碼段起始,堆棧段寄存器(SS)指向程序堆棧段的起始,數據段寄存器指向程序數據區的起始,附加段寄存器(ES)指向一個附加數據存儲區。每次CPU尋址的時候,段寄存器中的某一個會被自動選用,加上偏移量寄存器的內容作爲物理地址。文獻中會經常發現用段地址—偏移量表示地址的方法,例如1000:00FF表示物理地址0x100FF。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章