


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1匯編語(yǔ)言基礎(chǔ)知識(shí)匯編語(yǔ)言是直接在硬件之上工作的編程語(yǔ)言,首先要了解硬件系統(tǒng)的結(jié)構(gòu),才能有效地應(yīng)用匯編語(yǔ)言對(duì)其編程,因此,本章對(duì)硬件系統(tǒng)結(jié)構(gòu)的問(wèn)題進(jìn)行部分探討,首先介紹了計(jì)算機(jī)的基本結(jié)構(gòu)、 Intel 公司微處理器的發(fā)展、計(jì)算機(jī)的語(yǔ)言以及匯編語(yǔ)言的特點(diǎn),在此基礎(chǔ)上重點(diǎn)介紹寄存器、內(nèi)存組織等匯編語(yǔ)言所涉及到的基本知識(shí)。1.1 微型計(jì)算機(jī)概述微型計(jì)算機(jī)由中央處理器( Central Processing Unit ,CPU)、存儲(chǔ)器、輸入輸出接口電路和總線構(gòu)成。 CPU如同微型計(jì)算機(jī)的心臟,它的性能決定了整個(gè)微型計(jì)算機(jī)的各項(xiàng)關(guān)鍵指標(biāo)。存儲(chǔ)器包括隨機(jī)存儲(chǔ)器( Random Access Memory
2、,RAM)和只讀存儲(chǔ)器(Read Only Memory,ROM)。輸入輸出接口電路用來(lái)連接外部設(shè)備和微型計(jì)算機(jī)??偩€為 CPU和其他部件之間提供數(shù)據(jù)、 地址和控制信息的傳輸通道。 如圖 1.1 所示為微型計(jì)算機(jī)的基本結(jié)構(gòu)。地址總線輸入輸出 外部 存儲(chǔ)器 設(shè)備中央處理器 接口電路CPU數(shù) 據(jù) 總 線控 制 總 線圖 1.1 微型計(jì)算機(jī)基本結(jié)構(gòu)特別要提到的是微型計(jì)算機(jī)的總線結(jié)構(gòu),它使系統(tǒng)中各功能部件之間的相互關(guān)系變?yōu)楦鱾€(gè)部件面向總線的單一關(guān)系。 一個(gè)部件只要符合總線結(jié)構(gòu)標(biāo)準(zhǔn), 就可以連接到采用這種總線結(jié)構(gòu)的系統(tǒng)中,使系統(tǒng)功能得到擴(kuò)展。數(shù)據(jù)總線用來(lái)在 CPU與內(nèi)存或其他部件之間進(jìn)行數(shù)據(jù)傳送。它是雙
3、向的,數(shù)據(jù)總線的位寬決定了 CPU和外界的數(shù)據(jù)傳送速度, 8 位數(shù)據(jù)總線一次可傳送一個(gè) 8位二進(jìn)制數(shù)據(jù)(即一個(gè)字節(jié)),16 位數(shù)據(jù)總線一次可傳送兩個(gè)字節(jié)。在微型計(jì)算機(jī)中,數(shù)據(jù)的含義是廣義的,數(shù)據(jù)總線上傳送的不一定是真正的數(shù)據(jù),而可能是指令代碼、狀態(tài)量或控制量。地址總線專門用來(lái)傳送地址信息,它是單向的,地址總線的位數(shù)決定了 CPU可以直接尋址的內(nèi)存范圍。如 CPU的地址總線的寬度為 N,則 CPU最多可以尋找 2N個(gè)內(nèi)存單元。12控制總線用來(lái)傳輸控制信號(hào),其中包括 CPU送往存儲(chǔ)器和輸入輸出接口電路的控制信號(hào),如讀信號(hào)、寫信號(hào)和中斷響應(yīng)信號(hào)等;也包括其他部件送到 CPU的信號(hào),如時(shí)鐘信號(hào)、中斷請(qǐng)
4、求信號(hào)和準(zhǔn)備就緒信號(hào)等。1.2 Intel 公司微處理器簡(jiǎn)介自20 世紀(jì) 70 年代開始出現(xiàn)微型計(jì)算機(jī)以來(lái), CPU經(jīng)歷了飛速的發(fā)展。1971 年,Intel設(shè)計(jì)成功了第一片 4 位微處理器 Intel 4004 ;隨之又設(shè)計(jì)生產(chǎn)了 8 位微處理器 8008;1973年推出了 8080;1974 年基于 8080的個(gè)人計(jì)算機(jī)( Personal Computer,PC)問(wèn)世,Microsoft 公司的創(chuàng)始人 Bill Gates 為PC開發(fā)了 BASIC語(yǔ)言解釋程序; 1977 年 Intel推出了 8085。自此之后, Intel 又陸續(xù)推出了 8086、80386、Pentium 等 80
5、x86 系列微處理器。各種微處理器的主要區(qū)別在于處理速度、寄存器位數(shù)、數(shù)據(jù)總線寬度和地址總線寬度。 下面簡(jiǎn)要介紹不同時(shí)期 Intel 公司制造的幾種主要型號(hào)的微處理器, 這些微處理器都曾經(jīng)或正在廣為流行。180x86 系列微處理器1)8088 微處理器具有多個(gè) 16 位的寄存器、 8 位數(shù)據(jù)總線和 20 位地址總線,可以尋址 1MB的內(nèi)存。雖然這些寄存器一次可以處理 2 個(gè)字節(jié), 但數(shù)據(jù)總線一次只能傳送 1 個(gè)字節(jié)。 該處理器只能工作在實(shí)模式。2)8086 微處理器指令系統(tǒng)與 8088 完全相同,具有多個(gè) 16 位的寄存器、 16 位數(shù)據(jù)總線和 20 位地址總線,可以尋址 1MB的內(nèi)存,一次可
6、以傳送 2 個(gè)字節(jié)。該處理器只能工作在實(shí)模式。3)80286微處理器比 8086運(yùn)行更快,具有多個(gè) 16 位的寄存器、 16 位數(shù)據(jù)總線和 24 位地址總線,可以尋址 16MB內(nèi)存。它既可以工作在實(shí)模式,也可以工作在保護(hù)模式。4)80386微處理器具有多個(gè) 32 位的寄存器、 32位數(shù)據(jù)總線和 32 位地址總線,可以尋址 4GB內(nèi)存。它提供了較高的時(shí)鐘速度,增加了存儲(chǔ)器管理和相應(yīng)的硬件電路,減少了軟件開銷,提高了效率。它既可以工作在實(shí)模式,也可以工作在保護(hù)模式。5)80486微處理器具有多個(gè) 32 位的寄存器、 32位數(shù)據(jù)總線和 32 位地址總線。 它比 80386 增加了數(shù)字協(xié)處理器和 8K
7、B的高速緩存,提高了處理速度。它既可以工作在實(shí)模式,也可以工作在保護(hù)模式。6)Pentium(奔騰)具有多個(gè) 32 位的寄存器、 64位數(shù)據(jù)總線和 36 位地址總線。 因?yàn)樗捎昧顺瑯?biāo)量體23系結(jié)構(gòu),所以每個(gè)時(shí)鐘周期允許同時(shí)執(zhí)行兩條指令,處理速度得到了進(jìn)一步提高,性能比 80486優(yōu)越得多。它既可以工作在實(shí)模式,也可以工作在保護(hù)模式。以上介紹了 Intel80x86 系列的一些主要微處理器,表 1.1 給出了該系列部分微處理器的數(shù)據(jù)總線和地址總線寬度。 實(shí)際上 80x86 系列的功能還在不斷改進(jìn)和增強(qiáng), 它們的速度將會(huì)更快,性能將會(huì)更優(yōu)越。但無(wú)論怎樣變化,它們總會(huì)被設(shè)計(jì)成是完全向下兼容的,就像
8、在 8086 上設(shè)計(jì)和運(yùn)行的軟件可以不加任何改變地在 Pentium 4 機(jī)上運(yùn)行一樣。對(duì)于匯編語(yǔ)言編程人員來(lái)講,掌握 16 位計(jì)算機(jī)的編程十分重要,它是學(xué)習(xí)高檔計(jì)算機(jī)及保護(hù)模式編程的基礎(chǔ),也是掌握實(shí)模式程序設(shè)計(jì)的唯一方法。2CPU的主要性能指標(biāo)1)機(jī)器字長(zhǎng)機(jī)器字長(zhǎng)和 CPU內(nèi)部寄存器、運(yùn)算器、內(nèi)部數(shù)據(jù)總線的位寬相一致。如 8086CPU,它的內(nèi)部寄存器是 16 位的、運(yùn)算器能完成兩個(gè) 16 位二進(jìn)制數(shù)的并行運(yùn)算、 數(shù)據(jù)總線的位寬為 16位,則它的機(jī)器字長(zhǎng)為 16 位,也稱其為 16 位計(jì)算機(jī)。通常,機(jī)器字長(zhǎng)越長(zhǎng),計(jì)算機(jī)的運(yùn)算能力越強(qiáng),其運(yùn)算精度也越高。2)速度CPU的速度是指單位時(shí)間內(nèi)能夠執(zhí)
9、行指令的條數(shù)。速度的計(jì)算單位不一,若以單字長(zhǎng)定點(diǎn)指令的平均執(zhí)行時(shí)間計(jì)算,用每秒百萬(wàn)條指令( Million Istructions PerSecond,MIPS)作為單位;若以單字長(zhǎng)浮點(diǎn)指令的平均執(zhí)行時(shí)間計(jì)算,則用每秒百萬(wàn)條浮點(diǎn)運(yùn)算指令( Million Floating-point Operations Per Second ,MFLOP)S表示?,F(xiàn)在,采用計(jì)算機(jī)中各種指令的平均執(zhí)行時(shí)間和相應(yīng)的指令運(yùn)行權(quán)重的加權(quán)平均法求出等效速度作為計(jì)算機(jī)運(yùn)算速度。3)主頻主頻又稱為主時(shí)鐘頻率,是指 CPU在單位時(shí)間內(nèi)產(chǎn)生的時(shí)鐘脈沖數(shù),以 MHz/s(兆赫茲每秒)為單位。由于計(jì)算機(jī)中的一切操作都是在時(shí)鐘控制
10、下完成的,因此,對(duì)于機(jī)器結(jié)構(gòu)相同或相近的計(jì)算機(jī), CPU的時(shí)鐘頻率越高,運(yùn)算速度越快。表 1.1 Inte l80x86 系列微處理器總線寬度CPU 數(shù)據(jù)總線寬度 地址總線寬度 CPU 數(shù)據(jù)總線寬地址總線寬度 度8086 16 20 Pentium 64 368088 8 20 Pentium 64 3680286 16 24 Pentium 64 3680386SX 16 24 Pentium 4 64 3680386DX 32 32 Itanium 64 4480486 32 32341.2 計(jì)算機(jī)語(yǔ)言及匯編語(yǔ)言特點(diǎn)1.3.1 計(jì)算機(jī)語(yǔ)言概述計(jì)算機(jī)語(yǔ)言的發(fā)展經(jīng)歷了由機(jī)器語(yǔ)言、匯編語(yǔ)言到高級(jí)
11、語(yǔ)言這樣一個(gè)由低級(jí)到高級(jí)的發(fā)展過(guò)程。1機(jī)器語(yǔ)言機(jī)器語(yǔ)言是計(jì)算機(jī)唯一能直接識(shí)別和執(zhí)行的計(jì)算機(jī)語(yǔ)言。由于計(jì)算機(jī)硬件本身只能識(shí)別二進(jìn)制代碼,在計(jì)算機(jī)發(fā)展的初期, 人們使用二進(jìn)制代碼構(gòu)成機(jī)器指令來(lái)編寫程序,這種二進(jìn)制編碼的計(jì)算機(jī)語(yǔ)言就是機(jī)器語(yǔ)言。 機(jī)器語(yǔ)言描述的程序稱為目標(biāo)程序, 只有目標(biāo)程序才能被 CPU直接執(zhí)行。指令用于指出計(jì)算機(jī)所進(jìn)行的操作和操作對(duì)象的代碼,一條指令通常由操作碼和操作數(shù)兩部分組成。 其中,操作碼指出計(jì)算機(jī)所進(jìn)行的具體操作,如加法、減法等;操作數(shù)說(shuō)明操作的對(duì)象。操作碼比較簡(jiǎn)單,只需對(duì)每一種操作指定確定的二進(jìn)制代碼就可以了;操作數(shù)比較復(fù)雜,首先它可以有一個(gè)、兩個(gè)或三個(gè),分別稱為單操作
12、數(shù)、雙操作數(shù)或三操作數(shù),其次,操作數(shù)可能存放在不同的地方,既可以存放在寄存器中,也可以存放在存儲(chǔ)器中,甚至直接存放在指令中,通常要用尋址方式來(lái)說(shuō)明。一臺(tái)計(jì)算機(jī)全部指令的集合構(gòu)成該計(jì)算機(jī)的指令系統(tǒng)。指令系統(tǒng)是計(jì)算機(jī)基本功能的體現(xiàn),不同的機(jī)器指令對(duì)應(yīng)的二進(jìn)制代碼序列各不相同。機(jī)器語(yǔ)言是面向機(jī)器的,不同機(jī)器之間的語(yǔ)言是不通用的,這也是機(jī)器語(yǔ)言是“低級(jí)”語(yǔ)言的含義所在。用二進(jìn)制代碼編寫程序相當(dāng)麻煩,寫出的程序也難以閱讀和調(diào)試。2匯編語(yǔ)言早期的程序員們很快就發(fā)現(xiàn)了使用機(jī)器語(yǔ)言帶來(lái)的麻煩,它是如此難于辨別和記憶,給整個(gè)產(chǎn)業(yè)的發(fā)展帶來(lái)了障礙,于是產(chǎn)生了匯編語(yǔ)言。匯編語(yǔ)言是一種采用指令助記符、符號(hào)地址、標(biāo)號(hào)等
13、符號(hào)書寫程序的語(yǔ)言,它便于人們書寫、閱讀和檢查。匯編語(yǔ)言指令與計(jì)算機(jī)指令基本上是一一對(duì)應(yīng)的, 匯編語(yǔ)言與計(jì)算機(jī)有著密不可分的關(guān)系, 處理器不同,匯編語(yǔ)言就不同,因此它是一種低級(jí)語(yǔ)言,同時(shí)它也是唯一能夠充分利用計(jì)算機(jī)硬件特性并直接控制硬件設(shè)備的語(yǔ)言。 利用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)體現(xiàn)了計(jì)算機(jī)硬件和軟件的結(jié)合。用匯編語(yǔ)言編寫的程序稱為匯編源程序(或稱匯編語(yǔ)言程序) ,計(jì)算機(jī)不能直接識(shí)別,必須將其翻譯成由計(jì)算機(jī)指令組成的程序后, CPU才能執(zhí)行, 這一過(guò)程稱為 “匯編”。用于將匯編源程序翻譯成計(jì)算機(jī)語(yǔ)言的程序稱為匯編程序, 這種由源程序經(jīng)過(guò)計(jì)算機(jī)翻譯轉(zhuǎn)換成的計(jì)算機(jī)語(yǔ)言程序也稱為目標(biāo)程序。 目標(biāo)程序還不能
14、直接交給 CPU執(zhí)行,它還需要通過(guò)連接程序裝配成可執(zhí)行程序才能被執(zhí)行。 連接程序具有將多個(gè)目標(biāo)程序裝配在一起的功能,它也可以將目標(biāo)程序與預(yù)先編寫好的一些放在子程序庫(kù)中的子程序連接在45一起,構(gòu)成較大的可執(zhí)行程序。它們之間的關(guān)系如圖 1.2 所示。圖 1.2 匯編程序與目標(biāo)程序、可執(zhí)行程序之間的關(guān)系3高級(jí)語(yǔ)言高級(jí)語(yǔ)言是一種與具體的計(jì)算機(jī)硬件無(wú)關(guān),獨(dú)立于計(jì)算機(jī)類型的通用語(yǔ)言,比較接近人類自然語(yǔ)言的語(yǔ)法, 用高級(jí)語(yǔ)言編程不必了解和熟悉計(jì)算機(jī)的指令系統(tǒng), 更容易掌握和使用。高級(jí)語(yǔ)言采用接近自然語(yǔ)言的詞匯,其程序的通用性強(qiáng),易學(xué)易用,這些語(yǔ)言面向求解問(wèn)題的過(guò)程, 不依賴具體計(jì)算機(jī)。 高級(jí)語(yǔ)言也要翻譯成機(jī)
15、器語(yǔ)言才能在計(jì)算機(jī)上執(zhí)行。其翻譯有兩種方式,一種是把高級(jí)語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序,然后經(jīng)過(guò)連接程序連接成可執(zhí)行文件,再在計(jì)算機(jī)上執(zhí)行,這種翻譯方式稱為編譯方式,大多數(shù)高級(jí)語(yǔ)言如 PASCAL語(yǔ)言、C 語(yǔ)言等都是采用這種方式;另一種是直接把高級(jí)語(yǔ)言程序在計(jì)算機(jī)上運(yùn)行,一邊解釋一邊執(zhí)行,這種翻譯方式稱為解釋方式,如 BASIC語(yǔ)言就采用這種方式。高級(jí)語(yǔ)言源程序是在未考慮計(jì)算機(jī)結(jié)構(gòu)特點(diǎn)情況下編寫的,經(jīng)過(guò)翻譯后的目標(biāo)程序往往不夠精練, 過(guò)于冗長(zhǎng), 加大了目標(biāo)程序的長(zhǎng)度, 占用較大存儲(chǔ)空間, 執(zhí)行時(shí)間較長(zhǎng)。1.3.2 匯編語(yǔ)言的特點(diǎn)匯編語(yǔ)言使用助記符和符號(hào)地址,所以它要比機(jī)器語(yǔ)言易于掌握,與高級(jí)語(yǔ)言相
16、比較,匯編語(yǔ)言有以下特點(diǎn)。1)匯編語(yǔ)言與計(jì)算機(jī)關(guān)系密切匯編語(yǔ)言中的指令是機(jī)器指令的符號(hào)表示,與機(jī)器指令是一一對(duì)應(yīng)的,因此它與計(jì)算機(jī)有著密切的關(guān)系, 不同類型的 CPU有不同的匯編語(yǔ)言, 也就有各種不同的匯編程序。匯編語(yǔ)言源程序與高級(jí)語(yǔ)言源程序相比,其通用性和可移植性要差得多。2)匯編語(yǔ)言程序效率高由于構(gòu)成匯編語(yǔ)言主體的指令是用機(jī)器指令的符號(hào)表示的,每一條指令都對(duì)應(yīng)一條機(jī)器指令, 且匯編語(yǔ)言程序能直接利用計(jì)算機(jī)硬件系統(tǒng)的許多特性, 如它允許程序員利用寄存器、標(biāo)志位等編程。用匯編語(yǔ)言編寫的源程序在編譯后得到的目標(biāo)程序效率高,主要體現(xiàn)在空間效率和時(shí)間效率上,即目標(biāo)程序短、運(yùn)行速度快這兩個(gè)方面,在采用
17、相同算法的前提下,任何高級(jí)語(yǔ)言程序在這兩個(gè)方面的效率與匯編語(yǔ)言相比都望塵莫及。3)特殊的使用場(chǎng)合56匯編語(yǔ)言可以實(shí)現(xiàn)高級(jí)語(yǔ)言難以勝任甚至不能完成的任務(wù)。匯編語(yǔ)言具有直接和簡(jiǎn)捷的特點(diǎn),用它編制程序能精確地描述算法, 充分發(fā)揮計(jì)算機(jī)硬件的功能。 在過(guò)程控制、多媒體接口、設(shè)備通信、內(nèi)存管理、硬件控制等方面的程序設(shè)計(jì)中,用匯編語(yǔ)言直接方便,執(zhí)行速度快,效率高。匯編語(yǔ)言提供了一些模塊間相互連接的方法,一個(gè)大的任務(wù)可以分解成若干模塊,將其中執(zhí)行頻率高的模塊用匯編語(yǔ)言編寫,可以大大提高大型軟件的性能。1.4 程序可見(jiàn)寄存器組80386(含 80386)以上型號(hào)的 CPU能夠處理 32 位數(shù)據(jù),其寄存器長(zhǎng)度是
18、 32 位的,但為了與早期的 8086 等 16 位機(jī) CPU保持良好的兼容性, 80386 以上型號(hào)的 CPU中程序可見(jiàn)寄存器組包括多個(gè) 8 位、16位和 32 位寄存器,如圖 1.3 所示。1通用寄存器808680286 CPU各有 8 個(gè) 16 位通用寄存器 AX、BX、CX、DX、SP、BP、SI、DI。對(duì)于 4 個(gè) 16 位數(shù)據(jù)寄存器 AX、BX、CX、DX,其每個(gè)又可以作為 2 個(gè)獨(dú)立的 8 位寄存器使用,它們被分別命名為 AH、AL、BH、BL、CH、CL、DH、DL。80386 以上型號(hào)的 CPU各有 8 個(gè) 32 位通用寄存器,它們是相應(yīng) 16 位寄存器的擴(kuò)展,被分別命名為
19、EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI。在程序中每個(gè) 8 位、16 位、32 位寄存器都可以獨(dú)立使用。圖 1.3 8086 Pentium CPU程序可見(jiàn)寄存器組67SP、ESP叫做堆棧指針寄存器,其中存放當(dāng)前堆棧段棧頂?shù)钠屏?,它們總是與 SS堆棧段寄存器配合存取堆棧中的數(shù)據(jù)。在實(shí)模式方式下使用 SP,在 80386 以上的保護(hù)模式下使用 ESP。除SP、ESP堆棧指針不能隨意修改、需要慎用外,其他通用寄存器都可以直接在指令中使用,用以存放操作數(shù),這是它們的通用之處。在后邊討論指令系統(tǒng)時(shí),可以看到某些通用寄存器在具體的指令中還有其他用途,例如 EAX、AX、AL(通常
20、分別被稱為 32位、16 位、8 位累加器),它們?cè)诔顺ā⑹M(jìn)制運(yùn)算、輸入輸出指令中有專門用途。另外有些通用寄存器也可以存放地址用以間接尋址內(nèi)存單元,例如在實(shí)模式中 BX、BP、SI、DI 可以作為間接尋址的寄存器, 用以尋址 64KB以內(nèi)的內(nèi)存單元。 在保護(hù)模式中 EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI 可以作為間接尋址的寄存器,用以尋址 4GB以內(nèi)的內(nèi)存單元,詳細(xì)內(nèi)容見(jiàn) 3.1 節(jié)和 6.3 節(jié)。2段寄存器在 IBM PC 機(jī)中存儲(chǔ)器采用分段管理的方法,因此一個(gè)物理地址需要用段基地址和偏移量表示。一個(gè)程序可以由多個(gè)段組成,但對(duì)于 808680286 CPU,由于只
21、有 4 個(gè)段寄存器, 所以在某一時(shí)刻正在運(yùn)行的程序只可以訪問(wèn) 4 個(gè)當(dāng)前段, 而對(duì)于 80386及其以上的計(jì)算機(jī),由于有 6 個(gè)段寄存器,則可以訪問(wèn) 6 個(gè)當(dāng)前段。在實(shí)模式下段寄存器存放當(dāng)前正在運(yùn)行程序的段基地址的高 16 位,在保護(hù)模式下存放當(dāng)前正在運(yùn)行程序的段選擇子,段選擇子用以選擇描述符表中的一個(gè)描述符,描述符描述段的基地址、長(zhǎng)度和訪問(wèn)權(quán)限等, 顯然在保護(hù)模式下段寄存器仍然是選擇一個(gè)內(nèi)存段, 只是不像實(shí)模式那樣直接存放段基址罷了。代碼段寄存器 CS指定當(dāng)前代碼段,代碼段中存放當(dāng)前正在運(yùn)行的程序段。堆棧段寄存器 SS指定當(dāng)前堆棧段,堆棧段是在內(nèi)存開辟的一塊特殊區(qū)域,其中的數(shù)據(jù)訪問(wèn)按照后進(jìn)先
22、出( Last in First out ,LIFO)的原則進(jìn)行,允許插入和刪除的一端叫做棧頂。IBMPC機(jī)中 SP(或 ESP)指向棧頂, SS指向堆棧段基地址。數(shù)據(jù)段寄存器 DS指定當(dāng)前運(yùn)行程序所使用的數(shù)據(jù)段。附加數(shù)據(jù)段寄存器 ES指定當(dāng)前運(yùn)行程序所使用的附加數(shù)據(jù)段。段寄存器 FS和GS只對(duì) 80386以上 CPU有效,它們沒(méi)有對(duì)應(yīng)的中文名稱,用于指定當(dāng)前運(yùn)行程序的另外兩個(gè)存放數(shù)據(jù)的存儲(chǔ)段。雖然 DS、ES、FS、GS(甚至于 CS、SS)所指定的段中都可以存放數(shù)據(jù),但 DS是主數(shù)據(jù)段寄存器,在默認(rèn)情況下使用 DS所指向段的數(shù)據(jù)。若要引用其他段中的數(shù)據(jù),需要顯式地說(shuō)明。3控制寄存器控制寄存
23、器包括指令指針寄存器和標(biāo)志寄存器。在程序中不能直接引用控制寄存器名。1)IP、EIP78IP、EIP 叫做指令指針寄存器, 它總是與 CS段寄存器配合指出下一條要執(zhí)行指令的地址,其中存放偏移量部分。在實(shí)模式方式下使用 IP,在 80386 以上的保護(hù)模式下使用 EIP。2)標(biāo)志寄存器( FLAGS)標(biāo)志寄存器也被稱為狀態(tài)寄存器,由運(yùn)算結(jié)果特征標(biāo)志和控制標(biāo)志組成。 808680286 CPU為 16 位,80386 以上為 32 位。如圖 1.4 所示,可以看出它們完全向下兼容。空白位為將來(lái)保留,暫未定義。圖 1.4 標(biāo)志寄存器(1)運(yùn)算結(jié)果特征標(biāo)志:用于記錄程序中運(yùn)行結(jié)果的特征, 8086Pe
24、ntium CPU 的標(biāo)志寄存器均含有這 6 位標(biāo)志。CF(Carry Flag ):進(jìn)位標(biāo)志,記錄運(yùn)算結(jié)果的最高位向前產(chǎn)生的進(jìn)位或借位。若有進(jìn)位或借位則置 CF=1,否則清零??捎糜跈z測(cè)無(wú)符號(hào)數(shù)二進(jìn)制加減法運(yùn)算時(shí)是否發(fā)生溢出(溢出時(shí) CF=1)。PF(Parity Flag ):奇偶標(biāo)志,記錄運(yùn)算結(jié)果中含 1 的個(gè)數(shù)。若個(gè)數(shù)為偶數(shù)則置 PF=1,否則清零??捎糜跈z測(cè)數(shù)據(jù)傳送過(guò)程中是否發(fā)生錯(cuò)誤。AF(Auxiliary carry Flag ):輔助進(jìn)位標(biāo)志,記錄運(yùn)算結(jié)果最低 4 位(低半字節(jié))向前產(chǎn)生的進(jìn)位或借位。若有進(jìn)位或借位則置 AF=1,否則清零。只有在執(zhí)行十進(jìn)制運(yùn)算指令時(shí)才關(guān)心此位。
25、ZF(Zero Flag ):零標(biāo)志,記錄運(yùn)算結(jié)果是否為零,若結(jié)果為零則置 1,否則清零。SF(Sign Flag ):符號(hào)標(biāo)志,記錄運(yùn)算結(jié)果的符號(hào),若結(jié)果為負(fù)則置 1,否則清零。OF(Overflow Flag ):溢出標(biāo)志,記錄運(yùn)算結(jié)果是否超出了操作數(shù)所能表示的范圍。若超出則置 1,否則清零??捎糜跈z測(cè)帶符號(hào)數(shù)運(yùn)算時(shí)是否發(fā)生溢出。(2)控制標(biāo)志:控制標(biāo)志控制處理器的操作,要通過(guò)專門的指令才能使控制標(biāo)志發(fā)生變化。 以下控制標(biāo)志對(duì) 8086Pentium CPU均有效。IF (Interrupt Flag ):中斷允許標(biāo)志,當(dāng) IF=1 時(shí)允許 CPU響應(yīng)外部可屏蔽中斷請(qǐng)89求(INTR);當(dāng)
26、 IF=0 時(shí)禁止響應(yīng) INTR。IF 的控制只對(duì) INTR起作用。DF(Direction Flag ):方向標(biāo)志,專門服務(wù)于字符串操作指令。當(dāng) DF=1時(shí),表示串操作指令中操作數(shù)地址為自動(dòng)減量, 這樣使得對(duì)字符串的處理是從高地址向低地址方向進(jìn)行;當(dāng) DF=0時(shí),表示串操作指令中操作數(shù)地址為自動(dòng)增量。TF(Trap Flag ):陷阱標(biāo)志,用于程序調(diào)試。當(dāng) TF=1時(shí),CPU處于單步方式; TF=0時(shí),CPU處于連續(xù)方式。狀態(tài)標(biāo)志位的符號(hào)表示見(jiàn)表 1.2 。表 1.2 狀態(tài)標(biāo)志位的符號(hào)表示標(biāo)志位 標(biāo)志為 1 標(biāo)志為 0CF進(jìn)位(有/ 否) CY NCPF奇偶(偶/ 奇) PE POAF半進(jìn)位
27、 AC NAZF全零(是/ 否) ZR NZSF符號(hào)(負(fù)/ 正) NG PLIF 中斷(允許 / 禁止) EI DIDF方向(增量 / 減量) DN UPOF溢出(是/ 否) OV NV 以下控制標(biāo)志只對(duì) 80286以上 CPU有效。IOPL(I/O Privilege Level ):特權(quán)標(biāo)志,占 D13和 D12兩位。當(dāng)在保護(hù)模式下工作時(shí),IOPL指定要求執(zhí)行 I/O 指令的特權(quán)級(jí)。若當(dāng)前任務(wù)的特權(quán)級(jí)比 IOPL高(級(jí)數(shù)越小特權(quán)級(jí)越高,OO級(jí)是最高級(jí)),則執(zhí)行 I/O 指令;否則會(huì)檢查該任務(wù)的 I/O 許可位圖,若位圖中的值為 1 則發(fā)生一個(gè)保護(hù)異常,導(dǎo)致執(zhí)行程序被掛起。NT(Nested
28、 Task):嵌套任務(wù)標(biāo)志,用于保護(hù)模式操作,在執(zhí)行中斷返回指令 IRET時(shí)要測(cè)試 NT值。當(dāng) NT=1時(shí),表示當(dāng)前執(zhí)行的任務(wù)嵌套于另一任務(wù)之中,執(zhí)行完該任務(wù)后要返回到另一任務(wù), IRET指令的執(zhí)行是通過(guò)任務(wù)切換實(shí)現(xiàn)的。當(dāng) NT=0時(shí),用堆棧中保存的值恢復(fù)標(biāo)志寄存器、 代碼段寄存器和指令指針寄存器的內(nèi)容, 以執(zhí)行常規(guī)的 IRET中斷返回操作。 以下控制標(biāo)志只對(duì) 80386以上 CPU有效。RF(Resume Flag):重啟動(dòng)標(biāo)志,該標(biāo)志控制是否接受調(diào)試故障,它與調(diào)試寄存器一起使用。當(dāng) RF=0時(shí)接受, RF=1時(shí)忽略。VM(Virtual 8086 Model ):虛擬方式標(biāo)志,當(dāng) CPU處
29、于保護(hù)模式時(shí),若 VM=1則切換到虛擬方式,以允許執(zhí)行多個(gè) DOS程序,否則 CPU工作在實(shí)模式或保護(hù)模式。 以下控制標(biāo)志只對(duì) 80486 SX以上 CPU有效。AC(Alignment Check ):地址對(duì)齊檢查標(biāo)志,若 AC=1時(shí)進(jìn)行地址對(duì)齊檢查,當(dāng)出現(xiàn)地址不對(duì)齊時(shí)會(huì)引起地址對(duì)齊異常, 只有在特權(quán)級(jí) 3 運(yùn)行的應(yīng)用程序才檢查引起地址對(duì)齊故障。若 AC=0時(shí)不進(jìn)行地址對(duì)齊檢查。只有 80486 SX微處理器使用該位,主要用910來(lái)同它配套的協(xié)處理器 80487 SX 同步工作。所謂地址不對(duì)齊是指以下情形: 1 個(gè)字從奇地址開始,或 1 個(gè)雙字不是從 4 的倍數(shù)的地址開始。 以下控制標(biāo)志只對(duì)
30、 Pentium 以上 CPU有效。ID(Identification ):標(biāo)識(shí)標(biāo)志, 若 ID=1,則表示 Pentium 支持 CPUID指令,CPUID指令給系統(tǒng)提供 Pentium 微處理器有關(guān)版本號(hào)及制造商等信息。VIP(Virtual Interrupt Pending ):虛擬中斷掛起標(biāo)志,與 VIF 配合,用于多任務(wù)環(huán)境下,給操作系統(tǒng)提供虛擬中斷掛起信息。VIF(Virtual Interrupt Flag ):虛擬中斷標(biāo)志,是虛擬方式下中斷標(biāo)志位的映像。1.3 存 儲(chǔ) 器1.3.2 基本概念計(jì)算機(jī)中存儲(chǔ)信息的基本單位是 1 個(gè)二進(jìn)制位,簡(jiǎn)稱位( bit ),可用小寫字母 b
31、表示,一位可存儲(chǔ)一位二進(jìn)制數(shù)。IBM PC機(jī)中常用的數(shù)據(jù)類型如下。字節(jié)(byte ):IBM PC 機(jī)中存取信息的基本單位,可用大寫字母 B 表示。1 個(gè)字節(jié)由 8 位二進(jìn)制數(shù)組成,其位編號(hào)自左至右為 b7、b6、b5、b4、b3、b2、b1、b0。1 個(gè)字節(jié)占用 1 個(gè)存儲(chǔ)單元。字:1 個(gè)字 16 位,其位編號(hào)為 b15b0。1 個(gè)字占用 2 個(gè)存儲(chǔ)單元。雙字:1 個(gè)雙字 32 位,其位編號(hào)為 b31b0。1 個(gè)雙字占用 4 個(gè)存儲(chǔ)單元。四字:1 個(gè)四字 64 位,其位編號(hào)為 b63b0。1 個(gè)四字占用 8 個(gè)存儲(chǔ)單元。為了正確地區(qū)分不同的內(nèi)存單元,給每個(gè)單元分配一個(gè)存儲(chǔ)器地址,地址從 0
32、開始編號(hào),順序遞增 1。在計(jì)算機(jī)中地址用無(wú)符號(hào)二進(jìn)制數(shù)表示, 可簡(jiǎn)寫為十六進(jìn)制數(shù)形式。一個(gè)存儲(chǔ)單元中存放的信息稱為該單元的內(nèi)容。例如 2 號(hào)單元中存放了一個(gè)數(shù)字 8,則表示為:(2)=8。對(duì)于字、雙字、四字?jǐn)?shù)據(jù)類型,由于它們每個(gè)數(shù)據(jù)都要占用多個(gè)單元,訪問(wèn)時(shí)只需給出最低單元的地址號(hào)即可,然后依次存取后續(xù)字節(jié)。注意按照 Intel 公司的習(xí)慣,對(duì)于字、雙字、四字?jǐn)?shù)據(jù)類型,其低地址中存放低位字節(jié)數(shù)據(jù),高地址中存放高位字節(jié)數(shù)據(jù),這就是有些資料中稱為“逆序存放”的含義。例如內(nèi)存現(xiàn)有以下數(shù)據(jù)(后綴 H表示是十六進(jìn)制數(shù))。地址:0 1 2 3 4 5 ,內(nèi)容:12H 34H 45H 67H 89H 0AH
33、,存儲(chǔ)情況如圖 1.5 所示,則對(duì)于不同的數(shù)據(jù)類圖 1.5 存儲(chǔ)單元的地址和內(nèi)容型,從 1 號(hào)單元取到的數(shù)據(jù)是:1011(1)字節(jié)=34H(1)字=4534H(1)雙字=89674534H1.5.2 實(shí)模式存儲(chǔ)器尋址IBMPC機(jī)的存儲(chǔ)器采用分段管理的方法。存儲(chǔ)器采用分段管理后,一個(gè)內(nèi)存單元地址要用段基地址和偏移量?jī)蓚€(gè)邏輯地址來(lái)描述,表示為段地址 : 偏移量,其段地址和偏移量的限定、物理地址的形成要視 CPU工作模式?jīng)Q定。80386以上型號(hào)的 CPU有3 種工作模式:實(shí)模式、保護(hù)模式和虛擬 86 模式。在實(shí)模式下,這些 CPU就相當(dāng)于一個(gè)快速的 8086 處理器, DOS操作系統(tǒng)運(yùn)行在實(shí)模式。計(jì)
34、算機(jī)在啟動(dòng)時(shí),也自動(dòng)進(jìn)入實(shí)模式。保護(hù)模式是它們的主要工作模式,提供了 4GB的段尺寸、多任務(wù)、內(nèi)存分段分頁(yè)管理和特權(quán)級(jí)保護(hù)等功能, Windows和 Linux 等操作系統(tǒng)都需要在保護(hù)模式下運(yùn)行。 為了既能充分發(fā)揮處理器的功能, 又能繼續(xù)運(yùn)行原有的 DOS和DOS應(yīng)用程序(向下兼容),還提供了一種虛擬 86 模式(Virtual86 模式),它實(shí)際上是保護(hù)模式下的一種工作方式。在 V86 模式下,存儲(chǔ)器尋址類似于 8086,可以運(yùn)行 DOS及其應(yīng)用 程序。顯然,實(shí)模式是 80x86 CPU工作的基礎(chǔ),本節(jié)討論實(shí)模式存儲(chǔ)器尋址。 8086和 8088微處理器只能工作在實(shí)模式, 80286以上的微
35、處理器既可以工作在實(shí)模式也可以工作在保護(hù)模式。在實(shí)模式下微處理器只可以尋址最低的 1MB內(nèi)存,即使計(jì)算機(jī)實(shí)際有 64MB或更多的內(nèi)存也是如此。在實(shí)模式下存儲(chǔ)器的物理地址由段基址和偏移量給出。由于 8086、8088、80286 的寄存器均為 16 位,為了與它們兼容,無(wú)論是哪一種微處理器,其段基址必須定位在地址為 16 的整數(shù)倍上,這種段起始邊界通常稱做節(jié)或小段,其特征是:在十六進(jìn)制表示的地址中,最低位為 0。有了這樣的規(guī)定,1MB空間的 20位地址的低 4 位可以不表示出,而高 16 位就可以放入段寄存器了。 同樣由于 16 位長(zhǎng)的原因, 在實(shí)模式下段長(zhǎng)不能超過(guò)64KB,但是對(duì)最小的段并沒(méi)有限制,因此可以定義只包含 1 個(gè)字節(jié)的段。段間位置可以相鄰、不相鄰或重疊。存儲(chǔ)器采用分段管理后,其物理地址的計(jì)算方法為:10H 段基址+
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 腦梗病人溶栓的護(hù)理
- 滅火器使用指示培訓(xùn)
- 生物有趣知識(shí)探秘
- 解讀氣候變遷
- 25春國(guó)家開放大學(xué)《管理英語(yǔ)3》形考任務(wù)(綜合測(cè)試+寫作+學(xué)習(xí)表現(xiàn))參考答案
- 成本會(huì)計(jì)(第六版)期中考核資料 第二組成本期中考核工作任務(wù)
- 業(yè)務(wù)掛靠公司合同范例
- 脖子疼痛康復(fù)護(hù)理方案
- 腦膜炎的護(hù)理查房
- 住建部制式合同范例
- 2023水利工程質(zhì)量檢測(cè)規(guī)程
- 2024年安全員考試題庫(kù)有答案
- pp纖維濾布生產(chǎn)工藝
- 《小升初家長(zhǎng)會(huì)》課件
- 制藥無(wú)菌灌裝操作規(guī)程
- (完整版)年產(chǎn)30萬(wàn)噸甲醇工藝設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 農(nóng)田春耕安全生產(chǎn)培訓(xùn)
- 2023工程量增加補(bǔ)充協(xié)議正規(guī)版
- DN1000供水管搶修施工方案
- A4紙筆記本橫格線條打印模板
- 【大班戶外體育游戲活動(dòng)的問(wèn)題及對(duì)策研究S幼兒園為例7000字(論文)】
評(píng)論
0/150
提交評(píng)論