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