《微型計算機原理》word版.doc
《《微型計算機原理》word版.doc》由會員分享,可在線閱讀,更多相關(guān)《《微型計算機原理》word版.doc(60頁珍藏版)》請在裝配圖網(wǎng)上搜索。
微型計算機原理及應(yīng)用自學(xué)指導(dǎo)書 前 言 《微型計算機原理及應(yīng)用自學(xué)指導(dǎo)書》作為讀者在學(xué)習(xí)本課程時的輔導(dǎo)。編排時與大綱的各章對應(yīng),共分九章:概述, 8086CPU結(jié)構(gòu),8086的指令系統(tǒng),8086CPU的基本時序,半導(dǎo)體存儲器與CPU的接口,輸入與輸出,中斷技術(shù),總線,接口技術(shù)應(yīng)用。這一部分概括了各章的主要問題,并從便于自學(xué)的角度進(jìn)行討論。目的在于幫助讀者澄清某些模糊概念,對《微型計算機原理及應(yīng)用》的基本概念、原理、應(yīng)用加深理解。 第一章 概 述 一、內(nèi)容概述 1.1 計算機和微型計算機的發(fā)展概況 從1946年第一臺計算機ENIAC問世以來,計算機的發(fā)展已經(jīng)歷了四代:即以電子管為主要器件的第一代;以晶體管為主要器件的第二代;以中小規(guī)模集成電路為主要器件的第三代和應(yīng)用大規(guī)模、超大規(guī)模集成電路的第四代電子計算機。第五代智能計算機和第六代神經(jīng)元計算機也正在研制之中。 1.2 微型計算機的特點與應(yīng)用范圍 微處理器具有成本低、靈活性強、可靠性高、開發(fā)時間短以及速度快等特點,因此,微型計算機具有廣泛的應(yīng)用范圍,可概括為數(shù)值計算、數(shù)據(jù)處理和實時控制三個方面。 1.3 微型計算機系統(tǒng)的基本組成 微型計算機系統(tǒng)由兩大部分組成,即硬件和軟件。計算機系統(tǒng)的硬件主要包括微型計算機、外圍設(shè)備、控制面板和電源等。若把微處理器、存儲器、輸入/輸出接口通過系統(tǒng)總線連接起來,就組成了微型計算機。 軟件是各種程序的總稱,由系統(tǒng)軟件和用戶(應(yīng)用)軟件組成,其中系統(tǒng)軟件包括操作系統(tǒng)、文件管理程序、I/O驅(qū)動程序、文本編輯程序等,用戶軟件包括各種用戶程序和用戶程序庫。 1.4 微型計算機的工作原理 當(dāng)今世界上有數(shù)以千萬計的計算機,盡管系列不同,型號各異,但就其工作原理而論,絕大多數(shù)都是基于由匈牙利籍?dāng)?shù)學(xué)家馮諾依曼提出的“存儲程序控制原理”。程序存儲是指描述信息處理的程序必須以目標(biāo)程序的形式連同原始數(shù)據(jù)保存在內(nèi)存儲器中,這是計算機能自動連續(xù)工作曲前提。程序控制是指計算機根據(jù)預(yù)先編好并已存于內(nèi)存的程序自動地、連續(xù)地控制全機工作,直到獲得預(yù)期的結(jié)果的過程。 1.5 典型的微處理器結(jié)構(gòu) 微處理器是一種利用大規(guī)模集成電路工藝制作的器件。它能進(jìn)行算術(shù)、邏輯和控制操作。典型的微處理器內(nèi)部結(jié)構(gòu)主要由寄存器陣列、累加和算術(shù)邏輯單元及控制單元組成。 1.6 十進(jìn)制數(shù)運算 日常生活中實際應(yīng)用的原始數(shù)據(jù)大多是十進(jìn)制數(shù),十進(jìn)制數(shù)不能直接送入計算機中參加運算,必須用二進(jìn)制數(shù)為它編碼,使其成為二一十進(jìn)制碼或稱BCD碼后方能送入計算機。送入計算機的BCD碼或經(jīng)十一二轉(zhuǎn)換程序變?yōu)槎M(jìn)制數(shù)后參加運算,或直接由計算機進(jìn)行二一十進(jìn)制運算(即BCD碼運算)。常見的BCD碼有8421碼、2421碼和余3碼等。 用二進(jìn)制指令進(jìn)行十進(jìn)制運算時,可用DAA接在BCD數(shù)的加法或減法指令的后面,自動按照規(guī)則進(jìn)行“加6修正”或“減6修正”,以調(diào)整累加器的內(nèi)容為正確的BCD形式。值得注意的是, DAA指令不能將任何一個二進(jìn)制數(shù)都轉(zhuǎn)換為BCD數(shù)。 二、教學(xué)要求 通過對電子計算機及微型計算發(fā)展史的了解,將使讀者對這門新興學(xué)科產(chǎn)生興趣,從而增強學(xué)習(xí)該課程的自覺性。與一般計算機相比,微型計算機有自己的特點。因此,要著重理解微處理器的結(jié)構(gòu)、組成、功能與外部連線。對微型計算機及微型計算機系統(tǒng)的定義,對8086微處理器的工作原理和十進(jìn)制數(shù)運算方法必須要有所了解,對一些基本術(shù)語要學(xué)會掌握。 三、重點難點 微型計算機系統(tǒng)的基本組成及其工作原理;典型微處理器的結(jié)構(gòu)和十進(jìn)制數(shù)的運算方法。 四、習(xí)題 1、計算機分那幾類?各有什么特點? 答:傳統(tǒng)上分為三類:大型主機、小型機、微型機。大型主機一般為高性能的并行處理系統(tǒng), 存儲容量大,事物處理能力強,可為眾多用戶提供服務(wù)。小型機具有一定的數(shù)據(jù)處理能力,提供一定用戶規(guī)模的信息服務(wù),作為部門的信息服務(wù)中心。微型機一般指在辦公室或家庭的桌面或可移動的計算系統(tǒng),體積小、價格低、具有工業(yè)化標(biāo)準(zhǔn)體系結(jié)構(gòu),兼容性好。 2、簡述微處理器、微計算機及微計算機系統(tǒng)三個術(shù)語的內(nèi)涵。 答:微處理器是微計算機系統(tǒng)的核心硬件部件,對系統(tǒng)的性能起決定性的影響。微計算機包括微處理器、存儲器、I/O接口電路及系統(tǒng)總線。微計算機系統(tǒng)是在微計算機的基礎(chǔ)上配上相應(yīng)的外部設(shè)備和各種軟件,形成一個完整的、獨立的信息處理系統(tǒng)。 3、80X86微處理器有幾代?各代的名稱是什么? 答:從體系結(jié)構(gòu)上可分為3代: 8080/8085:8位機。 8086/8088/80286:16位機。 80386/80486:32位機。 第二章 8086CPU結(jié)構(gòu) 一、內(nèi)容概述 2.1 存儲器 8086CPU無論在什么樣的工作模式下,都可以尋址1M字節(jié)的存儲空間。在1M的存儲器空間(00000H~FFFFFH)中,各段的起始地址存放在各段寄存器中。16位地址的偏移量由EU產(chǎn)生,從而CPU可以尋址到該段中的每一個存儲單元。 (一) 邏輯地址與實際地址的關(guān)系 所謂邏輯地址是指在程序中出現(xiàn)的地址值,如段寄存器中存放的地址值以及地址的偏移量,這兩個地址值簡單相加不能形成存儲器的實際地址,而是要將段寄存器中存放的地址值左移四位以后,與偏移量相加,這才能得到存儲器的實際地址。 (二) 存儲器分段方法:參閱周細(xì)等編《微型計算機極其應(yīng)用》第二版正文。 (三) 8086CPU與外部存儲器連接 在8086的存儲器空間中,信息是按字節(jié)為單位存放的。在組織8086的存儲器時,1M字節(jié)的存儲空間被分成兩個存儲庫(BANK),其中一個庫與CPU數(shù)據(jù)總線的低字節(jié)D7~Do相連,稱之為低字節(jié)庫;另一個庫則與數(shù)據(jù)總線的高字節(jié)D15~D8相連,稱為高字節(jié)庫。 8086CPU為了實現(xiàn)對這兩個庫的尋址和控制,把地址線A19~A1(該信號應(yīng)是鎖存后的輸出)同時連接到低位庫和高位庫上,地址線A0不參加直接尋址,而是作為低位庫的選擇信號,接到低位庫的端上。當(dāng)A0=0時,選中低位庫,使低位庫所有地址的A0均為0(即為偶地址),而使高位庫所有地址的A0均為1。高位庫的選擇信號由CPU的信號提供,A0與一起對存儲庫進(jìn)行選擇。 2.2 8086微處理器的結(jié)構(gòu) (一)概述 8086共有95條基本指令,其中相當(dāng)一部分指令的長度只有8位,在少數(shù)幾位16位的指令中,只有前8位是操作碼,另外8位則是數(shù)據(jù)的偏移量。由于8086是8080和8085指令系統(tǒng)的擴充型,因此8080和8085的指令碼很容易轉(zhuǎn)換成8086的指令碼。 8086有24種尋址方式,大體和8080相同。但是,由于8086的ALU是16位,因此大大增加了8086的尋址能力。 (二) 8086的內(nèi)部結(jié)構(gòu) 8086CPU由兩個獨立的工作單元組成,即執(zhí)行單元EU和總線接口單元BIU。 EU只負(fù)責(zé)執(zhí)行指令,而BIU則負(fù)責(zé)從存儲器或外部設(shè)備中讀取操作碼和操作數(shù),并將結(jié)果寫入指令所指出的地址中,以完成所有的總線操作。這兩個單元處于并行工作狀態(tài),可以同時進(jìn)行存取和執(zhí)行指令的操作。這樣就可以充分利用各部分電路和總線,提高8086執(zhí)行指令的速度。 BIU中有一個能存放6個字節(jié)的指令隊列,BIU將預(yù)先取來的指令存放在這個隊列中, EU要執(zhí)行的指令一般從這個隊列中取得。在不發(fā)生程序轉(zhuǎn)移的情況下,BIU已經(jīng)將要執(zhí)行的指令提前取來存放在這個指令隊列中了。 2.3 堆棧 堆棧有時也稱為“下推表”或“后進(jìn)先出隊列”。 8086使用堆棧是在存儲器中執(zhí)行的,它的位置由堆棧寄存器SS和堆棧指示器SP規(guī)定。SS給出當(dāng)前堆棧的基址,SP給出了當(dāng)前堆棧的錢頂TOS(TOP OF THE STACK),也就是SP給出了從堆棧段的基址到棧頂?shù)难a償值。在一個系統(tǒng)中,一個堆錢的深度是不受限制的,但是當(dāng)前使用的堆棧最長為64K字節(jié),也就是一個段的長度。另外,堆棧的基址(SS)并不是堆棧的“棧底”。 8086規(guī)定堆棧字為16位,不論是從堆棧中取出一個數(shù),還是向堆棧中壓入一個數(shù),這個數(shù)都必須是一個16位的字,也就是說堆棧的操作都是字操作。 2.4 8086CPU引腳(線)功能 8086CPU芯片是一塊具有40個引腳的集成電路塊。為了節(jié)省引腳,許多引腳都具有雙重定義,即具有復(fù)用功能。有些引腳根據(jù)時序的不同,其功能就有所區(qū)別。在ADo—AD15這16條引腳上,CPU有時送地址信號,有時送數(shù)據(jù)信號。而有些引腳是因CPU的工作模式 (最?。畲竽J?不同而具有不同的功能的。 2.5 8086基本系統(tǒng)概念 (一) 8086總線周期概念 8086是通過它的系統(tǒng)總線與外部邏輯打交道的。8086通過執(zhí)行“總線周期”來傳送數(shù)據(jù)或者取指令。 (二) 8086地址和數(shù)據(jù)總線概念 因為大多數(shù)與8086接口的存儲器設(shè)備和外圍設(shè)備在整個總線周期期間需要有穩(wěn)定的地址,因此在T1期間,在多路轉(zhuǎn)換地址/數(shù)據(jù)總線上出現(xiàn)的地址應(yīng)該鎖存起來。鎖存的地址用來選擇所需的外圍設(shè)備或存儲單元。為了對地址/數(shù)據(jù)總線進(jìn)行分路轉(zhuǎn)換,8086提供了一個允許地址鎖存信號(ALE),利用它可以把地址放入到8282或8283的8位雙穩(wěn)態(tài)鎖存器中去。 2.6 最小方式 在最小方式中,8086的MN/引線接到VCC電源上。最小方式可以用在單板或雙板的單CPU系統(tǒng)中。 在最小方式中,8086的存儲器空間地址為1M字節(jié)。輸入/輸出空間為64K字節(jié)。數(shù)據(jù)總線為16位。8086直接提供總線控制信號(DT/,,ALE,M/,,,)。單個CPU搶占總線機能是通過HOLD和HLDA信號“使能”的。這種機能與現(xiàn)有的DMA控制器相匹配。 2.7 最大方式 在最大方式中,MN/引線接地。最大方式用在多處理機和協(xié)處理機結(jié)構(gòu)中。 在最大方式中,有一個總線控制器。它接收從8086來的控制信號并將其作為輸入。8288對這些輸入進(jìn)行譯碼,產(chǎn)生控制輸出信號。其一些8086的控制信號也有一定的修改,以便為外面邏輯提供更多的信息。 二、教學(xué)基本要求 80X86微處理器是典型的符合一般結(jié)構(gòu)的微處理器,選擇該微處理器作為典型機進(jìn)行教學(xué),有助于理論聯(lián)系實際,也有助于今后的實際工作。因此掌握80X86微處理器的結(jié)構(gòu)、組成、工作原理、各引腳的功能以及其內(nèi)部操作過程,掌握微型機系統(tǒng)存儲器、堆棧的結(jié)構(gòu)特點和8086基本系統(tǒng)的概念,對后面各章的學(xué)習(xí)十分重要。 三、重點難點 存儲器的結(jié)構(gòu)及其實際地址的產(chǎn)生;8086CPU的結(jié)構(gòu)和其總線結(jié)構(gòu)及8086的堆棧結(jié)構(gòu);8086基本系統(tǒng)概念及其最小方式。 四、習(xí)題 1、8086是多少位的微處理器?為什么? 答:8086是16位的微處理器,其內(nèi)部數(shù)據(jù)通路為16位,對外的數(shù)據(jù)總線也是16位。 2、EU與BIU各自的功能是什么?如何協(xié)同工作? 答:EU是執(zhí)行部件,主要的功能是執(zhí)行指令。BIU是總線接口部件,與片外存儲器及I/O接口電路傳輸數(shù)據(jù)。EU經(jīng)過BIU進(jìn)行片外操作數(shù)的訪問,BIU為EU提供將要執(zhí)行的指令。EU與BIU可分別獨立工作,當(dāng)EU不需BIU提供服務(wù)時,BIU可進(jìn)行填充指令隊列的操作。 3、8086/8088與其前一代微處理器8085相比,內(nèi)部操作有什么改進(jìn)? 答:8085為8位機,在執(zhí)行指令過程中,取指令與執(zhí)行執(zhí)令都是串行的。8086/8088由于內(nèi)部有EU和BIU兩個功能部件,可重疊操作,提高了處理器的性能。 4、8086/8088微處理器內(nèi)部有那些寄存器,它們的主要作用是什么? 答:執(zhí)行部件有8個16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、DX一般作為通用數(shù)據(jù)寄存器。SP為堆棧指針存器,BP、DI、SI在間接尋址時作為地址寄存器或變址寄存器??偩€接口部件設(shè)有段寄存器CS、DS、SS、ES和指令指針寄存器IP。段寄存器存放段地址,與偏移地址共同形成存儲器的物理地址。IP的內(nèi)容為下一條將要執(zhí)行指令的偏移地址,與CS共同形成下一條指令的物理地址。 5、8086對存儲器的管理為什么采用分段的辦法? 答:8086是一個16位的結(jié)構(gòu),采用分段管理辦法可形成超過16位的存儲器物理地址,擴大對存儲器的尋址范圍 (1MB,20位地址)。若不用分段方法,16位地址只能尋址64KB空間。 6、在8086中,邏輯地址、偏移地址、物理地址分別指的是什么?具體說明。 答:邏輯地址是在程序中對存儲器地址的一種表示方法,由段地址和段內(nèi)偏移地址兩部分組成,如1234H:0088H。偏移地址是指段內(nèi)某個存儲單元相對該段首地址的差值,是一個16位的二進(jìn)制代碼。物理地址是8086芯片引線送出的20位地址碼,用來指出一個特定的存儲單元。 7、給定一個存放數(shù)據(jù)的內(nèi)存單元的偏移地址是20C0H,(DS)=0C00EH,求出該內(nèi)存單元的物理地址。 答:物理地址:320F8H。 8、8086/8088為什么采用地址/數(shù)據(jù)引線復(fù)用技術(shù)? 答:考慮到芯片成本,8086/8088采用40條引線的封裝結(jié)構(gòu)。40條引線引出8086/8088的所有信號是不夠用的,采用地址/數(shù)據(jù)線復(fù)用引線方法可以解決這一矛盾,從邏輯角度,地址與數(shù)據(jù)信號不會同時出現(xiàn),二者可以分時復(fù)用同一組引線。 9、8086與8088的主要區(qū)別是什么? 答:8086有16條數(shù)據(jù)信號引線,8088只有8條;8086片內(nèi)指令預(yù)取緩沖器深度為6字節(jié),8088只有4字節(jié)。 10、怎樣確定8086的最大或最小工作模式?最大、最小模式產(chǎn)生控制信號的方法有何不同 答:引線MN/MX#的邏輯狀態(tài)決定8086的工作模式,MN/MX#引線接高電平,8086被設(shè)定為最小模式,MN/MX#引線接低電平,8086被設(shè)定為最大模式。 最小模式下的控制信號由相關(guān)引線直接提供;最大模式下控制信號由8288專用芯片譯碼后提供,8288的輸入為8086的S2#~S0#三條狀態(tài)信號引線提供。 11、8086被復(fù)位以后,有關(guān)寄存器的狀態(tài)是什么?微處理器從何處開始執(zhí)行程序? 答:標(biāo)志寄存器、IP、DS、SS、ES和指令隊列置0,CS置全1。處理器從FFFFOH存儲單元取指令并開始執(zhí)行。 12、8086基本總線周期是如何組成的?各狀態(tài)中完成什么基本操作? 答:基本總線周期由4個時鐘(CLK)周期組成,按時間順序定義為T1、T2、T3、T4。在T1期間8086發(fā)出訪問目的地的地址信號和地址鎖存選通信號ALE;T2期間發(fā)出讀寫命令信號RD#、WR#及其它相關(guān)信號;T3期間完成數(shù)據(jù)的訪問;T4結(jié)束該總線周期。 13、結(jié)合8086最小模式下總線操作時序圖,說明ALE、M/IO#、DT/R#、RD#、READY信號的功能。 答:ALE為外部地址鎖存器的選通脈沖,在T1期間輸出;M/IO#確定總線操作的對象是存儲器還是I/O接口電路,在T1輸出;DT/R#為數(shù)據(jù)總線緩沖器的方向控制信號,在T1輸出;RD#為讀命令信號;在T2輸出;READY信號為存儲器或I/O接口“準(zhǔn)備好”信號,在T3期間給出,否則8086要在T3與T4間插入Tw等待狀態(tài)。 14、什么是總線請求?8086在最小工作模式下,有關(guān)總線請求的信號引腳是什么? 答:系統(tǒng)中若存在多個可控制總線的主模塊時,其中之一若要使用總線進(jìn)行數(shù)據(jù)傳輸時,需向系統(tǒng)請求總線的控制權(quán),這就是一個總線請求的過程。8086在最小工作模式下有關(guān)總線請求的信號引腳是HOLD與HLDA。 15、簡述在最小工作模式下,8086如何響應(yīng)一個總線請求? 答:外部總線主控模塊經(jīng)HOLD引線向8086發(fā)出總線請求信號;8086在每個時鐘周期的上升沿采樣HOLD引線;若發(fā)現(xiàn)HOLD=1則在當(dāng)前總線周期結(jié)束時(T4結(jié)束)發(fā)出總線請求的響應(yīng)信號HLDA;8086使地址、數(shù)據(jù)及控制總線進(jìn)入高阻狀態(tài),讓出總線控制權(quán),完成響應(yīng)過程。 16、在基于8086的微計算機系統(tǒng)中,存儲器是如何組織的?是如何與處理器總線連接的?BHE#信號起什么作用? 答:8086為16位處理器,可訪問1M字節(jié)的存儲器空間;1M字節(jié)的存儲器分為兩個512K字節(jié)的存儲體,命名為偶字節(jié)體和奇字節(jié)體;偶體的數(shù)據(jù)線連接D7~D0,“體選”信號接地址線A0;奇體的數(shù)據(jù)線連接D15~D8,“體選”信號接BHE#信號;BHE#信號有效時允許訪問奇體中的高字節(jié)存儲單元,實現(xiàn)8086的低字節(jié)訪問、高字節(jié)訪問及字訪問。 17、“80386是一個32位微處理器”,這句話的涵義主要指的是什么? 答:指80386的數(shù)據(jù)總線為32位,片內(nèi)寄存器和主要功能部件均為32位,片內(nèi)數(shù)據(jù)通路為32位。 18、80X86系列微處理器采取與先前的微處理器兼容的技術(shù)路線,有什么好處?有什么不足? 答:好處是先前開發(fā)的軟件可以在新處理器組成的系統(tǒng)中運行,保護(hù)了軟件投資。缺點是處理器的結(jié)構(gòu)發(fā)展受到兼容的約束,為了保持兼容性增加了硅資源的開銷,增加了結(jié)構(gòu)的復(fù)雜性。 第三章 8086指令系統(tǒng)及匯編語言指令程序簡介 一、內(nèi)容概述 3.1 8089指令系統(tǒng)的基本格式 微處理器只能識別和執(zhí)行以二進(jìn)制代碼形式表示的指令,這種指令代碼稱作機器碼。8086CPU的機器碼指令有幾百條,但它們的基本格式均為1—6個字節(jié)。除了操作碼字節(jié)和尋址方式字節(jié)外,就是單/雙字節(jié)的位移量和單/雙字節(jié)的立即數(shù)。 一條指令具體為基本格式中的哪一種,是由指令的操作碼和尋址方式?jīng)Q定的,具體地說,在指令操作碼中的W、D、S等指示位就是用來指出:指令操作所涉及的是16位數(shù)還是8位數(shù);指令中所需的操作數(shù)是來自某一寄存器還是由全部數(shù)字節(jié)給出;當(dāng)操作數(shù)或操作結(jié)果存于某一寄存器中時,該寄存器是通過操作碼還是尋址方式字節(jié)來指定。 3.2 尋址方式 8086的尋址方式分為兩大類:數(shù)據(jù)存儲器尋址方式和程序存儲器尋址方式。 (一) 數(shù)據(jù)存儲器尋址方式 數(shù)據(jù)存儲器尋址方式實際上是尋找有效地址EA值。在8086微機系統(tǒng)中,知道了有效地址EA后,將其與左移4位后的段寄存器內(nèi)容相加,就可以算出8086所有的存儲器物理地址。因此,在一條指令中,根據(jù)其尋址方式求出了EA后很快就可以找到操作數(shù)所在的物理地址。 (二) 程序存儲器尋址方式 程序存儲器尋址方式要尋找的是當(dāng)前要執(zhí)行的指令所在的存儲器物理地址。這是由于在執(zhí)行JUMP指令或CALL指令后,IP的內(nèi)容須依指令的要求改變,這種改變可能在段內(nèi)范圍進(jìn)行,也可能在段間進(jìn)行。在段內(nèi)或段間改變IP的內(nèi)容時,其轉(zhuǎn)移地址碼可能由指令碼直接提供,也可能由寄存器或存儲單元提供。于是程序存儲器尋址就有了段內(nèi)直接、段內(nèi)間接、段間直接、段間間接四種尋址方式。 (三) 尋址方式字節(jié) 8086CPU有著多種靈活的尋址方式,這些尋址方式是通過尋址方式字節(jié)即指令碼的第二個字節(jié)來指定的。尋址方式字節(jié)的格式為: 其中MOD是用來識別是寄存器尋址方式還是存儲器尋址方式的。當(dāng)MOD=11時,為寄存器尋址方式;MOD≠11時,為存儲器尋址方式。 REG字段與操作碼中的W位一起用來選擇指令操作中所使用的寄存器。 R/M字段與MOD字段一起用來指定尋址方式,它們的組合可以提供24種數(shù)據(jù)存儲器尋址方式以及16種寄存器尋址方式。 (四) 段越界前紹 所謂“段越界前綴”就是一條特定的指令,該指令功能是把數(shù)據(jù)所在的當(dāng)前段寄存器改 為另一個段寄存器,另一個段寄存器由這條特定指令指定?!岸卧浇缜熬Y指令”的格式如下: 其中RR值代表當(dāng)前段被跨越后得訪問數(shù)據(jù)所在段。 RR=00,01,10,11分別表示ES,CS,SS,DS段寄存器。 (五)8086機器語言指令基本格式分析舉例 在了解了8086機器碼指令的基本格式、尋址方式、操作碼的指示位、尋址方式字節(jié)等有關(guān)知識的基礎(chǔ)上就可進(jìn)行機器碼指令的分析和閱讀了。在周細(xì)等編《微型計算機極其應(yīng)用》第二版2.5節(jié)中所舉的例子就是通過對指令各字節(jié)及相應(yīng)位進(jìn)行閱讀分析,進(jìn)一步了解、熟識8086的各種尋址方式以及指令在機器中的執(zhí)行過程,從而達(dá)到了解8086指令系統(tǒng)的目的,以便能夠熟練使用8086匯編語言進(jìn)行程序的編制。 3.3 8086匯編語盲語句及基本語法 在了解了8086指令的機器語言基本格式及尋址方式的基礎(chǔ)上,本節(jié)進(jìn)一步討論8086的匯編語言指令。重點內(nèi)容是了解8086各種匯編語言指令的基本格式、功能以及它們在匯編源程序中的應(yīng)用。在實際應(yīng)用中的一些語法要求也是本節(jié)應(yīng)重點掌握的內(nèi)容。 (一)8086的匯編語言指令語句 8086匯編語言語句有三種:指令語句;偽指令語句及宏指令語句。 對指令語句要求能從原理和應(yīng)用兩個方面去理解和掌握。對某一條具體常用的指令語句 (如MOV等),要能知道操作數(shù)屬什么類型、操作數(shù)的尋址方式、實際物理地址是什么,具體常用指令功能以及某幾條指令的特殊用途也是應(yīng)該掌握的。同時由以上分析也應(yīng)能知道該指令機器碼指令格式中對應(yīng)的指令操作碼中指示位及尋址方式字節(jié)中MOD字段信息的具體內(nèi)容。 對偽指令語句,要求了解常用的、與匯編源程序密切相關(guān)的偽指令功能,同時在閱讀匯編源程序時,能對偽指令進(jìn)行分析;在編寫匯編源程序時能正常運用相應(yīng)的偽指令。 對宏指令語句,本節(jié)僅要求知道其定義,其余內(nèi)容不作要求。 (二) 匯編語言的有關(guān)基本規(guī)定及格式 對匯編語言源程序的編寫,8086是有嚴(yán)格的規(guī)定和基本格式的。8086匯編源程序由兩大部分組成,一部分是用偽指令按照一定的格式和語法要求寫出的匯編語句,另一部分是用指令語句編寫的CPU可執(zhí)行的程序段。用偽指令編寫的匯編語句是用來幫助匯編程序在對源程序中CPU可執(zhí)行程序段進(jìn)行匯編時能對指令語句中的變量正確賦值,或留出指定的存儲區(qū),等等,以便正確匯編,產(chǎn)生出機器可執(zhí)行的目標(biāo)程序。進(jìn)行匯編語言源程序設(shè)計時,有關(guān)偽指令語句、指令語句所有的基本規(guī)定及格式都是應(yīng)該掌握的內(nèi)容。 二、教學(xué)要求 掌握8086匯編語言程序設(shè)計的基本方法; 匯編語言程序有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)及分支結(jié)構(gòu)。要求能了解三種基本結(jié)構(gòu)的基本形式,能閱讀分析并編寫出簡單的程序。 掌握轉(zhuǎn)移指令的各條語句格式、功能及應(yīng)用。在此基礎(chǔ)上,能編寫一般的簡單分支程序,并能結(jié)合尋址方式中所介紹的程序地址尋址方式內(nèi)容,從原理的角度理解轉(zhuǎn)移指令在機器中是如何進(jìn)行操作的。 三、重點難點 在使用簡單轉(zhuǎn)移指令時,應(yīng)注意TEST、AND、OR、XOR幾條指令的使用。它們的使用可提供相應(yīng)標(biāo)志位的狀態(tài),作為判斷轉(zhuǎn)移分支的測試條件。 在測試分支條件時,還常使用移位和循環(huán)移位指令,通過這類指令的執(zhí)行對相應(yīng)標(biāo)志位的影響來判斷轉(zhuǎn)移分支條件是否滿足,以便確定程序的執(zhí)行方向。 對于使用比較指令進(jìn)行分支程序轉(zhuǎn)移判斷,要求能分析閱讀相應(yīng)匯編源程序即可,不要求編寫這類程序。 對于循環(huán)程序,學(xué)習(xí)重點應(yīng)為熟悉了解循環(huán)程序的結(jié)構(gòu),能分析一段循環(huán)程序的四個組成部分各由哪些語句組成,從而能通過逐條指令的分析說明程序?qū)⑼瓿傻墓δ堋M瑫r,也能在分析程序的基礎(chǔ)上畫出程序的流程圖。 對于多重循環(huán),只需了解其概念,不作更深的要求。 應(yīng)了解子程序的概念、子程序的調(diào)用和返回、子程序的定義格式及現(xiàn)場的保護(hù),以及參數(shù)在主、子程序之間的傳遞方式等內(nèi)容。 對于子程序,要求能在程序中對其進(jìn)行分析,了解某子程序經(jīng)主程序調(diào)用后使主程序?qū)崿F(xiàn)的功能。 四、習(xí)題 1、根據(jù)下列要求編寫一個匯編語言程序:: 代碼段的段名為COD_SG 數(shù)據(jù)段的段名為DAT_SG 堆棧段的段名為STK_SG 變量HIGH_DAT所包含的數(shù)據(jù)為95 將變量HIGH_DAT裝入寄存器AH,BH和DL 程序運行的入口地址為START 答案: DAT_SG SEGEMNT HIGH_DAT DB 95 DAT_SG ENDS; STK_SG SEGMENT DW 64 DUP(?) STK_SG ENDS; COD_SG SEGMENT MAIN PROC FAR ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG START: MOV AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AH MOV DL, AH MOV AH, 4CH INT 21H MAIN ENDP COD_SG ENDS END START 2、指出下列程序中的錯誤: STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG END CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END 答案: 改正后: STAKSG SEGMENT DB 100 DUP(?) STAKSG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ASSUME CS: CDSEG, DS: DTSEG, SS: STAKSG START: MOV AX, DTSEG MOV DS, AX MOV AL, 34H ADD AL, 4FH MOV DATA1, AL MOV AH, 4CH INT 21H MAIN ENDP CDSEG ENDS END S 3、將下列文件類型填入空格: (1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map 編輯程序輸出的文件有______________________________________; 匯編程序輸出的文件有______________________________________; 連接程序輸出的文件有______________________________________。 答案: 編輯程序輸出文件: (4) 匯編程序輸出文件: (1), (3), (5) 連接程序輸出文件: (2), (6) 4、下列標(biāo)號為什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM 答案: 非法標(biāo)號: (1)因為‘.’只允許是標(biāo)號的第一個字符 (2)第一個字符不能為數(shù)字 (3)不允許出現(xiàn)‘-’ (4)不能是保留字,如助記符 (5)不能有空格 5、下面的數(shù)據(jù)項定義了多少個字節(jié)? DATA_1 DB 6 DUP(4 DUP(0FFH)) 答案: 24字節(jié) 6、對于下面兩個數(shù)據(jù)段,偏移地址為10H和11H的兩個字節(jié)中的數(shù)據(jù)是一樣的嗎?為什么? DTSEG SEGMENT | DTSEG SEGMENT ORG 10H | ORG 10H DATA1 DB 72H | DATA1 DW 7204H DB 04H | DTSEG ENDS DTSEG ENDS | 答案:不一樣. 分別是72H, 04H和04H, 72H. 存儲字時低8位存在低字節(jié),高8位存在高字節(jié). 7、下面的數(shù)據(jù)項設(shè)置了多少個字節(jié)? (1) ASC_DATA DB ‘1234’ (2) HEX_DATA DB 1234H 答案: (1) 設(shè)置了4個字節(jié) (2) 設(shè)置了2個字節(jié) 8、執(zhí)行下列指令后, AX寄存器中的內(nèi)容是什么? TABLE DW 10,20,30,40,50 ENTRY DW 3 MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 答案:(AX)=40 9、指出下列指令的錯誤: (1) MOV AH,BX (2) MOV [SI],[BX] (3) MOV AX,[SI][DI] (4) MOV AX,[BX][BP] (5) MOV [BX],ES:AX (6) MOV BYTE PTR[BX],1000 (7) MOV AX,OFFSET [SI] (8) MOV CS,AX (9) MOV DS,BP 答案: (1) 源、目的字長不一致 (2) 源、目的不能同時為存貯器尋址方式 (3) 基址變址方式不能有 SI和DI的組合 (4) 基址變址方式不能有 BX和BP的組合 (5) 在8086尋址方式中,AX不能作為基址寄存器使用,而且源、目的不能同時為存貯器尋址方式 (6) 1000超出一個字節(jié)的表數(shù)范圍 (7) OFFSET只用于簡單變量,應(yīng)去掉 (8) CS不能作為目的寄存器 (9) 段地址不能直接送入數(shù)據(jù)段寄存器 10、DATA SEGMENT TABLE_ADDR DW 1234H DATA ENDS MOV BX, TABLE_ADDR LEA BX, TABLE_ADDR 請寫出上述兩條指令執(zhí)行后, BX寄存器中的內(nèi)容。 答案: MOV BX,TABLE_ADDR ; 執(zhí)行后(BX)=1234H LEA BX,TABLE_ADDR ; 執(zhí)行后(BX)=OFFSET TABLE_ADDR 11、 設(shè)(DS)=1B00H, (ES)=2B00H, 有關(guān)存儲器地址及其內(nèi)容如右圖 所示,請用兩條指令把X裝入AX寄存器。 1B00:2000H 8000H 1B00:2002H 2B00H 2B00:8000H X 答案:LES BX, [2000H] MOV AX, ES: [BX] 12、變量DATAX和DATAY定義如下: DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 按下述要求寫出指令序列: DATAX和DATAY中的兩個字?jǐn)?shù)據(jù)相加, 和存放在DATAY和DATAY+2中。 DATAX和DATAY中的兩個雙字?jǐn)?shù)據(jù)相加, 和存放在DATAY開始的字單元中。 DATAX和DATAY兩個字?jǐn)?shù)據(jù)相乘(用MUL)。 DATAX和DATAY兩個雙字?jǐn)?shù)據(jù)相乘(用MUL)。 DATAX除以23(用DIV)。 DATAX雙字除以字DATAY(用DIV)。 答案: (1) MOV AX, DATAX ADD AX, DATAY MOV BX, DATAX+2 ADD BX, DATAY+2 MOV DATAY, AX MOV DATAY+2, BX (2) MOV AX, DATAX ADD DATAY, AX MOV AX, DATAX+2 ADC DATAY+2, AX (3) MOV AX, DATAX MUL DATAY MOV DATAY,AX MOV DATAY+2,DX (4) MOV AX,WORD PTR DATAX MOV BX,WORD PTR DATAY MUL BX MOV RESULT,AX MOV RESULT+2,DX MOV AX,WORD PTR DATAX MOV AX,WORD PTR DATAY+2 MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY+2 MUL BX ADD RESULT+4,AX ADC RESULT+6,DX (5) MOV AX, DATAX MOV BL, 23 DIV BL MOV BL,AH MOV AH, 0 MOV DATAY, AX ;存放商 MOV AL,BL MOV DATAY+2, AX ;存放余數(shù) (6) MOV AX, DATAX MOV DX, DATAX+2 DIV DATAY MOV DATAY, AX MOV DATAY+2, DX 13、試分析下面的程序段完成什么操作? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 答案: 將DX: AX中的雙字左移4位(乘16) 14、用其他指令完成和下列指令一樣的功能: (1) REP MOVSB (2) REP LODSB (3) REP STOSB (4) REP SCASB 答案: LOOP1: MOV AL,BYTE PTR [SI] MOV ES:BYTE PTR [DI], AL INC SI 或: DEC SI INC DI 或: DEC DI LOOP LOOP1 (2) LOOP1: MOV AL, BYTE PTR [SI] INC SI 或: DEC SI LOOP LOOP1 (3) LOOP1: MOV ES:BYTE PTR [DI], AL INC DI 或: DEC DI LOOP LOOP1 (4) LOOP1: CMP AL,ES:BYTE PTR [DI] JE EXIT INC DI 或: DEC DI LOOP LOOP1 EXIT: 15、編寫程序段, 比較兩個5字節(jié)的字符串OLDS和NEWS, 如果OLDS字符串與NEWS不同, 則執(zhí)行NEW_LESS, 否則順序執(zhí)行程序。 答案: LEA SI, OLDS LEA DI, NEWS MOV CX, 5 CLD REPZ CMPSB JNZ NEW_LESS 16、假定AX和BX中的內(nèi)容為帶符號數(shù), CX和DX中的內(nèi)容為無符號數(shù), 請用比較指令和條件轉(zhuǎn)移指令實現(xiàn)以下判斷: 若DX的值超過CX的值,則轉(zhuǎn)去執(zhí)行EXCEED 若BX的值大于AX的值,則轉(zhuǎn)去執(zhí)行EXCEED CX中的值為0嗎? 若是則轉(zhuǎn)去執(zhí)行ZERO BX的值與AX的值相減, 會產(chǎn)生溢出嗎? 若溢出則轉(zhuǎn)OVERFLOW 若BX的值小于AX的值,則轉(zhuǎn)去執(zhí)行EQ_SMA 若DX的值低于CX的值,則轉(zhuǎn)去執(zhí)行EQ_SMA 答案: (1) CMP DX, CX JA EXCEED (2) CMP BX, AX JG EXCEED (3) CMP CX, 0 JE ZERO (4) SUB BX, AX JO OVERFLOW (5) CMP BX, AX JL EQ_SMA (6) CMP DX, CX JB EQ_SMA 17、假如在程序的括號中分別填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20 試說明在三種情況下, 當(dāng)程序執(zhí)行完后, AX、BX、CX、DX四個寄存器的內(nèi)容分別是什么? TITLE EXLOOP.COM CODESG SEGMENT ASSUME CS:CODESG, DS:CODESG. SS:CODESG ORG 100H BEGIN: MOV AX,01 MOV BX,02 MOV DX,03 MOV CX,04 L20: INC AX ADD BX,AX SHR DX,1 ( ) RET CODESG ENDS END BEGIN 答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0 (2)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1 (3)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0 18、變量N1和N2均為2字節(jié)的非壓縮BCD數(shù)碼,請寫出計算N1與N2之差的指令序列。 答案: MOV AX, 0 MOV AL, N1+1 SUB AL, N2+1 AAS MOV DL, AL MOV AL, N1 SBB AL, N2 AAS MOV DH, AL 19、有兩個3位的ASCII數(shù)串ASC1和ASC2定義如下: ASC1 DB ‘578’ ASC2 DB ‘694’ ASC3 DB ‘0000’ 請編寫程序計算ASC3←ASC1+ASC2。 答案: CLC MOV CX, 3 MOV BX, 2 BACK: MOV AL, ASC1[BX] ADC AL, ASC2[BX] AAA OR ASC3[BX+1], AL DEC BX LOOP BACK RCL CX, 1 OR ASC3[BX], CL 20、假設(shè)(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 請寫出下列各條指令單獨執(zhí)行完后, 有關(guān)寄存器及存儲單元的內(nèi)容, 若影響條件碼請給出條件碼SF、ZF、OF、CF的值。 (1) SBB AX,BX (2) CMP AX,WORD PTR[SI+0FA0H] (3) MUL BYTE PTR[BX] (4) AAM (5) DIV BH (6) SAR AX,CL (7) XOR AX,0FFE7H (8) REP STOSB (9) JMP WORD PYR[BX] (10) XCHG AX,ES:[BX+SI] 答案: (1) (AX)=0F05FH, (SF)=1, (ZF)=0, (OF)=0, (CF)=1 (2) (SF)=1, (ZF)=0, (OF)=1, (CF)=1 (3) (AX)=0240H, (OF)=1, (CF)=1 (4) (AX)=0906H, (SF)=0, (ZF)=0 (5) (AX)=20ACH (6) (AX)=0103H, (CF)=0 (7) (AX)=0DF87H, (CF)=0, (OF)=0, (SF)=1, (ZF)=0 (8) (23000H)~(23004H)=60H, 不影響標(biāo)志位 (9) (IP)=0A006H, 不影響標(biāo)志位 (10) (AX)=00B0H, (25060)=2060H, 不影響標(biāo)志位 21、試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。 答案: abc: mov ah,1 int 21h cmp al,’a’ jb stop cmp al,’z’ ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp abc stop: ret 22、編寫程序,比較兩個字符串STRING1和STRING2所含字符是否完全相同,若相同則顯示“MATCH”,若不同則顯示“NO MATCH”。 答案: datarea segment string1 db ‘a(chǎn)sfioa’ string2 db ‘xcviyoaf’ mess1 db ‘MATCH’,’$’ mess2 db ‘NO MATCH’,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax begin: mov cx, string2-string1 mov bx, mess1-string2 cmp bx,cx jnz dispno lea dx,addr lea si,string1 lea di,string2 repe cmpsb jne dispno mov ah,9 lea dx,mess1 int 21h ret dispno: mov ah, 9 lea dx, mess2 int 21h ret main endp prognam ends end start 23、試編寫程序,要求從鍵盤輸入3個16進(jìn)制數(shù),并根據(jù)對3個數(shù)的比較顯示如下信息: (1)如果3個數(shù)都不相等則顯示0; (2)如果3個數(shù)中有2個數(shù)相等則顯示2; (3)如果3個數(shù)都相等則顯示3。 答案: data segment array dw 3 dup(?) data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov cx,3 lea si,array begin: push cx mov cl,4 mov di,4 mov dl, ‘ ‘ mov ah,02 int 21h mov dx,0 input: mov ah,01 int 21h and al,0fh shl dx,cl or dl,al dec di jne input mov [si],dx add si,2 pop cx loop begin comp: lea si,array mov dl,0 mov ax,[si] mov bx,[si+2] cmp ax,bx jne next1 add dl,2 next1: cmp [si+4],ax jne next2 add dx,2 next2: cmp [si+4],bx jne num add dl,2 num: cmp dx,3 jl disp mov dl,3 disp: mov ah,2 add dl,30h int 21h ret main endp code ends end start 24、已知整數(shù)變量A和B,試編寫完成下述操作的程序: (1)若兩個數(shù)中有一個是奇數(shù),則將該奇數(shù)存入A中,偶數(shù)存入B中; (2)若兩個數(shù)均為奇數(shù),則兩數(shù)分別加1,并存回原變量; (3)若兩個數(shù)均為偶數(shù),則兩變量不變。 答案: dseg segment a dw ? b dw ? dseg ends cseg segment main proc far assume cs:cseg,ds:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a mov bx,b xor ax,bx test ax,0001 jz class test bx,0001 jz exit xchg bx,a mov b,bx jmp exit class: test bx,0001 jz exit inc b inc a exit: ret main endp cseg ends end start 25、把0~10010之間的30個數(shù),存入首地址為GRAD的字?jǐn)?shù)組中,GRAD+i表示學(xué)號為i+1的學(xué)生成績。另一個數(shù)組RANK是30個學(xué)生的名次表,其中RANK+I的內(nèi)容是學(xué)號為i+1的學(xué)生的名次。試編寫程序,根據(jù)GRAD中的學(xué)生成績,將排列的名次填入RANK數(shù)組中(提示:一個學(xué)生的名次等于成績高于這個學(xué)生的人數(shù)加1)。 答案: dseg segment grade dw 30 dup(?) rank dw 30 dup(?) dseg ends cseg segment main proc far assume cs:cseg, ds:dseg, es:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin: mov di,0 mov cx,30 loop1: push cx mov cx,30 mov si,0 mov ax,grade[di] mov dx,0 loop2: cmp grade[si],ax jbe go_on inc dx go_on: add si,2 loop loop2 pop cx inc dx mov rank[di],dx sdd di,2 loop loop1 ret main endp cseg ends end start 26、分析下列程序的功能,寫出堆棧最滿時各單元的地址及內(nèi)容。 SSEG SEGMENT ‘STACK’ AT 1000H ; 堆棧的段地址為1000H DW 128 DUP(?) TOS LABEL WORD SSEG ENDS ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DSEG SEGMENT DW 32 DUP(?) DSEG ENDS ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG, DS:DSEG,SS:SSEG START:- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微型計算機原理 微型計算機 原理 word
鏈接地址:http://www.820124.com/p-8922796.html