Intel CPU 系列,最初是 4 位微處理器 4004,然后到到 8 位微處理器的 8008 ,再到 8 微微處理器 8080,以及稍后的 16 位微處理器 8086,由 8086 開始,Intel 進入現在所謂的 x86 時代 。
Intel 8086 為 16 位 CPU ,而因為在 8086 之前的 CPU 都是 8 位 CPU,這樣也就造成了很多的外設也只支持 8 位,因此 Intel 緊接著就退出了 8 位的 8088 CPU,因此 Intel 8088 也就可以看做是 8086 的 8 位版本;如果是但從匯編語言的角度上來說,8086 和 8088 是沒有區別的,即 8086 上跑的程序可以不加修改的移植到 8088 ,8088 上跑的程序也可以不加修改的移植到 8086 上,當然,還是有些特殊的地方是不同的,而這些基本上在這里可以忽略掉,在 8088 CPU 之后,Intel 又推出了 80186 ,80286 ,這兩款 CPU 均是 16 位 CPU ,而對于 80186 來說,其與 8086 的區別可以簡單的看做是 80186 多了幾條指令而已,而 80286 則不同,80286 的地址總線數目有了變化,在 8086 , 8088 , 80186 上,CPU 的地址總線都是 20 根,即可最大尋址 220 即達到 1MB 的尋址能力,而對于 80286 CPU 來說,其地址總線數目達到了 24 根,從而最大尋址能力為 224 即 16MB,由于支持更多的物理內存尋址,因此 80286 便開始成為了多任務,多用戶系統的核心。
而后來,Intel 又推出了 80386 ,80386 為 32 位微處理器,Intel 80x86 家族的 32 位微處理器始于 80386;同時 80386 也完全兼容先前的 8086/8088,80186,80286,并且 80386 全面支持 32 位數據類型和 32 位操作,并且 80386 的數據總線根數和地址總線根數均達到了 32 根,從而可以最大物理尋址為 232 即 4GB 。而之后的 80486 也是 32 位微處理器,而后又出來了 Pentium 和 Pentium Pro 等等第五代微處理器,這些處理器雖然也是 32 位微處理器,但是他們的數據總線和地址總線都有所擴展,比如 Pentium 的數據總線達到 64 位,而 Pentium Pro 的地址總線位數達到了 36 位 。
8086微處理器寄存器簡介
8086 CPU中有8個通用寄存器AX、BX、CX、DX、SP、BP、SI、DI;兩個控制寄存器IP、FL;四個段寄存器CS、DS、SS、ES。
8個通用寄存器都可以用來暫存參加運算的數據或中間結果,但又有各自的專門用途。例如,AX專用做累加器,某些指令指定用它存放操作數和運算結果;CX為計數寄存器,在某些指令中做計數器使用;DX為數據寄存器;BX為基址寄存器,BP為基址指針,SI為源變址寄存器,DI為目的變址寄存器,這4個寄存器在數據尋址中用來存放段內偏移地址(有效地址)或段內偏移地址的一部分;SP為堆棧指示器,用來存放棧頂有效地址。
兩個控制寄存器用來存放有關的狀態信息和控制信息。例如,標志寄存器FL用來存放狀態標志和控制標志;而指令指針用來存放下一條要取指令的有效地址。
四個段寄存器用來存放段地址。例如,CS寄存器用來存放代碼段的段地址;DS寄存器用來存放數據段的段地址;SS寄存器用來存放堆棧段的段地址;ES寄存器用來存放擴展段的段地址。
8086DS 寄存器和 ES 寄存器
DS 寄存器和 ES 寄存器都屬于段寄存器,其實它們和 CS 寄存器以及 SS 寄存器用起來區別不大,既然是段寄存器的話,自然它們存放的就是某個段地址了 。
通過上面對基礎知識的介紹呢,我們已經知道,如果 CPU 要訪問一個內存單元時,我們必須要提供一個指向這個內存單元的物理地址給 CPU ,而我們也知道在 8086 CPU 中,物理地址是由段地址左移 4 位,然后加上偏移地址形成的,所以,我們也就只需要提供段地址和偏移地址即 OK 。
8086 CPU 呢,提供了一個 DS 寄存器,并且通常都是通過這個 DS 段寄存器來存放要訪問的數據的段地址 。DS(Data Segment):很顯然,DS 中存放的是數據段的段地址 。但是這里不得不再點一下,那就是我們對段的支持是在 CPU 上體現的,而不是在內存中實現了段,所以事實上我們使用的段其實是一個邏輯概念,即是我們自己定義的,再說白了,我定義一個段,我說它是數據段那它就是數據段,我說它是代碼段那么它就是代碼段,它們其實都是一塊連續的內存而已,至于為什么要區分為數據段和代碼段,很明顯,是用來給我們編程提供方便的,即我們在自己的思想上或者說是編碼習慣上規定,數據放數據段中,代碼放代碼段中 。
而我們在使用數據段的時候,為了方便或者說是代碼的編寫方便起見,我們一般把數據段的段地址放在 DS 寄存器中,當然,如果你硬要覺得 DS 不順眼,那你可以換個 ES 也是一樣的,至于 ES(Extra Segment) 段寄存器的話,自然,是一個附加段寄存器,如果再說得過分點,就當它是個擴展吧,當你發現,你幾個段寄存器不夠用的時候,你可以考慮使用 ES 段寄存器,在使用方式上,則和其他的段寄存器沒什么區別 。
評論
查看更多