《微型計(jì)算機(jī)原理》word版.doc
《《微型計(jì)算機(jī)原理》word版.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微型計(jì)算機(jī)原理》word版.doc(60頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
微型計(jì)算機(jī)原理及應(yīng)用自學(xué)指導(dǎo)書 前 言 《微型計(jì)算機(jī)原理及應(yīng)用自學(xué)指導(dǎo)書》作為讀者在學(xué)習(xí)本課程時(shí)的輔導(dǎo)。編排時(shí)與大綱的各章對(duì)應(yīng),共分九章:概述, 8086CPU結(jié)構(gòu),8086的指令系統(tǒng),8086CPU的基本時(shí)序,半導(dǎo)體存儲(chǔ)器與CPU的接口,輸入與輸出,中斷技術(shù),總線,接口技術(shù)應(yīng)用。這一部分概括了各章的主要問(wèn)題,并從便于自學(xué)的角度進(jìn)行討論。目的在于幫助讀者澄清某些模糊概念,對(duì)《微型計(jì)算機(jī)原理及應(yīng)用》的基本概念、原理、應(yīng)用加深理解。 第一章 概 述 一、內(nèi)容概述 1.1 計(jì)算機(jī)和微型計(jì)算機(jī)的發(fā)展概況 從1946年第一臺(tái)計(jì)算機(jī)ENIAC問(wèn)世以來(lái),計(jì)算機(jī)的發(fā)展已經(jīng)歷了四代:即以電子管為主要器件的第一代;以晶體管為主要器件的第二代;以中小規(guī)模集成電路為主要器件的第三代和應(yīng)用大規(guī)模、超大規(guī)模集成電路的第四代電子計(jì)算機(jī)。第五代智能計(jì)算機(jī)和第六代神經(jīng)元計(jì)算機(jī)也正在研制之中。 1.2 微型計(jì)算機(jī)的特點(diǎn)與應(yīng)用范圍 微處理器具有成本低、靈活性強(qiáng)、可靠性高、開發(fā)時(shí)間短以及速度快等特點(diǎn),因此,微型計(jì)算機(jī)具有廣泛的應(yīng)用范圍,可概括為數(shù)值計(jì)算、數(shù)據(jù)處理和實(shí)時(shí)控制三個(gè)方面。 1.3 微型計(jì)算機(jī)系統(tǒng)的基本組成 微型計(jì)算機(jī)系統(tǒng)由兩大部分組成,即硬件和軟件。計(jì)算機(jī)系統(tǒng)的硬件主要包括微型計(jì)算機(jī)、外圍設(shè)備、控制面板和電源等。若把微處理器、存儲(chǔ)器、輸入/輸出接口通過(guò)系統(tǒng)總線連接起來(lái),就組成了微型計(jì)算機(jī)。 軟件是各種程序的總稱,由系統(tǒng)軟件和用戶(應(yīng)用)軟件組成,其中系統(tǒng)軟件包括操作系統(tǒng)、文件管理程序、I/O驅(qū)動(dòng)程序、文本編輯程序等,用戶軟件包括各種用戶程序和用戶程序庫(kù)。 1.4 微型計(jì)算機(jī)的工作原理 當(dāng)今世界上有數(shù)以千萬(wàn)計(jì)的計(jì)算機(jī),盡管系列不同,型號(hào)各異,但就其工作原理而論,絕大多數(shù)都是基于由匈牙利籍?dāng)?shù)學(xué)家馮諾依曼提出的“存儲(chǔ)程序控制原理”。程序存儲(chǔ)是指描述信息處理的程序必須以目標(biāo)程序的形式連同原始數(shù)據(jù)保存在內(nèi)存儲(chǔ)器中,這是計(jì)算機(jī)能自動(dòng)連續(xù)工作曲前提。程序控制是指計(jì)算機(jī)根據(jù)預(yù)先編好并已存于內(nèi)存的程序自動(dòng)地、連續(xù)地控制全機(jī)工作,直到獲得預(yù)期的結(jié)果的過(guò)程。 1.5 典型的微處理器結(jié)構(gòu) 微處理器是一種利用大規(guī)模集成電路工藝制作的器件。它能進(jìn)行算術(shù)、邏輯和控制操作。典型的微處理器內(nèi)部結(jié)構(gòu)主要由寄存器陣列、累加和算術(shù)邏輯單元及控制單元組成。 1.6 十進(jìn)制數(shù)運(yùn)算 日常生活中實(shí)際應(yīng)用的原始數(shù)據(jù)大多是十進(jìn)制數(shù),十進(jìn)制數(shù)不能直接送入計(jì)算機(jī)中參加運(yùn)算,必須用二進(jìn)制數(shù)為它編碼,使其成為二一十進(jìn)制碼或稱BCD碼后方能送入計(jì)算機(jī)。送入計(jì)算機(jī)的BCD碼或經(jīng)十一二轉(zhuǎn)換程序變?yōu)槎M(jìn)制數(shù)后參加運(yùn)算,或直接由計(jì)算機(jī)進(jìn)行二一十進(jìn)制運(yùn)算(即BCD碼運(yùn)算)。常見的BCD碼有8421碼、2421碼和余3碼等。 用二進(jìn)制指令進(jìn)行十進(jìn)制運(yùn)算時(shí),可用DAA接在BCD數(shù)的加法或減法指令的后面,自動(dòng)按照規(guī)則進(jìn)行“加6修正”或“減6修正”,以調(diào)整累加器的內(nèi)容為正確的BCD形式。值得注意的是, DAA指令不能將任何一個(gè)二進(jìn)制數(shù)都轉(zhuǎn)換為BCD數(shù)。 二、教學(xué)要求 通過(guò)對(duì)電子計(jì)算機(jī)及微型計(jì)算發(fā)展史的了解,將使讀者對(duì)這門新興學(xué)科產(chǎn)生興趣,從而增強(qiáng)學(xué)習(xí)該課程的自覺(jué)性。與一般計(jì)算機(jī)相比,微型計(jì)算機(jī)有自己的特點(diǎn)。因此,要著重理解微處理器的結(jié)構(gòu)、組成、功能與外部連線。對(duì)微型計(jì)算機(jī)及微型計(jì)算機(jī)系統(tǒng)的定義,對(duì)8086微處理器的工作原理和十進(jìn)制數(shù)運(yùn)算方法必須要有所了解,對(duì)一些基本術(shù)語(yǔ)要學(xué)會(huì)掌握。 三、重點(diǎn)難點(diǎn) 微型計(jì)算機(jī)系統(tǒng)的基本組成及其工作原理;典型微處理器的結(jié)構(gòu)和十進(jìn)制數(shù)的運(yùn)算方法。 四、習(xí)題 1、計(jì)算機(jī)分那幾類?各有什么特點(diǎn)? 答:傳統(tǒng)上分為三類:大型主機(jī)、小型機(jī)、微型機(jī)。大型主機(jī)一般為高性能的并行處理系統(tǒng), 存儲(chǔ)容量大,事物處理能力強(qiáng),可為眾多用戶提供服務(wù)。小型機(jī)具有一定的數(shù)據(jù)處理能力,提供一定用戶規(guī)模的信息服務(wù),作為部門的信息服務(wù)中心。微型機(jī)一般指在辦公室或家庭的桌面或可移動(dòng)的計(jì)算系統(tǒng),體積小、價(jià)格低、具有工業(yè)化標(biāo)準(zhǔn)體系結(jié)構(gòu),兼容性好。 2、簡(jiǎn)述微處理器、微計(jì)算機(jī)及微計(jì)算機(jī)系統(tǒng)三個(gè)術(shù)語(yǔ)的內(nèi)涵。 答:微處理器是微計(jì)算機(jī)系統(tǒng)的核心硬件部件,對(duì)系統(tǒng)的性能起決定性的影響。微計(jì)算機(jī)包括微處理器、存儲(chǔ)器、I/O接口電路及系統(tǒng)總線。微計(jì)算機(jī)系統(tǒng)是在微計(jì)算機(jī)的基礎(chǔ)上配上相應(yīng)的外部設(shè)備和各種軟件,形成一個(gè)完整的、獨(dú)立的信息處理系統(tǒng)。 3、80X86微處理器有幾代?各代的名稱是什么? 答:從體系結(jié)構(gòu)上可分為3代: 8080/8085:8位機(jī)。 8086/8088/80286:16位機(jī)。 80386/80486:32位機(jī)。 第二章 8086CPU結(jié)構(gòu) 一、內(nèi)容概述 2.1 存儲(chǔ)器 8086CPU無(wú)論在什么樣的工作模式下,都可以尋址1M字節(jié)的存儲(chǔ)空間。在1M的存儲(chǔ)器空間(00000H~FFFFFH)中,各段的起始地址存放在各段寄存器中。16位地址的偏移量由EU產(chǎn)生,從而CPU可以尋址到該段中的每一個(gè)存儲(chǔ)單元。 (一) 邏輯地址與實(shí)際地址的關(guān)系 所謂邏輯地址是指在程序中出現(xiàn)的地址值,如段寄存器中存放的地址值以及地址的偏移量,這兩個(gè)地址值簡(jiǎn)單相加不能形成存儲(chǔ)器的實(shí)際地址,而是要將段寄存器中存放的地址值左移四位以后,與偏移量相加,這才能得到存儲(chǔ)器的實(shí)際地址。 (二) 存儲(chǔ)器分段方法:參閱周細(xì)等編《微型計(jì)算機(jī)極其應(yīng)用》第二版正文。 (三) 8086CPU與外部存儲(chǔ)器連接 在8086的存儲(chǔ)器空間中,信息是按字節(jié)為單位存放的。在組織8086的存儲(chǔ)器時(shí),1M字節(jié)的存儲(chǔ)空間被分成兩個(gè)存儲(chǔ)庫(kù)(BANK),其中一個(gè)庫(kù)與CPU數(shù)據(jù)總線的低字節(jié)D7~Do相連,稱之為低字節(jié)庫(kù);另一個(gè)庫(kù)則與數(shù)據(jù)總線的高字節(jié)D15~D8相連,稱為高字節(jié)庫(kù)。 8086CPU為了實(shí)現(xiàn)對(duì)這兩個(gè)庫(kù)的尋址和控制,把地址線A19~A1(該信號(hào)應(yīng)是鎖存后的輸出)同時(shí)連接到低位庫(kù)和高位庫(kù)上,地址線A0不參加直接尋址,而是作為低位庫(kù)的選擇信號(hào),接到低位庫(kù)的端上。當(dāng)A0=0時(shí),選中低位庫(kù),使低位庫(kù)所有地址的A0均為0(即為偶地址),而使高位庫(kù)所有地址的A0均為1。高位庫(kù)的選擇信號(hào)由CPU的信號(hào)提供,A0與一起對(duì)存儲(chǔ)庫(kù)進(jìn)行選擇。 2.2 8086微處理器的結(jié)構(gòu) (一)概述 8086共有95條基本指令,其中相當(dāng)一部分指令的長(zhǎng)度只有8位,在少數(shù)幾位16位的指令中,只有前8位是操作碼,另外8位則是數(shù)據(jù)的偏移量。由于8086是8080和8085指令系統(tǒng)的擴(kuò)充型,因此8080和8085的指令碼很容易轉(zhuǎn)換成8086的指令碼。 8086有24種尋址方式,大體和8080相同。但是,由于8086的ALU是16位,因此大大增加了8086的尋址能力。 (二) 8086的內(nèi)部結(jié)構(gòu) 8086CPU由兩個(gè)獨(dú)立的工作單元組成,即執(zhí)行單元EU和總線接口單元BIU。 EU只負(fù)責(zé)執(zhí)行指令,而BIU則負(fù)責(zé)從存儲(chǔ)器或外部設(shè)備中讀取操作碼和操作數(shù),并將結(jié)果寫入指令所指出的地址中,以完成所有的總線操作。這兩個(gè)單元處于并行工作狀態(tài),可以同時(shí)進(jìn)行存取和執(zhí)行指令的操作。這樣就可以充分利用各部分電路和總線,提高8086執(zhí)行指令的速度。 BIU中有一個(gè)能存放6個(gè)字節(jié)的指令隊(duì)列,BIU將預(yù)先取來(lái)的指令存放在這個(gè)隊(duì)列中, EU要執(zhí)行的指令一般從這個(gè)隊(duì)列中取得。在不發(fā)生程序轉(zhuǎn)移的情況下,BIU已經(jīng)將要執(zhí)行的指令提前取來(lái)存放在這個(gè)指令隊(duì)列中了。 2.3 堆棧 堆棧有時(shí)也稱為“下推表”或“后進(jìn)先出隊(duì)列”。 8086使用堆棧是在存儲(chǔ)器中執(zhí)行的,它的位置由堆棧寄存器SS和堆棧指示器SP規(guī)定。SS給出當(dāng)前堆棧的基址,SP給出了當(dāng)前堆棧的錢頂TOS(TOP OF THE STACK),也就是SP給出了從堆棧段的基址到棧頂?shù)难a(bǔ)償值。在一個(gè)系統(tǒng)中,一個(gè)堆錢的深度是不受限制的,但是當(dāng)前使用的堆棧最長(zhǎng)為64K字節(jié),也就是一個(gè)段的長(zhǎng)度。另外,堆棧的基址(SS)并不是堆棧的“棧底”。 8086規(guī)定堆棧字為16位,不論是從堆棧中取出一個(gè)數(shù),還是向堆棧中壓入一個(gè)數(shù),這個(gè)數(shù)都必須是一個(gè)16位的字,也就是說(shuō)堆棧的操作都是字操作。 2.4 8086CPU引腳(線)功能 8086CPU芯片是一塊具有40個(gè)引腳的集成電路塊。為了節(jié)省引腳,許多引腳都具有雙重定義,即具有復(fù)用功能。有些引腳根據(jù)時(shí)序的不同,其功能就有所區(qū)別。在ADo—AD15這16條引腳上,CPU有時(shí)送地址信號(hào),有時(shí)送數(shù)據(jù)信號(hào)。而有些引腳是因CPU的工作模式 (最?。畲竽J?不同而具有不同的功能的。 2.5 8086基本系統(tǒng)概念 (一) 8086總線周期概念 8086是通過(guò)它的系統(tǒng)總線與外部邏輯打交道的。8086通過(guò)執(zhí)行“總線周期”來(lái)傳送數(shù)據(jù)或者取指令。 (二) 8086地址和數(shù)據(jù)總線概念 因?yàn)榇蠖鄶?shù)與8086接口的存儲(chǔ)器設(shè)備和外圍設(shè)備在整個(gè)總線周期期間需要有穩(wěn)定的地址,因此在T1期間,在多路轉(zhuǎn)換地址/數(shù)據(jù)總線上出現(xiàn)的地址應(yīng)該鎖存起來(lái)。鎖存的地址用來(lái)選擇所需的外圍設(shè)備或存儲(chǔ)單元。為了對(duì)地址/數(shù)據(jù)總線進(jìn)行分路轉(zhuǎn)換,8086提供了一個(gè)允許地址鎖存信號(hào)(ALE),利用它可以把地址放入到8282或8283的8位雙穩(wěn)態(tài)鎖存器中去。 2.6 最小方式 在最小方式中,8086的MN/引線接到VCC電源上。最小方式可以用在單板或雙板的單CPU系統(tǒng)中。 在最小方式中,8086的存儲(chǔ)器空間地址為1M字節(jié)。輸入/輸出空間為64K字節(jié)。數(shù)據(jù)總線為16位。8086直接提供總線控制信號(hào)(DT/,,ALE,M/,,,)。單個(gè)CPU搶占總線機(jī)能是通過(guò)HOLD和HLDA信號(hào)“使能”的。這種機(jī)能與現(xiàn)有的DMA控制器相匹配。 2.7 最大方式 在最大方式中,MN/引線接地。最大方式用在多處理機(jī)和協(xié)處理機(jī)結(jié)構(gòu)中。 在最大方式中,有一個(gè)總線控制器。它接收從8086來(lái)的控制信號(hào)并將其作為輸入。8288對(duì)這些輸入進(jìn)行譯碼,產(chǎn)生控制輸出信號(hào)。其一些8086的控制信號(hào)也有一定的修改,以便為外面邏輯提供更多的信息。 二、教學(xué)基本要求 80X86微處理器是典型的符合一般結(jié)構(gòu)的微處理器,選擇該微處理器作為典型機(jī)進(jìn)行教學(xué),有助于理論聯(lián)系實(shí)際,也有助于今后的實(shí)際工作。因此掌握80X86微處理器的結(jié)構(gòu)、組成、工作原理、各引腳的功能以及其內(nèi)部操作過(guò)程,掌握微型機(jī)系統(tǒng)存儲(chǔ)器、堆棧的結(jié)構(gòu)特點(diǎn)和8086基本系統(tǒng)的概念,對(duì)后面各章的學(xué)習(xí)十分重要。 三、重點(diǎn)難點(diǎn) 存儲(chǔ)器的結(jié)構(gòu)及其實(shí)際地址的產(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位,對(duì)外的數(shù)據(jù)總線也是16位。 2、EU與BIU各自的功能是什么?如何協(xié)同工作? 答:EU是執(zhí)行部件,主要的功能是執(zhí)行指令。BIU是總線接口部件,與片外存儲(chǔ)器及I/O接口電路傳輸數(shù)據(jù)。EU經(jīng)過(guò)BIU進(jìn)行片外操作數(shù)的訪問(wèn),BIU為EU提供將要執(zhí)行的指令。EU與BIU可分別獨(dú)立工作,當(dāng)EU不需BIU提供服務(wù)時(shí),BIU可進(jìn)行填充指令隊(duì)列的操作。 3、8086/8088與其前一代微處理器8085相比,內(nèi)部操作有什么改進(jìn)? 答:8085為8位機(jī),在執(zhí)行指令過(guò)程中,取指令與執(zhí)行執(zhí)令都是串行的。8086/8088由于內(nèi)部有EU和BIU兩個(gè)功能部件,可重疊操作,提高了處理器的性能。 4、8086/8088微處理器內(nèi)部有那些寄存器,它們的主要作用是什么? 答:執(zhí)行部件有8個(gè)16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、DX一般作為通用數(shù)據(jù)寄存器。SP為堆棧指針存器,BP、DI、SI在間接尋址時(shí)作為地址寄存器或變址寄存器??偩€接口部件設(shè)有段寄存器CS、DS、SS、ES和指令指針寄存器IP。段寄存器存放段地址,與偏移地址共同形成存儲(chǔ)器的物理地址。IP的內(nèi)容為下一條將要執(zhí)行指令的偏移地址,與CS共同形成下一條指令的物理地址。 5、8086對(duì)存儲(chǔ)器的管理為什么采用分段的辦法? 答:8086是一個(gè)16位的結(jié)構(gòu),采用分段管理辦法可形成超過(guò)16位的存儲(chǔ)器物理地址,擴(kuò)大對(duì)存儲(chǔ)器的尋址范圍 (1MB,20位地址)。若不用分段方法,16位地址只能尋址64KB空間。 6、在8086中,邏輯地址、偏移地址、物理地址分別指的是什么?具體說(shuō)明。 答:邏輯地址是在程序中對(duì)存儲(chǔ)器地址的一種表示方法,由段地址和段內(nèi)偏移地址兩部分組成,如1234H:0088H。偏移地址是指段內(nèi)某個(gè)存儲(chǔ)單元相對(duì)該段首地址的差值,是一個(gè)16位的二進(jìn)制代碼。物理地址是8086芯片引線送出的20位地址碼,用來(lái)指出一個(gè)特定的存儲(chǔ)單元。 7、給定一個(gè)存放數(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的所有信號(hào)是不夠用的,采用地址/數(shù)據(jù)線復(fù)用引線方法可以解決這一矛盾,從邏輯角度,地址與數(shù)據(jù)信號(hào)不會(huì)同時(shí)出現(xiàn),二者可以分時(shí)復(fù)用同一組引線。 9、8086與8088的主要區(qū)別是什么? 答:8086有16條數(shù)據(jù)信號(hào)引線,8088只有8條;8086片內(nèi)指令預(yù)取緩沖器深度為6字節(jié),8088只有4字節(jié)。 10、怎樣確定8086的最大或最小工作模式?最大、最小模式產(chǎn)生控制信號(hào)的方法有何不同 答:引線MN/MX#的邏輯狀態(tài)決定8086的工作模式,MN/MX#引線接高電平,8086被設(shè)定為最小模式,MN/MX#引線接低電平,8086被設(shè)定為最大模式。 最小模式下的控制信號(hào)由相關(guān)引線直接提供;最大模式下控制信號(hào)由8288專用芯片譯碼后提供,8288的輸入為8086的S2#~S0#三條狀態(tài)信號(hào)引線提供。 11、8086被復(fù)位以后,有關(guān)寄存器的狀態(tài)是什么?微處理器從何處開始執(zhí)行程序? 答:標(biāo)志寄存器、IP、DS、SS、ES和指令隊(duì)列置0,CS置全1。處理器從FFFFOH存儲(chǔ)單元取指令并開始執(zhí)行。 12、8086基本總線周期是如何組成的?各狀態(tài)中完成什么基本操作? 答:基本總線周期由4個(gè)時(shí)鐘(CLK)周期組成,按時(shí)間順序定義為T1、T2、T3、T4。在T1期間8086發(fā)出訪問(wèn)目的地的地址信號(hào)和地址鎖存選通信號(hào)ALE;T2期間發(fā)出讀寫命令信號(hào)RD#、WR#及其它相關(guān)信號(hào);T3期間完成數(shù)據(jù)的訪問(wèn);T4結(jié)束該總線周期。 13、結(jié)合8086最小模式下總線操作時(shí)序圖,說(shuō)明ALE、M/IO#、DT/R#、RD#、READY信號(hào)的功能。 答:ALE為外部地址鎖存器的選通脈沖,在T1期間輸出;M/IO#確定總線操作的對(duì)象是存儲(chǔ)器還是I/O接口電路,在T1輸出;DT/R#為數(shù)據(jù)總線緩沖器的方向控制信號(hào),在T1輸出;RD#為讀命令信號(hào);在T2輸出;READY信號(hào)為存儲(chǔ)器或I/O接口“準(zhǔn)備好”信號(hào),在T3期間給出,否則8086要在T3與T4間插入Tw等待狀態(tài)。 14、什么是總線請(qǐng)求?8086在最小工作模式下,有關(guān)總線請(qǐng)求的信號(hào)引腳是什么? 答:系統(tǒng)中若存在多個(gè)可控制總線的主模塊時(shí),其中之一若要使用總線進(jìn)行數(shù)據(jù)傳輸時(shí),需向系統(tǒng)請(qǐng)求總線的控制權(quán),這就是一個(gè)總線請(qǐng)求的過(guò)程。8086在最小工作模式下有關(guān)總線請(qǐng)求的信號(hào)引腳是HOLD與HLDA。 15、簡(jiǎn)述在最小工作模式下,8086如何響應(yīng)一個(gè)總線請(qǐng)求? 答:外部總線主控模塊經(jīng)HOLD引線向8086發(fā)出總線請(qǐng)求信號(hào);8086在每個(gè)時(shí)鐘周期的上升沿采樣HOLD引線;若發(fā)現(xiàn)HOLD=1則在當(dāng)前總線周期結(jié)束時(shí)(T4結(jié)束)發(fā)出總線請(qǐng)求的響應(yīng)信號(hào)HLDA;8086使地址、數(shù)據(jù)及控制總線進(jìn)入高阻狀態(tài),讓出總線控制權(quán),完成響應(yīng)過(guò)程。 16、在基于8086的微計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器是如何組織的?是如何與處理器總線連接的?BHE#信號(hào)起什么作用? 答:8086為16位處理器,可訪問(wèn)1M字節(jié)的存儲(chǔ)器空間;1M字節(jié)的存儲(chǔ)器分為兩個(gè)512K字節(jié)的存儲(chǔ)體,命名為偶字節(jié)體和奇字節(jié)體;偶體的數(shù)據(jù)線連接D7~D0,“體選”信號(hào)接地址線A0;奇體的數(shù)據(jù)線連接D15~D8,“體選”信號(hào)接BHE#信號(hào);BHE#信號(hào)有效時(shí)允許訪問(wèn)奇體中的高字節(jié)存儲(chǔ)單元,實(shí)現(xiàn)8086的低字節(jié)訪問(wèn)、高字節(jié)訪問(wèn)及字訪問(wèn)。 17、“80386是一個(gè)32位微處理器”,這句話的涵義主要指的是什么? 答:指80386的數(shù)據(jù)總線為32位,片內(nèi)寄存器和主要功能部件均為32位,片內(nèi)數(shù)據(jù)通路為32位。 18、80X86系列微處理器采取與先前的微處理器兼容的技術(shù)路線,有什么好處?有什么不足? 答:好處是先前開發(fā)的軟件可以在新處理器組成的系統(tǒng)中運(yùn)行,保護(hù)了軟件投資。缺點(diǎn)是處理器的結(jié)構(gòu)發(fā)展受到兼容的約束,為了保持兼容性增加了硅資源的開銷,增加了結(jié)構(gòu)的復(fù)雜性。 第三章 8086指令系統(tǒng)及匯編語(yǔ)言指令程序簡(jiǎn)介 一、內(nèi)容概述 3.1 8089指令系統(tǒng)的基本格式 微處理器只能識(shí)別和執(zhí)行以二進(jìn)制代碼形式表示的指令,這種指令代碼稱作機(jī)器碼。8086CPU的機(jī)器碼指令有幾百條,但它們的基本格式均為1—6個(gè)字節(jié)。除了操作碼字節(jié)和尋址方式字節(jié)外,就是單/雙字節(jié)的位移量和單/雙字節(jié)的立即數(shù)。 一條指令具體為基本格式中的哪一種,是由指令的操作碼和尋址方式?jīng)Q定的,具體地說(shuō),在指令操作碼中的W、D、S等指示位就是用來(lái)指出:指令操作所涉及的是16位數(shù)還是8位數(shù);指令中所需的操作數(shù)是來(lái)自某一寄存器還是由全部數(shù)字節(jié)給出;當(dāng)操作數(shù)或操作結(jié)果存于某一寄存器中時(shí),該寄存器是通過(guò)操作碼還是尋址方式字節(jié)來(lái)指定。 3.2 尋址方式 8086的尋址方式分為兩大類:數(shù)據(jù)存儲(chǔ)器尋址方式和程序存儲(chǔ)器尋址方式。 (一) 數(shù)據(jù)存儲(chǔ)器尋址方式 數(shù)據(jù)存儲(chǔ)器尋址方式實(shí)際上是尋找有效地址EA值。在8086微機(jī)系統(tǒng)中,知道了有效地址EA后,將其與左移4位后的段寄存器內(nèi)容相加,就可以算出8086所有的存儲(chǔ)器物理地址。因此,在一條指令中,根據(jù)其尋址方式求出了EA后很快就可以找到操作數(shù)所在的物理地址。 (二) 程序存儲(chǔ)器尋址方式 程序存儲(chǔ)器尋址方式要尋找的是當(dāng)前要執(zhí)行的指令所在的存儲(chǔ)器物理地址。這是由于在執(zhí)行JUMP指令或CALL指令后,IP的內(nèi)容須依指令的要求改變,這種改變可能在段內(nèi)范圍進(jìn)行,也可能在段間進(jìn)行。在段內(nèi)或段間改變IP的內(nèi)容時(shí),其轉(zhuǎn)移地址碼可能由指令碼直接提供,也可能由寄存器或存儲(chǔ)單元提供。于是程序存儲(chǔ)器尋址就有了段內(nèi)直接、段內(nèi)間接、段間直接、段間間接四種尋址方式。 (三) 尋址方式字節(jié) 8086CPU有著多種靈活的尋址方式,這些尋址方式是通過(guò)尋址方式字節(jié)即指令碼的第二個(gè)字節(jié)來(lái)指定的。尋址方式字節(jié)的格式為: 其中MOD是用來(lái)識(shí)別是寄存器尋址方式還是存儲(chǔ)器尋址方式的。當(dāng)MOD=11時(shí),為寄存器尋址方式;MOD≠11時(shí),為存儲(chǔ)器尋址方式。 REG字段與操作碼中的W位一起用來(lái)選擇指令操作中所使用的寄存器。 R/M字段與MOD字段一起用來(lái)指定尋址方式,它們的組合可以提供24種數(shù)據(jù)存儲(chǔ)器尋址方式以及16種寄存器尋址方式。 (四) 段越界前紹 所謂“段越界前綴”就是一條特定的指令,該指令功能是把數(shù)據(jù)所在的當(dāng)前段寄存器改 為另一個(gè)段寄存器,另一個(gè)段寄存器由這條特定指令指定?!岸卧浇缜熬Y指令”的格式如下: 其中RR值代表當(dāng)前段被跨越后得訪問(wèn)數(shù)據(jù)所在段。 RR=00,01,10,11分別表示ES,CS,SS,DS段寄存器。 (五)8086機(jī)器語(yǔ)言指令基本格式分析舉例 在了解了8086機(jī)器碼指令的基本格式、尋址方式、操作碼的指示位、尋址方式字節(jié)等有關(guān)知識(shí)的基礎(chǔ)上就可進(jìn)行機(jī)器碼指令的分析和閱讀了。在周細(xì)等編《微型計(jì)算機(jī)極其應(yīng)用》第二版2.5節(jié)中所舉的例子就是通過(guò)對(duì)指令各字節(jié)及相應(yīng)位進(jìn)行閱讀分析,進(jìn)一步了解、熟識(shí)8086的各種尋址方式以及指令在機(jī)器中的執(zhí)行過(guò)程,從而達(dá)到了解8086指令系統(tǒng)的目的,以便能夠熟練使用8086匯編語(yǔ)言進(jìn)行程序的編制。 3.3 8086匯編語(yǔ)盲語(yǔ)句及基本語(yǔ)法 在了解了8086指令的機(jī)器語(yǔ)言基本格式及尋址方式的基礎(chǔ)上,本節(jié)進(jìn)一步討論8086的匯編語(yǔ)言指令。重點(diǎn)內(nèi)容是了解8086各種匯編語(yǔ)言指令的基本格式、功能以及它們?cè)趨R編源程序中的應(yīng)用。在實(shí)際應(yīng)用中的一些語(yǔ)法要求也是本節(jié)應(yīng)重點(diǎn)掌握的內(nèi)容。 (一)8086的匯編語(yǔ)言指令語(yǔ)句 8086匯編語(yǔ)言語(yǔ)句有三種:指令語(yǔ)句;偽指令語(yǔ)句及宏指令語(yǔ)句。 對(duì)指令語(yǔ)句要求能從原理和應(yīng)用兩個(gè)方面去理解和掌握。對(duì)某一條具體常用的指令語(yǔ)句 (如MOV等),要能知道操作數(shù)屬什么類型、操作數(shù)的尋址方式、實(shí)際物理地址是什么,具體常用指令功能以及某幾條指令的特殊用途也是應(yīng)該掌握的。同時(shí)由以上分析也應(yīng)能知道該指令機(jī)器碼指令格式中對(duì)應(yīng)的指令操作碼中指示位及尋址方式字節(jié)中MOD字段信息的具體內(nèi)容。 對(duì)偽指令語(yǔ)句,要求了解常用的、與匯編源程序密切相關(guān)的偽指令功能,同時(shí)在閱讀匯編源程序時(shí),能對(duì)偽指令進(jìn)行分析;在編寫匯編源程序時(shí)能正常運(yùn)用相應(yīng)的偽指令。 對(duì)宏指令語(yǔ)句,本節(jié)僅要求知道其定義,其余內(nèi)容不作要求。 (二) 匯編語(yǔ)言的有關(guān)基本規(guī)定及格式 對(duì)匯編語(yǔ)言源程序的編寫,8086是有嚴(yán)格的規(guī)定和基本格式的。8086匯編源程序由兩大部分組成,一部分是用偽指令按照一定的格式和語(yǔ)法要求寫出的匯編語(yǔ)句,另一部分是用指令語(yǔ)句編寫的CPU可執(zhí)行的程序段。用偽指令編寫的匯編語(yǔ)句是用來(lái)幫助匯編程序在對(duì)源程序中CPU可執(zhí)行程序段進(jìn)行匯編時(shí)能對(duì)指令語(yǔ)句中的變量正確賦值,或留出指定的存儲(chǔ)區(qū),等等,以便正確匯編,產(chǎn)生出機(jī)器可執(zhí)行的目標(biāo)程序。進(jìn)行匯編語(yǔ)言源程序設(shè)計(jì)時(shí),有關(guān)偽指令語(yǔ)句、指令語(yǔ)句所有的基本規(guī)定及格式都是應(yīng)該掌握的內(nèi)容。 二、教學(xué)要求 掌握8086匯編語(yǔ)言程序設(shè)計(jì)的基本方法; 匯編語(yǔ)言程序有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、循環(huán)結(jié)構(gòu)及分支結(jié)構(gòu)。要求能了解三種基本結(jié)構(gòu)的基本形式,能閱讀分析并編寫出簡(jiǎn)單的程序。 掌握轉(zhuǎn)移指令的各條語(yǔ)句格式、功能及應(yīng)用。在此基礎(chǔ)上,能編寫一般的簡(jiǎn)單分支程序,并能結(jié)合尋址方式中所介紹的程序地址尋址方式內(nèi)容,從原理的角度理解轉(zhuǎn)移指令在機(jī)器中是如何進(jìn)行操作的。 三、重點(diǎn)難點(diǎn) 在使用簡(jiǎn)單轉(zhuǎn)移指令時(shí),應(yīng)注意TEST、AND、OR、XOR幾條指令的使用。它們的使用可提供相應(yīng)標(biāo)志位的狀態(tài),作為判斷轉(zhuǎn)移分支的測(cè)試條件。 在測(cè)試分支條件時(shí),還常使用移位和循環(huán)移位指令,通過(guò)這類指令的執(zhí)行對(duì)相應(yīng)標(biāo)志位的影響來(lái)判斷轉(zhuǎn)移分支條件是否滿足,以便確定程序的執(zhí)行方向。 對(duì)于使用比較指令進(jìn)行分支程序轉(zhuǎn)移判斷,要求能分析閱讀相應(yīng)匯編源程序即可,不要求編寫這類程序。 對(duì)于循環(huán)程序,學(xué)習(xí)重點(diǎn)應(yīng)為熟悉了解循環(huán)程序的結(jié)構(gòu),能分析一段循環(huán)程序的四個(gè)組成部分各由哪些語(yǔ)句組成,從而能通過(guò)逐條指令的分析說(shuō)明程序?qū)⑼瓿傻墓δ?。同時(shí),也能在分析程序的基礎(chǔ)上畫出程序的流程圖。 對(duì)于多重循環(huán),只需了解其概念,不作更深的要求。 應(yīng)了解子程序的概念、子程序的調(diào)用和返回、子程序的定義格式及現(xiàn)場(chǎng)的保護(hù),以及參數(shù)在主、子程序之間的傳遞方式等內(nèi)容。 對(duì)于子程序,要求能在程序中對(duì)其進(jìn)行分析,了解某子程序經(jīng)主程序調(diào)用后使主程序?qū)崿F(xiàn)的功能。 四、習(xí)題 1、根據(jù)下列要求編寫一個(gè)匯編語(yǔ)言程序:: 代碼段的段名為COD_SG 數(shù)據(jù)段的段名為DAT_SG 堆棧段的段名為STK_SG 變量HIGH_DAT所包含的數(shù)據(jù)為95 將變量HIGH_DAT裝入寄存器AH,BH和DL 程序運(yùn)行的入口地址為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、指出下列程序中的錯(cuò)誤: 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)號(hào)為什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM 答案: 非法標(biāo)號(hào): (1)因?yàn)椤?’只允許是標(biāo)號(hào)的第一個(gè)字符 (2)第一個(gè)字符不能為數(shù)字 (3)不允許出現(xiàn)‘-’ (4)不能是保留字,如助記符 (5)不能有空格 5、下面的數(shù)據(jù)項(xiàng)定義了多少個(gè)字節(jié)? DATA_1 DB 6 DUP(4 DUP(0FFH)) 答案: 24字節(jié) 6、對(duì)于下面兩個(gè)數(shù)據(jù)段,偏移地址為10H和11H的兩個(gè)字節(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. 存儲(chǔ)字時(shí)低8位存在低字節(jié),高8位存在高字節(jié). 7、下面的數(shù)據(jù)項(xiàng)設(shè)置了多少個(gè)字節(jié)? (1) ASC_DATA DB ‘1234’ (2) HEX_DATA DB 1234H 答案: (1) 設(shè)置了4個(gè)字節(jié) (2) 設(shè)置了2個(gè)字節(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、指出下列指令的錯(cuò)誤: (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) 源、目的字長(zhǎng)不一致 (2) 源、目的不能同時(shí)為存貯器尋址方式 (3) 基址變址方式不能有 SI和DI的組合 (4) 基址變址方式不能有 BX和BP的組合 (5) 在8086尋址方式中,AX不能作為基址寄存器使用,而且源、目的不能同時(shí)為存貯器尋址方式 (6) 1000超出一個(gè)字節(jié)的表數(shù)范圍 (7) OFFSET只用于簡(jiǎn)單變量,應(yīng)去掉 (8) CS不能作為目的寄存器 (9) 段地址不能直接送入數(shù)據(jù)段寄存器 10、DATA SEGMENT TABLE_ADDR DW 1234H DATA ENDS MOV BX, TABLE_ADDR LEA BX, TABLE_ADDR 請(qǐng)寫出上述兩條指令執(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)存儲(chǔ)器地址及其內(nèi)容如右圖 所示,請(qǐng)用兩條指令把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中的兩個(gè)字?jǐn)?shù)據(jù)相加, 和存放在DATAY和DATAY+2中。 DATAX和DATAY中的兩個(gè)雙字?jǐn)?shù)據(jù)相加, 和存放在DATAY開始的字單元中。 DATAX和DATAY兩個(gè)字?jǐn)?shù)據(jù)相乘(用MUL)。 DATAX和DATAY兩個(gè)雙字?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、編寫程序段, 比較兩個(gè)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)容為帶符號(hào)數(shù), CX和DX中的內(nèi)容為無(wú)符號(hào)數(shù), 請(qǐng)用比較指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)以下判斷: 若DX的值超過(guò)CX的值,則轉(zhuǎn)去執(zhí)行EXCEED 若BX的值大于AX的值,則轉(zhuǎn)去執(zhí)行EXCEED CX中的值為0嗎? 若是則轉(zhuǎn)去執(zhí)行ZERO BX的值與AX的值相減, 會(huì)產(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、假如在程序的括號(hào)中分別填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20 試說(shuō)明在三種情況下, 當(dāng)程序執(zhí)行完后, AX、BX、CX、DX四個(gè)寄存器的內(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ù)碼,請(qǐng)寫出計(jì)算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、有兩個(gè)3位的ASCII數(shù)串ASC1和ASC2定義如下: ASC1 DB ‘578’ ASC2 DB ‘694’ ASC3 DB ‘0000’ 請(qǐng)編寫程序計(jì)算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, 請(qǐng)寫出下列各條指令單獨(dú)執(zhí)行完后, 有關(guān)寄存器及存儲(chǔ)單元的內(nèi)容, 若影響條件碼請(qǐng)給出條件碼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、試編寫一個(gè)匯編語(yǔ)言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯示出來(lái)。 答案: 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、編寫程序,比較兩個(gè)字符串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個(gè)16進(jìn)制數(shù),并根據(jù)對(duì)3個(gè)數(shù)的比較顯示如下信息: (1)如果3個(gè)數(shù)都不相等則顯示0; (2)如果3個(gè)數(shù)中有2個(gè)數(shù)相等則顯示2; (3)如果3個(gè)數(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)若兩個(gè)數(shù)中有一個(gè)是奇數(shù),則將該奇數(shù)存入A中,偶數(shù)存入B中; (2)若兩個(gè)數(shù)均為奇數(shù),則兩數(shù)分別加1,并存回原變量; (3)若兩個(gè)數(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個(gè)數(shù),存入首地址為GRAD的字?jǐn)?shù)組中,GRAD+i表示學(xué)號(hào)為i+1的學(xué)生成績(jī)。另一個(gè)數(shù)組RANK是30個(gè)學(xué)生的名次表,其中RANK+I的內(nèi)容是學(xué)號(hào)為i+1的學(xué)生的名次。試編寫程序,根據(jù)GRAD中的學(xué)生成績(jī),將排列的名次填入RANK數(shù)組中(提示:一個(gè)學(xué)生的名次等于成績(jī)高于這個(gè)學(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、分析下列程序的功能,寫出堆棧最滿時(shí)各單元的地址及內(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.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微型計(jì)算機(jī)原理 微型計(jì)算機(jī) 原理 word
鏈接地址:http://kudomayuko.com/p-8922796.html