本書將微機原理、匯編語言、微機接口技術有機地融為一體。從整體入手, 先介紹微機系統的概念, 使讀者對微機系統組織有深入的了解; 之后詳細介紹控制和使用微機的軟件編程, 即匯編語言編程; 最后以常用可編程接口芯片的結構和應用為主介紹了微機硬件接口技術。在本書的編寫過程中把以上三個模塊逐漸融合滲透, 融會貫穿在一起, 避免了知識點間銜接不順暢, 也符合讀者知識結構地構建, 強化學習者對微機原理以及軟、硬件應用能力的培養。
本書為普通高等教育“十二五”*規劃教材,普通高等教育“十一五”*規劃教材,是匯編語言與接口技術經典教材,內容全面,特色突出,被多所高校用作教材。
本書共10章,以16位微處理器8088/8086為主線,介紹微處理器的結構、工作原理、指令系統等,同時兼顧32位以上微處理器80386、80486以及Pentium系列微處理器的相關內容。匯編語言以MASM 6.0為主,同時介紹了與MASM 5.X的區別,詳細講解了基于80x86的匯編程序設計方法。書中詳細介紹了傳統的接口技術,如并行、串行、定時、DMA、中斷、模/數及數/模等接口技術。考慮到信息類相關專業學生的學習需求,本書專門增加了一章介紹存儲器技術。第10章介紹*新的高速串行接口USB接口。
本書將微機原理、匯編語言、微機接口技術有機地融為一體,既適合課堂教學,又能緊跟*新技術,拓寬學生的知識面。本書條理清楚,深入淺出,有豐富的實例,便于自學。
本書可以作為高等學校本科信息類相關專業和計算機專業學生的教材或參考書,也可以供廣大工程技術人員參考。
微機原理、匯編語言和接口技術是各個高等學校計算機專業或信息類專業學生的專業基礎課程。匯編語言的顯著特點是可以直接控制硬件并充分發揮計算機硬件的功能,對于編寫高性能系統軟件和應用軟件具有不可忽視的作用,微機接口技術則側重計算機硬件的結構和I/O系統的組成。
隨著高校教學改革的深入,將匯編語言與微機接口技術結合起來,作為一門計算機基礎專業課程的教學方法已經為許多高校采用。為了滿足在新形勢下計算機與信息類專業課程建設和教學內容改革的需求,作者在多年匯編語言、微機接口技術教學實踐的基礎上編寫了本教材,將微機原理、匯編語言程序設計、微機接口技術融為一體,比較完整地介紹了微型計算機技術,適合更多讀者的需求。
在前3版教材的基礎上,本書內容進行了很大的調整和改進,主要在以下幾個方面。
(1) 第1章作為全書的概括和匯編語言與接口技術的基礎,涵蓋了基本知識的支撐要點,如微型計算機的概念、微機系統總線等,使讀者對微型計算機的整體結構有一個完整的認識。另外,把第3版教材中接口技術的概念、輸入輸出傳輸控制方式等接口基礎知識分離出來單獨作為第6章,這樣使知識結構更加合理。
(2) 第2章從8088/8086 CPU入手,首先詳細分析了16位微處理器的功能結構、寄存器組、工作方式、總線操作及時序等。之后作為知識的提升,介紹了32位以上微處理器的結構、寄存器組等相應的知識點。這樣修改使教材層次分明,由淺入深,也符合讀者的知識結構構成規律。另外增加了Pentium系列微處理器及多核微處理器的發展概況。
(3) 第3章和第4章是匯編語言程序設計部分。考慮到從8086到80386以上至Pentium 4,只有16位到32位的區別,其80%以上的指令完全相同,因此,本書以16位微處理器的指令系統為基礎,擴展到32位微處理器匯編指令。另外,在知識點的組織上,把指令系統的講解融合在匯編語言編程設計中,這樣避免了單獨講解大量指令的枯燥,也使匯編語言程序設計的講解更源自基礎。例如,把分支結構程序設計和條件判斷指令放在一起講解,使知識緊密銜接,使讀者學習循序漸進。另外,為了滿足實際需要,在第4章增加了匯編語言與高級語言混合編程的內容。
(4) 刪減了第3版的軟件接口技術一章,把本章中關于DOS和BIOS的接口調用的內容作為第4章中的一節內容,保證了內容的完整。
(5) 修改了第5章存儲器技術的部分內容。對于不同專業的學生,任課教師可以選擇本章的有關內容講解。
(6) 修改了第10章的內容,在重點介紹USB接口概念和基本方法的基礎上,強化了USB開發技術的應用。
(7) 在第7~9章增加更多的工程應用實例,使讀者更接近實際應用,體現教材的實用性。
(8) 修改了前3版教材中難理解的概念,用更通俗易懂的語言描述。修正了前3版教材中已經發現的疏漏。
全書共10章,第1章和第2章是理論基礎部分,內容包括微型計算機概述,接口技術及數據傳輸控制方式、系統總線、80x86微處理器原理。第3章和第4章是匯編語言部分,內容主要包括80x86的指令系統、尋址方式、匯編語言程序設計。第5章主要介紹存儲器的基本概念,存儲器基本單元的構建,由存儲單元構成存儲陣列進而構成存儲器的方法,以及存儲器容量的擴展方法,并介紹了Cache和虛擬存儲技術。第6章是輸入輸出接口及數據傳輸控制方式,主要介紹接口的概念、接口技術基礎知識以及CPU控制數據傳輸的控制方式。第7章是串并行接口技術,主要內容包括定時/計數器、串并行接口的基本原理及實際應用。第8章是中斷和DMA技術,主要內容包括中斷和DMA的原理及中斷控制器和DMA控制器及其應用。第9章是模擬接口技術,主要包括A/D和D/A轉換技術及典型的芯片應用。第10章是高速串行總線,介紹了*新的高速串行接口USB技術。
本書第1版由王讓定、陳金兒、葉富樂、史旭華共同編寫,其中第1、2章由史旭華執筆,第3、4章由葉富樂執筆,第5章由王讓定執筆,其余各章由陳金兒執筆,王讓定負責全書的統稿。本書第2版的修訂由參加課程建設的朱瑩執筆,王讓定負責全書的統稿。本書第3版的修訂又加入了一線教師石守東和錢江波兩位老師的辛勤工作。
通過幾年的教學實踐,根據國內相關教師的建議,在第1版、第2版和第3版的基礎上,在本書作者和相關老師的共同參與下,由王讓定和朱瑩執筆全面修訂了本書內容。王讓定負責全書的統稿。
本書的出版凝聚了許多同行的智慧和心血,這里非常感謝課程建設前期付出心血的陳金兒、葉富樂和史旭華老師,感謝清華大學出版社張民編輯。本書的出版得到了寧波大學計算機科學與技術國家特色專業的支持,得到了浙江省高校重點教材建設項目的支持,得到了浙江省“十二五”“十三五”特色專業建設的支持,也得到了寧波市服務型重點建設專業的支持,在此一并表示感謝。
本書配有相應的教學電子資源,讀者可登錄清華大學出版社網站下載。另外,作者為第4版教材編寫了配套的《匯編語言與接口技術(第4版)知識精要與實踐》。由于計算機技術的飛速發展,新的理論和技術層出不窮,本書難以囊括計算機技術的*新發展變化。同時,書中難免有不足和不妥之處,懇請同行和讀者不吝批評指正。歡迎讀者,尤其是使用本書的教師和學生,共同探討相關教學內容改革、教材內容建設以及教學方法等問題。
作者
2016年11月
王讓定,博士,寧波大學教授、博士生導師,浙江省高校中青年學科帶頭人,“計算機科學與技術”國家特色專業建設點負責人,浙江省高等學校省級教學團隊負責人,寧波大學教學名師,校計算機科學與技術教學團隊負責人。現兼任中國體視學學會理事,中國計算機學會開放系統專委會委員,中國電子學會通信學會多媒體信息安全專委會委員,浙江省高校計算機教學研究會副理事長,浙江省計算機應用與教育學會教育委員會副主任,浙江省物聯網專業委員會副主任,浙江省高校計算機教學指導委員會委員,浙江省大學生軟件設計競賽組委會成員。主持了4項國家自然基金項目,獲省科技進步獎2項、浙江省高校科研成果獎3項,獲國家發明專利授權6項。在發表學術或教學研究論文80多篇,其中被SCI/EI/ISTP檢索的論文有30多篇,主編國家“十一五”規劃教材1部,國家“十二五”規劃教材1部。
第1章微型計算機概述/1
1.1微型計算機概念/1
1.2微處理器的產生和發展/2
1.3計算機系統組成/4
1.3.1硬件系統/5
1.3.2軟件/6
1.4系統總線/8
1.4.1概述/8
1.4.2常用的微機系統總線技術/9
小結/10
習題/11第2章80x86微處理器/12
2.18086/8088微處理器/12
2.1.1內部結構/12
2.1.2寄存器組/15
2.1.3引腳信號及功能/18
2.1.4工作模式/22
2.1.5總線操作和時序/25
2.232位微處理器/32
2.2.1內部結構/32
2.2.2寄存器組/35
2.2.3引腳信號及功能/39
2.2.4工作模式/43
2.2.5總線操作/44
2.3Pentium微處理器/44
2.3.1Pentium微處理器的主要特點/45
2.3.2Pentium的發展/46
2.480x86存儲器組織/47
2.4.18086/8088的存儲器組織/472.4.232位微處理器存儲器系統簡介/50
小結/51
習題/51第3章80x86指令系統和尋址方式/53
3.18086指令系統概述/53
3.1.1數據類型/53
3.1.280x86指令的基本組成/55
3.28086/8088的尋址方式和指令系統/56
3.2.18086/8088的尋址方式/56
3.2.28086/8088的常用指令/61
3.380386的尋址方式和指令系統/78
3.3.180386的尋址方式/78
3.3.280386指令系統/80
3.480486/Pentium微處理器新增指令/90
3.4.180486引入的有關指令/90
3.4.2Pentium引入的有關指令/91
小結/92
習題/93第4章80x86匯編語言程序設計/97
4.1MASM宏匯編語句結構及開發過程/98
4.1.1匯編語言程序的語句類型和格式/98
4.1.2匯編語言的程序格式/99
4.1.3匯編語言程序的開發過程/101
4.2MASM匯編語言表達式和運算符/107
4.2.1常量、運算符及表達式/107
4.2.2變量及其屬性/111
4.3程序段的定義和屬性/119
4.3.1DOS的程序結構/119
4.3.2簡化段定義的格式及其偽指令/120
4.3.3完整段定義的格式及其偽指令/125
4.4復雜數據結構/130
4.4.1結構/130
4.4.2記錄/132
4.5宏匯編/133
4.5.1宏的定義和調用/134
4.5.2宏的參數/136
4.5.3與宏有關的偽指令/138
4.6常用的系統功能調用/140
4.6.1DOS的系統調用/140
4.6.2BIOS中斷調用及實現/144
4.6.3Windows系統功能調用/147
4.7匯編語言順序程序設計/149
4.8匯編語言分支程序設計/150
4.8.1無條件轉移指令和條件轉移指令/150
4.8.2分支結構程序設計實例/153
4.9匯編語言循環程序設計/157
4.9.1循環指令/157
4.9.2循環程序設計實例/158
4.10串處理程序設計/162
4.10.18086/8088串操作指令/162
4.10.280386位串操作指令/165
4.10.3串操作程序設計實例/165
4.11子程序設計/167
4.11.1子程序的定義與調用/167
4.11.2子程序的參數傳遞/173
4.11.3子程序的嵌套、遞歸與重入/177
4.11.4子程序的應用/179
4.12高級匯編語言程序設計/185
4.12.1條件控制偽指令/185
4.12.2循環控制偽指令/187
4.12.3過程聲明和過程調用偽指令/190
4.13匯編語言與C語言混合編程/193
4.13.1C語言程序內嵌匯編指令/193
4.13.2匯編語言與C語言模塊連接/196
小結/201
習題/202第5章存儲器技術/209
5.1存儲器概述/209
5.1.1存儲器的發展及分類/209
5.1.2存儲器主要技術指標/212
5.1.3存儲器的基本結構框架/213
5.1.4存儲系統的層次結構/213
5.2半導體隨機存取存儲器/215
5.2.1SRAM存儲器/215
5.2.2DRAM存儲器/217
5.2.3只讀存儲器/220
5.2.4新型存儲器芯片/222
5.2.5主存容量的擴展/225
5.3高速緩沖存儲技術/230
5.3.1Cache的基本原理/230
5.3.2Cache的管理/231
5.4虛擬存儲技術/233
小結/235
習題/236第6章輸入輸出接口及數據傳輸控制方式/237
6.1接口概述/237
6.1.1接口的功能/237
6.1.2I/O端口及其編址方式/239
6.1.3I/O端口地址譯碼/239
6.1.4I/O操作指令/241
6.2CPU與外設數據的傳輸控制方式/242
6.2.1程序控制方式/242
6.2.2中斷控制方式/245
6.2.3DMA方式/246
6.2.4數據傳送控制方式的發展/246
小結/247
習題/247第7章串并行接口技術/248
7.1定時/計數器8253/8254/248
7.1.18253/8254的內部結構和引腳/248
7.1.28253/8254的工作方式/250
7.1.38253/8254的編程/254
7.1.48253/8254的應用實例/257
7.2并行通信接口8255A/259
7.2.18255A的內部結構和引腳/259
7.2.28255A的工作方式/260
7.2.38255A的編程/264
7.2.48255A的應用實例/266
7.3串行通信基礎/269
7.3.1串行通信基本概念/270
7.3.2串行通信接口標準/271
7.4串行通信芯片8251A/275
7.4.18251A的內部結構和引腳/275
7.4.28251A的工作方式/278
7.4.38251A的編程/279
7.4.48251A的應用實例/284
小結/285
習題/286第8章中斷和DMA技術/288
8.180x86中斷系統/288
8.1.1中斷操作和中斷系統/288
8.1.2中斷調用與返回指令/289
8.1.38086中斷系統/290
8.1.480486的中斷/293
8.2中斷控制器8259A/294
8.2.18259A的內部結構和引腳/295
8.2.28259A的中斷過程/297
8.2.38259A的工作方式/298
8.2.48259A的初始化和控制命令字/301
8.2.58259A的應用實例/308
8.3DMA控制器8237A/310
8.3.18237A的結構和外部引腳/311
8.3.28237A的工作原理/314
8.3.38237A的內部寄存器和命令/316
8.3.48237A的編程和應用/321
小結/322
習題/323第9章模擬接口技術/325
9.1模擬輸入輸出系統/325
9.1.1微機與控制系統接口/325
9.1.2模擬輸入通道/326
9.1.3模擬輸出通道/327
9.2數/模轉換芯片及接口/327
9.2.1數/模轉換原理/327
9.2.28位數/模轉換器DAC0832/330
9.2.312位數/模轉換器AD567/333
9.3模/數轉換芯片及接口/336
9.3.1模/數轉換原理/336
9.3.28位模/數轉換器ADC0809/341
9.3.312位模/數轉換器AD574/343
9.4A/D、D/A器件的選擇/346
小結/348
習題/349第10章高速串行總線/350
10.1USB簡介/350
10.2USB體系結構/353
10.3USB通信協議/357
10.3.1通信模型/357
10.3.2數據格式/358
10.3.3事務處理/360
10.3.4數據傳輸模式/362
10.4PC的USB應用及開發/363
10.4.1PDIUSBD12芯片特點/365
10.4.2PDIUSBD12芯片引腳/366
10.4.3PDIUSBD12的典型連接/367
10.4.4固件程序設計/367
10.4.5驅動程序設計/372
10.4.6應用程序設計/372
小結/374
習題/374
參考文獻/375
第3章80x86指令系統和尋址方式
指令是計算機能接受的軟件工作者命令的*小工作單元,它*終是由計算機內的電器元件狀態來體現的,這一狀態為譯碼器所識別,并經一定時間周期付諸實施,這種指令稱為機器指令。一條機器指令應包含兩部分內容: 一是要給出此指令要完成何種操作,這部分稱為指令操作碼;二是要給出參與操作的對象是什么,此部分稱為操作數,在指令中可以直接給出操作數的值,或者操作數存放在何處,操作的結果應送往何處等信息。處理器可根據指令字中給出的地址信息求出存放操作數的地址——稱為有效地址,然后對存放在有效地址中的操作數進行存取操作。指令中關于如何求出存放操作數有效地址的方法稱為操作數的尋址方式。計算機按照指令給出的尋址方式求出操作數有效地址和存取操作數的過程稱為尋址操作。計算機的指令系統就是指該計算機能夠執行的全部指令的集合。
本章首先介紹16位微處理器8086/8088的常用指令和尋址方式,在此基礎上以80386為對象講述32位微處理器的指令系統和尋址方式。對80x86的控制轉移類指令、串操作與重復前綴指令、子程序調用與返回指令以及中斷調用與返回指令的講解將穿插在第4章的匯編語言程序設計以及第8章的中斷和DMA技術中介紹,其目的就是為了使學習者更好地理解和應用這些指令。
本章的主要內容如下:
80386的尋址方式和指令系統。
80486/Pentium微處理器新增指令。
3.18086指令系統概述〖1〗3.1.1數據類型計算機中的數是用二進制表示的,數的符號也是用二進制表示的。把一個數連同其符號在機器中的表示加以數值化稱為機器數,實際上機器數是將符號“數字化”所得到的數。計算機執行指令過程中需要處理各種類型的機器數,可處理的數據類型有7種。
1. 無符號二進制數
無符號二進制數是指不帶符號位的一個字節、字或雙字的二進制數。2. 帶符號二進制數
帶符號二進制數有正、負之分,均以補碼形式表示。補碼由符號位加數值兩部分組成。帶符號數的*高位表示符號位,*高位為0表示為正,*高位為1表示為負。正數的補碼和原碼相同,負數的補碼是符號位保持不變(即為1),其余各位按位取反,再在*末位加1。
3. BCD碼
BCD碼是用二進制數的形式表示的十進制數。計算機中BCD碼有兩種,分別是非壓縮BCD碼和壓縮BCD碼兩種。前者用8位二進制數表示一位十進制數,那么一個字節能表示的十進制數的范圍是0~9;后者用4位二進制數表示一位十進制數,那么一個字節能表示的十進制數的范圍是0~99。例如,17的非壓縮BCD碼是0000000100000111B,即0107H;壓縮BCD碼是00010111B,即17H。
4. 定點數和浮點數
在計算機中,針對小數點的處理有兩種表示方法,分別是定點數表示法和浮點數表示法。
1) 定點數表示法
定點數表示法就是小數點固定在某個位置上。在定點計算機中,一般將小數點定在*高位(即純小數)或將小數點定在*低位(即純整數)。
2) 浮點數表示法
浮點表示法就是小數點的位置不固定。浮點數在計算機中通常的表示形式為“2的正/負階碼次方×尾數”,其中階碼是一個正整數,尾數是一個小數,尾數的區間為\[0.5,1\],如果尾數不在此區間,則要進行規格化。規格化通過尾數左右移、階碼加減完成,其規則是: 尾數左移一次,階碼減1,尾數右移一次,階碼加1。
5. 串數據
計算機可以處理的串數據有以下幾種:
位串,一串連續的二進制數。
字節串,一串連續的字節。
字串,一串連續的字。
雙字串,一串連續的雙字。
6. ASCII碼數據
ASCII(American Standard Code for Information Interchange,美國信息交換標準碼)是一種字符數據的常用表示方法。包括ASCII碼字符、ASCII碼數和ASCII控制符等。
7. 指針類數據
指針類數據包括近程指針和遠程指針。前者為16位的偏移量,用于段內尋址、段內數據訪問或轉移;后者由16位段值和16位的偏移量組成,用于段間尋址、段間數據訪問或段間轉移。
另外,在8086/8088處理機中,為了達到數據結構的*大靈活性和*有效地使用內存,字數據不必定位于偶數地址,即允許不按2 的倍數邊界對齊。但是,對齊的字數據可以一次傳送,而未對齊的字數據則需要兩次傳送。為了獲得*佳性能,一般將字操作對齊于偶地址。
3.1.280x86指令的基本組成
80x86的匯編指令由操作碼和操作數兩部分組成。操作碼是指令的操作命令,操作數是指令的操作對象。匯編指令*后要翻譯成機器指令。
1. 指令的操作碼
80x86的機器指令的操作碼(OP)采用二進制代碼表示本指令所執行的操作。在大多數指令的操作碼中,常用某位指示圖3.18086操作碼格式
某些具體操作信息。圖3.1所示的8086操作碼含有3個特征位,分別為W位、D位和S位。它們的含義如下:
(1) W位是字操作標志位。當W=1時,表示當前指令進行字操作;當W=0時,表示當前指令進行字節操作。
(2) D位是對目標操作數進行寄存器尋址的標志。對于雙操作數指令(立即數指令和串操作指令除外),其中一個操作數必定由寄存器指出。這時,寄存器名通過后面的REG域指出,此外,要用D位指出寄存器所尋址的是源操作數還是目標操作數。如D=1,則寄存器所尋址的是目標操作數;如D=0,則寄存器所尋址的是源操作數。
(3) S位是符號擴展位。一個8位補碼可以擴展為16位補碼。使所有高位等于低位字節的*高有效位(即符號位),這種擴展叫符號擴展,在加法指令、減法指令和比較指令中,S位和W位結合起來指出各種情況。例如,S=0,W=0時,為8位操作數;S=0,W=1時,為16位操作數。
2. 機器指令格式
80x86的機器指令為1~6B。一般用指令的*個字節或者頭兩個字節表示指令的操作碼和尋址方式,通常稱為操作碼域。操作碼指出了執行這條指令時CPU要做什么操作,尋址方式則表示執行指令時所用的操作數的來源。圖3.2給出了8086指令格式。
圖3.28086指令格式
緊隨在操作碼域后的字節一般稱操作數域。至于操作數域屬于圖3.2中的哪一種情況,要由指令前半部分的操作碼和尋址方式確定。這里有幾點需要指出:
(1) 一條指令可以包含一個操作數,也可以包含一個以上的操作數。具有一個操作數的指令稱為單操作數指令,單操作數指令中的操作數可能由指令本身提供,也可能由指令隱含地指出。
(2) 若位移量或立即數為16位,那么在指令代碼中,將低位字節放在前面,高位字節放在后面。
(3) 80x86指令系統中大多數指令的操作碼安排在*個字節,但有幾條指令是特殊的,其指令中的*個字節不但包含操作碼成分,而且還隱含地指出了寄存器名,從而整個指令只占一個字節,成為單字節指令。這些指令字節數*少,執行速度*快,用得也*頻繁。
3. 指令的執行時間
指令執行時間取決于時鐘周期長短和執行指令所需要的時鐘周期數。如果涉及內存操作,那么執行一條指令的時間為基本執行時間加上計算有效地址所需要的時間。
8086的總線部件和執行部件是并行工作的,因此在計算指令的基本執行時間時都假定要執行的指令已經預先放在指令隊列中,也就是說,沒有計算取指時間。有些指令在執行過程中要多次訪問內存,因此,訪問內存的次數也是考慮指令執行總時間的重要因素。
可見,執行一條指令所需的總時間為基本執行時間、計算有效地址的時間和為了讀取操作數和存放操作結果需訪問內存的時間之和。
3.28086/ 8088的尋址方式和指令系統〖1〗3.2.18086/8088的尋址方式在計算機的存儲器系統中存儲著兩類信息,一是數據,二是程序。這里所說的程序就是指令序列。8086/8088的尋址方式包括程序尋址方式和數據尋址方式。數據尋址方式是指獲取指令所需的操作數或操作數地址的方式。程序的尋址方式是指在程序中出現轉移和調用時的程序定位方式。
1. 數據尋址方式
數據尋址方式就是尋找參加運算的操作數的方式。80x86指令中所需的操作數來自以下3個方面。
(1) 操作數包含在指令中。在取指令的同時,操作數也隨之得到,這種操作數稱為立即數。
(2) 操作數包含在CPU的某個內部寄存器中,這種操作數稱為寄存器操作數。
(3) 操作數包含在存儲器中,這種操作數稱為存儲器操作數。
存儲器操作數存放在內存單元中,在80x86微機系統中,任何內存單元的地址均由段基址和偏移地址(又稱偏移量)組成,段基址由段寄存器提供,而偏移地址由以下4個基本部分組成。
(1) 基址,8086/8088系統的基址寄存器為BX和BP。
(2) 變址,8086/8088系統的變址寄存器為SI和DI。
(3) 比例因子,采用1、2、4或8幾種不同的比例因子。8086/8088系統中比例因子為1。
(4) 位移量,即相對于某個存儲單元的偏移量。
這4個部分稱為偏移地址的四元素。一般將這四元素按某種計算方法組合形成的偏移地址稱為有效地址(Effective Address,EA)。它們的組合和計算方法為
有效地址=基址+變址×比例因子+位移量
根據80x86系統的存儲器組織方式,指令中不能使用實際地址(即物理地址),而只使用邏輯地址或稱為操作數的線性地址,因此在求得有效地址后,可由有效地址和段首址形成邏輯地址。這4種元素可優化組合出9種存儲器尋址方式。圖3.3給出這4種元素的優化組合的尋址計算方法。
圖3.38086/8088的操作數尋址方式1) 立即尋址,操作數為立即數
8086/8088指令系統中,有一部分指令所用的8位或16位操作數由指令機器碼提供,這種方式稱為立即尋址方式,即操作數直接包含在指令機器碼中,它緊跟在操作碼的后面,與操作碼一起放在代碼區域中。
例3.10AH,AL=7FH
MOVAL,5H ;AX←5H立即尋址方式主要用于給寄存器或存儲單元賦初值。因為操作數可以從指令中直接取得,不需要運行總線周期,所以立即數尋址方式的顯著特點是執行速度快。
2) 寄存器尋址,操作數為寄存器操作數
寄存器尋址是指操作數包含在CPU內部的寄存器中。對于16位操作數,寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP,而對于8位操作數,寄存器可以為AH、AL、BH、BL、CH、CL、DH、DL。寄存器尋址的指令本身存放在存儲器的代碼段,而操作數則在CPU寄存器中。由于指令執行過程中不用訪問存儲器,因此執行速度很快。
寄存器尋址可以進行16位操作數操作,也可進行8位操作數操作。
例3.2MOVAX,BX
MOVAH,AL3) 存儲器尋址,操作數為存儲器操作數
(1) 直接尋址。
直接尋址方式是在指令的操作碼后面直接給出操作數的16位偏移地址,這個偏移地址也稱有效地址(EA)。該有效地址與指令的操作碼一起存放在內存的代碼段,也是低8位在前,高8位在后。操作數隱含數據段操作,存放在內存的數據段(DS)區域中,在給定的16位有效地址的地方。
例3.33000H×10H+2000H=32000H
直接尋址一般多用于存取某個存儲單元中的操作數,例如從一個存儲單元取操作數,或者將一個操作數存入某個存儲單元。
(2) 寄存器間接尋址。
寄存器間接尋址方式是指令中的操作數存放在存儲器中,存儲單元的有效地址由寄存器指出,這些寄存器可以是BX、BP、SI、DI之一,即有效地址EA=基址寄存器的內容或變址寄存器的內容,對寄存器指向的存儲單元進行數據操作。這些用來存放存儲器操作數偏移地址的寄存器稱為地址指針。
下面分別以BX、SI、DI進行寄存器間接尋址(BX、SI、DI作為地址指針)的方式與以BP進行寄存器間接尋址(BP作為地址指針)的方式為例進行說明。在以BX、SI、DI進行寄存器間接尋址時,隱含的數據段寄存器為DS;而在以BP進行寄存器間接尋址時,隱含的數據段寄存器為SS。
例3.4DS×16+BX
MOVBX,\[SI\] ;物理地址=DS×16+SI
MOV\[DI\],DX ;物理地址=DS×16+DI例3.5SS×16+BP無論用BX、SI、DI或者BP作為間接寄存器,都允許段超越,即也可以使用上面所提到的約定情況以外的其他段寄存器。
例3.6ES×16+BX
MOVDS:\[BP\],DX ;物理地址=DS×16+BP(3) 相對寄存器尋址。
相對寄存器尋址的有效地址EA=基址寄存器的內容或變址寄存器的內容±16位或8位位移量。以BX、SI、DI進行寄存器間接尋址(BX、SI、DI作為地址指針)的方式,隱含的段寄存器為數據段寄存器DS;而以BP進行寄存器間接尋址(BP作為地址指針)的方式,隱含的段寄存器為堆棧段寄存器SS。
……