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