第8章 輸入輸出程序設(shè)計(jì)_第1頁(yè)
第8章 輸入輸出程序設(shè)計(jì)_第2頁(yè)
第8章 輸入輸出程序設(shè)計(jì)_第3頁(yè)
第8章 輸入輸出程序設(shè)計(jì)_第4頁(yè)
第8章 輸入輸出程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

輸入輸出功能是計(jì)算機(jī)的重要組成部分,是人—機(jī)交互功能的主要承擔(dān)者。在早期的計(jì)算機(jī)系統(tǒng)中,通常把輸入輸出設(shè)備或功能作為次要的部分,而把CPU作為主要研究對(duì)象。但現(xiàn)在隨著輸入輸出設(shè)備的日益豐富、功能要求越來(lái)越復(fù)雜,輸入輸出部分在整個(gè)計(jì)算機(jī)系統(tǒng)中的地位也得到了進(jìn)一步提高。第八章輸入輸出程序設(shè)計(jì)2/5/20231

輸入輸出設(shè)備是計(jì)算機(jī)系統(tǒng)的重要的組成部分,沒(méi)有輸入輸出設(shè)備,計(jì)算機(jī)就得不到要解決問(wèn)題的初始信息,處理的結(jié)果信息也不可能被送出,這樣的計(jì)算機(jī)不能完成任何工作。計(jì)算機(jī)系統(tǒng)是通過(guò)硬件接口(或控制器)以及輸出輸出程序?qū)ν獠吭O(shè)備實(shí)現(xiàn)處理和控制的。而匯編語(yǔ)言能直接控制硬件,因此就成為編寫(xiě)輸入輸出程序的最有效的語(yǔ)言。2/5/202328.1I/O設(shè)備的數(shù)據(jù)傳送方式

每種輸入輸出設(shè)備都是通過(guò)硬件接口或控制器與CPU相連接,這些接口都能支持輸入輸出指令I(lǐng)N,OUT與外部設(shè)備交換信息,這些信息包括控制、狀態(tài)和數(shù)據(jù)三種不同性質(zhì)的信息。存儲(chǔ)器I/O接口輸入設(shè)備I/O接口數(shù)據(jù)總線DB控制總線CB地址總線AB輸出設(shè)備CPU8.1.1CPU與外設(shè)2/5/20233控制信息:是由CPU發(fā)送給外部設(shè)備的,命令其處于某種方式或執(zhí)行某種操作。狀態(tài)信息:從接口輸入的狀態(tài)信息表示I/O設(shè)備當(dāng)前的狀態(tài)。數(shù)據(jù)信息:則是I/O設(shè)備和CPU真正要交換的信息。數(shù)據(jù)信息可分為三種類(lèi)型:數(shù)字量、模擬量和開(kāi)關(guān)量。這些信息可以是并行的,也可以是串行的。

CPU與外設(shè)之間的數(shù)據(jù)傳送方式有:程序直接控制I/O方式、中斷方式和DMA方式。由于DMA方式是由DMA控制器實(shí)現(xiàn)其傳送功能的,所以在這里只做簡(jiǎn)單介紹。主要講解前兩種方式。2/5/202348.1.2直接存儲(chǔ)器存取方式(DMA)方式

當(dāng)外設(shè)的速度相對(duì)很高,且一次傳送的數(shù)據(jù)量很大時(shí),中斷方式的效率就很低。例如,對(duì)磁盤(pán)的讀寫(xiě)操作,一般的文件都有幾十K,幾百K,甚至幾兆,通過(guò)DMA方式利用專(zhuān)門(mén)的接口控制電路,在存儲(chǔ)器與高速的外設(shè)之間進(jìn)行大量的數(shù)據(jù)交換,而不需要CPU的參與。

DMA控制器-DMAC,除了具有一般接口的特點(diǎn)外,CPU可以通過(guò)對(duì)DMAC相應(yīng)端口的讀/寫(xiě)操作來(lái)控制DMA的工作方式;DMAC在得到總線控制權(quán)后,能夠像CPU一樣提供相應(yīng)的控制信號(hào)來(lái)控制系統(tǒng)總線,從而實(shí)現(xiàn)外設(shè)與內(nèi)存之間高速大量的數(shù)據(jù)傳輸。一般接口電路不具備控制總線的能力。2/5/20235存儲(chǔ)器外部設(shè)備CPUDMA請(qǐng)求DMA響應(yīng)HOLDHLDADMA控制器2/5/202368.2程序直接控制I/O方式關(guān)于I/O“接口”與“端口”I/O接口與CPU之間傳送的信息有數(shù)據(jù)、狀態(tài)和控制信號(hào)等3大類(lèi)。每個(gè)接口內(nèi)部都包含有一定數(shù)量的寄存器(一般包括數(shù)據(jù)寄存器、狀態(tài)寄存器和控制寄存器),用來(lái)存放三種不同信息。為了區(qū)分不同的寄存器(REG),需要給每個(gè)REG分配一個(gè)地址號(hào),這就類(lèi)似于給內(nèi)存單元編址一樣。I/O接口內(nèi)部可尋址的REG又稱(chēng)為端口。按接受和傳送的信息有分為數(shù)據(jù)端口(雙向,輸入緩沖,輸出鎖存),狀態(tài)端口(一般只讀),控制端口(一般只寫(xiě))。CPU對(duì)外設(shè)工作方式的控制和信息的交換最終都?xì)w結(jié)為CPU通過(guò)IN/OUT指令對(duì)各個(gè)可尋址端口的讀寫(xiě)操作。

8.2.1I/O接口基本結(jié)構(gòu)及編址方式2/5/20237(1)統(tǒng)一編址:存儲(chǔ)器(內(nèi)存)與I/O端口的編址占用同一個(gè)地址空間。特點(diǎn)是所有對(duì)內(nèi)存操作的指令對(duì)I/O端口同樣有效,指令豐富,但會(huì)損失一部分的內(nèi)存空間。(2)獨(dú)立編址:內(nèi)存與I/O端口對(duì)應(yīng)不同的地址空間。對(duì)I/O端口有專(zhuān)門(mén)的指令。缺點(diǎn)是對(duì)I/O端口操作的指令不及統(tǒng)一編址時(shí)豐富(例如,8086/8088中對(duì)I/O端口就只有最基本的輸入輸出指令),但能最大程度地滿足存儲(chǔ)空間的尋址范圍。

I/O接口編址方式2/5/20238圖2/5/20239I/O端口地址I/O端口是CPU與輸入輸出設(shè)備的交換數(shù)據(jù)的場(chǎng)所,通過(guò)I/O端口,處理機(jī)可以接受從輸入設(shè)備輸入的信息;也可向輸出設(shè)備發(fā)送信息。在計(jì)算機(jī)系統(tǒng)中,為了區(qū)分各類(lèi)不同的I/O端口,就用不同的數(shù)字給它們進(jìn)行編號(hào),這種對(duì)I/O端口的編號(hào)就稱(chēng)為I/O端口地址。按照每次可交換一個(gè)字節(jié)數(shù)據(jù)的端口稱(chēng)為字節(jié)端口,每次可交換一個(gè)字?jǐn)?shù)據(jù)的端口稱(chēng)為字端口。在Intel公司的CPU家族中,I/O端口的地址空間可達(dá)64K,即可有65536個(gè)字節(jié)端口,或32768個(gè)字端口。這些地址不是內(nèi)存單元地址的一部分,不能普通的訪問(wèn)內(nèi)存指令來(lái)讀取其信息,而要用專(zhuān)門(mén)的I/O指令才能訪問(wèn)它們。雖然CPU提供了很大的I/O地址空間,但目前大多數(shù)微機(jī)所用的端口地址都在0~3FFH范圍之內(nèi),其所用的I/O地址空間只占整個(gè)I/O地址空間的很小部分。表8.1列舉了幾個(gè)重要的I/O端口地址。2/5/2023102/5/202311計(jì)算機(jī)在啟動(dòng)時(shí),BIOS程序(BasicInput/OutputSystem)將檢查計(jì)算機(jī)系統(tǒng)中有哪些端口地址。當(dāng)發(fā)現(xiàn)有串行端口地址時(shí),BIOS就把該端口存放在以地址40:00H開(kāi)始的數(shù)據(jù)區(qū)內(nèi);當(dāng)發(fā)現(xiàn)有并行端口地址時(shí),BIOS會(huì)把它存入以地址40:08H開(kāi)始的數(shù)據(jù)區(qū)內(nèi)。每類(lèi)端口有4個(gè)字的空間,對(duì)有二個(gè)串行口、二個(gè)并行口的計(jì)算機(jī)系統(tǒng),其BIOS程序?qū)⒌玫饺鐖D所示的部分?jǐn)?shù)據(jù)表。圖中03F8H、02F8H、0378H和0278H分別為COM1、COM2、LPT1和LPT2的端口地址。2/5/202312

I/O指令:

輸入指令:IN

AL,PORTINAX,PORT INAL,DXINAX,DX輸出指令:OUTPORT,ALOUTPORT,AX OUTDX,ALOUTDX,ALPORT:端口地址若地址值≦255,可直接尋址(尋址范圍256個(gè)端口);否則,需經(jīng)寄存器DX間接尋址(尋址范圍64K個(gè)端口)

8.2.2I/O指令2/5/202313(1)INAX,28HMOVDATA_WORD,AX(2)INAL,27HTEST

AL,00000100JNZERRORMOVDX,126INAL,DXORAL,80HOUT

DX,AL2/5/202314codesegmentmainprocfarassumecs:codes:pushdsxorax,axpushaxmovbx,6000;f

movcx,1000;times

movdx,cx

inal,61handal,11111100b

trig:xoral,2

out61h,almovcx,bxdelay:loopdelaydecdxjnetrigretmainendpcodeendsends簡(jiǎn)單的I/O程序舉例:SOUND程序2/5/202315程序直接控制I/O方式分:無(wú)條件傳送方式 和條件傳送方式1)無(wú)條件傳送 無(wú)條件:每次進(jìn)行輸入/輸出之前,不需要查詢外設(shè)的狀態(tài).2)有條件傳送又稱(chēng)查詢式傳送,在每次輸入/輸出之前,先要讀取外設(shè)的狀態(tài),滿足一定的條件才能進(jìn)行一次I/O操作。

2/5/202316C

P

U打

機(jī)

器打印機(jī)DBSTBBUSYCB

DB

AB圖打印機(jī)連接示意圖

【例】向打印機(jī)輸出字符。2/5/2023172/5/202318:┆源程序

MOV BX,OFFSET,BUFFER;置緩沖區(qū)偏移量

MOV CX,CHRTL ;置輸出字符計(jì)數(shù)器BG:MOV AL,[BX]

;取字符

MOV DX,378H

;輸出字符到數(shù)據(jù)寄存器

OUT DX,AL

MOV DX,379H

;讀打印機(jī)狀態(tài)WT: IN AL,DX TEST AL,80H

;判‘忙’否?

JZ WT

;忙,重查詢

MOV DX,37AH

;形成選通信號(hào)

MOV AL,0DH ;令打印機(jī)打印字符

OUT DX,AL

MOV AL,0CH OUT DX,AL INC BX ;指向下一輸出字符

LOOP BG┆2/5/202319在看一個(gè)例子

Cpu要從三個(gè)設(shè)備輪流輸入數(shù)據(jù),proc1、proc2、proc3分別是設(shè)備1、設(shè)備2、設(shè)備3的數(shù)據(jù)輸入程序,他們的狀態(tài)寄存器的端口地址分別為stat1、stat2、stat3表示,這三個(gè)狀態(tài)寄存器的第五位是輸入準(zhǔn)備位。2/5/202320

input:in al,stat1

test al,20hjz

dev2call farptrproc1

dev2:in al,stat2test al,20hjz

dev3

call farptrproc2

dev3:in al,stat3 test al,20h jz no_input call farptrproc3no_input2/5/202321

查詢式傳輸過(guò)程的優(yōu)點(diǎn)是硬件開(kāi)銷(xiāo)小,使用起來(lái)比較簡(jiǎn)單。但在此方式下,CPU要不斷地查詢外設(shè)的狀態(tài),當(dāng)外設(shè)未準(zhǔn)備好時(shí),CPU就只能循環(huán)等待,不能執(zhí)行其它程序,這樣就浪費(fèi)了CPU的大量時(shí)間,降低了主機(jī)的利用率。為了解決這個(gè)矛盾,我們提出了中斷傳送方式:即當(dāng)CPU進(jìn)行主程序操作時(shí),外設(shè)的數(shù)據(jù)已存入輸入端口的數(shù)據(jù)寄存器;或端口的數(shù)據(jù)輸出寄存器已空,由外設(shè)通過(guò)接口電路向CPU發(fā)出中斷請(qǐng)求信號(hào),CPU在滿足一定的條件下,暫停執(zhí)行當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)入執(zhí)行相應(yīng)能夠進(jìn)行輸入/輸出操作的子程序,待輸入/輸出操作執(zhí)行完畢之后CPU即返回繼續(xù)執(zhí)行原來(lái)被中斷的主程序。這樣CPU就避免了把大量時(shí)間耗費(fèi)在等待、查詢狀態(tài)信號(hào)的操作上,使其工作效率得以大大地提高。8.3中斷傳送方式2/5/202322外部設(shè)備是如何連到主機(jī)上的?2/5/2023238.3.18086中斷的分類(lèi):內(nèi)部中斷和硬件中斷(1)內(nèi)部中斷

內(nèi)部中斷簡(jiǎn)稱(chēng)內(nèi)中斷,又稱(chēng)軟件中斷。它不需要外部硬件支持。并且不受中斷標(biāo)志位狀態(tài)的影響。8086/8088內(nèi)部中斷有以下5種:

l

除數(shù)為0中斷——類(lèi)型0中斷

l

溢出中斷——類(lèi)型4中斷INTO

l

單步中斷——類(lèi)型1中斷

l

斷點(diǎn)中斷——類(lèi)型3中斷

l

中斷指令——指令I(lǐng)NTn中斷由cpu的某些錯(cuò)誤引起為調(diào)試程序而設(shè)置的中斷2/5/202324(2)硬件中斷:來(lái)自處理機(jī)的外部條件所以又稱(chēng)外中斷硬件中斷主要有兩種來(lái)源——非屏蔽中斷NMI和可屏蔽中斷INTR。?非屏蔽中斷NMI。非屏蔽中斷來(lái)源于三方:

系統(tǒng)板的RAM在讀寫(xiě)時(shí)產(chǎn)生奇偶校驗(yàn)錯(cuò);

I/O通道中的擴(kuò)展選件出現(xiàn)奇偶校驗(yàn)錯(cuò);協(xié)處理器8087的異常狀態(tài)產(chǎn)生的中斷。?可屏蔽中斷INTR是由外部設(shè)備通過(guò)一片8259A產(chǎn)生的中斷請(qǐng)求。從外設(shè)發(fā)出的中斷請(qǐng)求到cpu響應(yīng)中斷,用兩個(gè)控制條件起決定作用:

1、外設(shè)的中斷請(qǐng)求是否被屏蔽。2、cpu是否允許相應(yīng)中斷。

8259A內(nèi)部有一個(gè)中斷屏蔽寄存器,端口地址為21h2/5/202325結(jié)束硬件中斷moval,20hout20h,al中斷屏蔽寄存器和中斷命令寄存器只允許鍵盤(pán)中斷:

moval,11111101

out21h,al2/5/202326外部設(shè)備向cpu發(fā)出中斷請(qǐng)求,cpu是否相應(yīng)還與IF有關(guān)STI——開(kāi)中斷指令將標(biāo)志寄存器中的中斷標(biāo)志位IF置1,允許CPU響應(yīng)來(lái)自INTR引腳的中斷請(qǐng)求CLI——關(guān)中斷指令將標(biāo)志寄存器中的中斷標(biāo)志位IF清0,使CPU不響應(yīng)來(lái)自INTR引腳的中斷請(qǐng)求2/5/2023278.3.2中斷向量表

在8086系統(tǒng)中,內(nèi)存最低端的1K字節(jié)地址范圍內(nèi)(從00000-003FFH),放置256個(gè)中斷的中斷向量(入口地址),即稱(chēng)為中斷向量表。每個(gè)中斷矢量在表中占據(jù)4個(gè)字節(jié),地址較高的兩個(gè)字節(jié)放入口地址的段地址,地址較低的兩個(gè)字節(jié)放偏移地址。

中斷向量表中的存儲(chǔ)地址=中斷類(lèi)型碼n×4什么是中斷向量、中斷向量地址、中斷向量表?2/5/2023282/5/202329表8-3中斷向量表地址(Hex)

類(lèi)型碼中斷名稱(chēng)

0—30除以04—71單步

8—B2非屏蔽

C—F3斷點(diǎn)

10—134溢出

14—175打印屏幕

18—1B6保留

1D—1F7保留

20—238定時(shí)器

24—279鍵盤(pán)

28—2BA保留的硬中斷

2C—2FB異步通信(COM2)30—33C異步通信(COM1)34—37D硬盤(pán)

38—3BE軟盤(pán)

3C—3FF并行打印機(jī)地址(Hex)

類(lèi)型碼中斷名稱(chēng)40—4310視頻顯示I/O調(diào)用44—4711設(shè)備檢測(cè)調(diào)用48—4B12存儲(chǔ)器容量檢測(cè)4C—4F13軟/硬盤(pán)I/O調(diào)用50—5314通信I/O調(diào)用54—5715盒式磁帶I/O調(diào)用58—5B16鍵盤(pán)I/O調(diào)用5C—5F17打印機(jī)I/O調(diào)用60—6318ROMBASIC64—6719引導(dǎo)程序入口68—6B1A時(shí)間調(diào)用6C—6F1B鍵盤(pán)CTRL-BREAK控制70—731C定時(shí)器報(bào)時(shí)74—771D顯示器參數(shù)表78—7B1E軟盤(pán)參數(shù)表7C—7F1F字符點(diǎn)陣結(jié)構(gòu)參數(shù)表BIOS中斷向量2/5/202330地址(Hex)

類(lèi)型碼中斷名稱(chēng)80—8320程序結(jié)束,返回DOS84—8721DOS系統(tǒng)功能調(diào)用88—8B22程序結(jié)束地址8C—8F23CTRL_BREAK退出地址90—9324標(biāo)準(zhǔn)錯(cuò)誤出口地址94—9725絕對(duì)磁盤(pán)讀98—9B26絕對(duì)磁盤(pán)寫(xiě)9C—9F27程序結(jié)束,駐留內(nèi)存A0—FF28—3F為DOS保留100—17F40—5F保留(擴(kuò)充BIOS中斷向量)180—19F60—67為用戶軟中斷保留1A0—1FF68—7F不用(其中70—77為I/O設(shè)備中斷向量)200—21780—85BASIC使用218—3C386—F0BASIC運(yùn)行時(shí),用于解釋3C4—3FFF1—FF未用DOS中斷向量2/5/202331用指令來(lái)為中斷類(lèi)型N設(shè)置中斷向量:MOV AX,0MOV ES,AXMOV BX,N*4 ;中斷入口地址MOV AX,OFFSETINTHANDMOV ES:WORDPRT[BX],AX ;設(shè)置中斷處理程序INTHANDMOV AX,SEGINTHAND ;的入口地址MOV ES:WORDPRT[BX+2],AX

┆INTHAND: ;中斷處理程序 ┆

IRET

用戶可以為保留的中斷類(lèi)型號(hào)擴(kuò)充自己的需要的中斷功能,對(duì)新增加的中斷功能要在中斷向量表中建立相應(yīng)的中斷向量。2/5/202332

用戶在編寫(xiě)自己的中斷處理程序代替系統(tǒng)中的某個(gè)中斷處理功能時(shí),要注意保留原來(lái)的中斷向量。程序結(jié)束時(shí),要恢復(fù)原來(lái)的中斷向量。可以使用dos功能調(diào)用來(lái)存取中斷向量取中斷向量預(yù)置AH=35H,AL=中斷類(lèi)型號(hào)執(zhí)行INT21H——把類(lèi)型號(hào)為AL的中斷向量取出到ES:BX中設(shè)置中斷向量預(yù)置AH=25H,AL=中斷類(lèi)型號(hào),DS:DX=中斷向量執(zhí)行INT21H——把DS:DX指向的中斷向量放置到中斷向量表中類(lèi)型號(hào)為AL的中斷向量處2/5/202333┆MOV AL,N

MOV AH,35H ;調(diào)用DOS功能35HINT 21HPUSH ES ;保存原中斷向量PUSH BXPUSH DSMOV AX,SEGINTHANDMOV DS,AX ;置用戶定義的中斷處理MOV DX,OFFSETINTHAND;程序INTHAND的入口MOV AL,N ;地址(段地址和偏移地址)MOV AH,25H ;設(shè)置新的中斷向量INT 21H例:使用DOS功能調(diào)用存取中斷向量。2/5/202334 POP DS ┆ POP DX ;恢復(fù)原中斷向量 POP DS MOV AL,N MOV AH,25H INT 21H RETINTHAND: ;中斷處理程序 ┆

IRET2/5/202335當(dāng)中斷發(fā)生時(shí),由硬件自動(dòng)完成下列動(dòng)作:(1)取中斷類(lèi)型號(hào)N。(2)標(biāo)志寄存器(PSW)內(nèi)容入棧。(3)當(dāng)前代碼段寄存器(CS)內(nèi)容入棧。(4)當(dāng)前指令計(jì)數(shù)器(IP)內(nèi)容入棧。(5)禁止外部中斷和單步中斷(IF=0,TF=0)。(6)從中斷向量表中取4*N的字節(jié)內(nèi)容送IP,取 4*N+2的字節(jié)內(nèi)容送CS。(7)轉(zhuǎn)中斷處理程序。

8.3.3中斷過(guò)程2/5/202336

8.3.4中斷優(yōu)先級(jí)和中斷嵌套IBM-PC規(guī)定中斷的優(yōu)先級(jí)次序?yàn)椋簝?yōu)先級(jí)高內(nèi)部中斷(語(yǔ)法錯(cuò),INTO,INT)

非屏蔽中斷(NMI)

可屏蔽中斷(INTR)

低單步中斷

可屏蔽中斷的優(yōu)先權(quán)又分為8級(jí),在正常的優(yōu)先級(jí)方式下,優(yōu)先次序?yàn)椋篒R0、IR1、IR2、IR3、IR4、IR5、IR6、IR72/5/202337

可屏蔽中斷的優(yōu)先權(quán)又分為8級(jí),在正常的優(yōu)先級(jí)方式下,優(yōu)先次序?yàn)椋篒R0、IR1、IR2、IR3、IR4、IR5、IR6、IR7RSL

00

正常優(yōu)先級(jí)關(guān)系01

清除由L2-L0指定的中斷請(qǐng)求10

個(gè)中斷優(yōu)先級(jí)依次作循環(huán)一個(gè)位置11

各中斷優(yōu)先級(jí)依次循環(huán)到由L2-L0指定的中斷請(qǐng)求為最低2/5/202338主程序中斷請(qǐng)求

1#中斷響應(yīng)1#中斷服務(wù)子程序2#中斷響應(yīng)2#中斷服務(wù)子程序3#3#中斷服務(wù)子程序IRETIRETIRET斷點(diǎn)中斷嵌套:高優(yōu)先級(jí)的中斷請(qǐng)求能打斷正在處理中的低級(jí)中斷服務(wù)程序;在較高級(jí)的中斷服務(wù)程序結(jié)束后,可返回被打斷的低級(jí)中斷服務(wù)程序,繼續(xù)執(zhí)行。優(yōu)先級(jí):#1<#2<#3STI和EOI在中斷嵌套中如何是使用?如果想讓低級(jí)中斷中斷正在服務(wù)的高級(jí)中斷應(yīng)怎么做?2/5/202339(1)中斷處理流程圖(2)中斷服務(wù)子程序結(jié)構(gòu)1)保護(hù)現(xiàn)場(chǎng)(類(lèi)似于執(zhí)行通用子程序)2)開(kāi)中斷(可選)3)執(zhí)行關(guān)于當(dāng)前中斷源或異常處理所要求的I/O等程序操作4)關(guān)中斷(可選)5)送中斷結(jié)束命令給(EOI)6)恢復(fù)現(xiàn)場(chǎng)7)中斷返回

8.3.5中斷處理的一般過(guò)程YNYYNN2/5/202340

中斷控制

子程序調(diào)用程序進(jìn)入方式

外部隨機(jī)請(qǐng)求

CALL指令程序進(jìn)入時(shí)刻

當(dāng)前指令執(zhí)行后 執(zhí)行CALL指令后保護(hù)/恢復(fù)現(xiàn)場(chǎng)

視需要設(shè)置

視需要設(shè)置保護(hù)/恢復(fù)斷點(diǎn)

PSW/CS/IP CS/IP返回主程序指令

執(zhí)行IRET

執(zhí)行RET參數(shù)傳遞

無(wú)

無(wú)比較:中斷控制與子程序調(diào)用2/5/202341【例8.5】編一段中斷處理程序,在主程序運(yùn)行的過(guò)程中,每隔10秒鐘響鈴一次,同時(shí)在屏幕上顯示“Thebellisring!”。

在系統(tǒng)定時(shí)器的中斷處理程序中,有一條中斷指令I(lǐng)NT1CH,時(shí)鐘中斷每發(fā)生一次(約每秒中斷18.2次)都嵌套調(diào)用一次1CH的處理程序。在ROMBIOS例程中,1CH的處理程序只有一條IRET指令,實(shí)際上它沒(méi)有作任何工作,只是為用戶提供了一個(gè)中斷類(lèi)型號(hào)。如果用戶有某種定時(shí)周期性的工作需要完成,就可以利用系統(tǒng)定時(shí)器的中斷間隔,用自己設(shè)計(jì)的處理程序來(lái)代替原有的1CH中斷程序。2/5/202342編程如下:DATA SEGMENTCOUNT DW1MESS DB‘Thebellisring!’,0DH,0AH,’$’DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATAMAIN PROCFARSTART:PUSH DS SUB AX,AXPUSH AX MOV AX,DATA MOV DS,AX

MOV AL,1CH ;取中斷向量

MOV AH,35H

INT 21H2/5/202343PUSH ES ;存原中斷向量段址PUSH BX ;存原中斷向量偏移量PUSH DSMOV DX,OFFSETRING ;新偏移量送DXMOV AX,SEGRINGMOV DS,AX ;新段址送DSMOV AL,1CHMOV AH,25HINT 21H ;寫(xiě)入新的中斷向量POP

DSIN AL,21H ;讀取中斷屏蔽字AND AL,11111110B ;允許定時(shí)器中斷OUT 21H,ALSTI ;開(kāi)中斷MOV DI,2000DELAY:MOVSI,3000 ;延時(shí)

DELAY1:DEC SIJNZDELAY1DECDIJNZDELAYPOPDX ;恢復(fù)原中斷向量POPDSMOVAL,1CHMOVAH,25HINT21HMAINENDPRING: PROC NEAR

PUSH DS PUSH AX PUSH CX PUSH DX

MOV AX,DATA MOV DS,AX2/5/202344

STI ;開(kāi)中斷 DEC COUNT ;計(jì)秒值

JNZ EXIT

MOV DX,OFFSETMESS MOV AH,09H INT 21H

MOV DX,100

IN AL,61H AND AL,0FCHSOUND:XOR AL,02 OUT 61H,AL;揚(yáng)聲器發(fā)聲

MOV CX,140HWAIT1: LOOP WAIT1;延時(shí)等待

DEC DX JNE SOUND

MOV COUNT,182EXIT: CLI ;關(guān)中斷

POP DX POP CX POP AX POP DS IRET ;中斷返回RING ENDPCODE ENDS END START2/5/202345例8.6在配置了鍵盤(pán)中斷輸入(中斷類(lèi)型09)和打印機(jī)輸出(中斷類(lèi)型為0fh)兩種外部設(shè)備的80x86的中斷系統(tǒng)中,要求從鍵盤(pán)上接收一個(gè)字符,同時(shí)對(duì)32字節(jié)的輸入緩沖區(qū)進(jìn)行測(cè)試,如果緩沖區(qū)已滿,則鍵盤(pán)掛起(禁止鍵盤(pán)中斷輸入),由打印機(jī)輸出一個(gè)信息。鍵盤(pán)和打印機(jī)分別由中斷屏蔽寄存器(21h)的1位和7位控制。鍵盤(pán)的輸入寄存器的端口地址為60h,控制寄存器的端口地址為61h.打印機(jī)輸出寄存器的端口地址為378h,打印機(jī)控制寄存器的端口地址為37ah。2/5/202346例8.7除數(shù)為0的軟件中斷(類(lèi)型0)處理程序

int21h的功能4ch,該功能是惟一不依賴于任何段寄存器內(nèi)容的中止功能。該功能的另一個(gè)優(yōu)點(diǎn)是能在al中返回一個(gè)表明程序是否正常終止的出口代碼,al:00正常終止,01用ctrl_C終止,02嚴(yán)重設(shè)備錯(cuò)誤引起終止;03用功能調(diào)用31h終止,0ffhcpu

錯(cuò)誤引起終止。2/5/2023471.假設(shè)字節(jié)單元(06925H)=12H,(06926H)=45H,(06927H)=78H,那么字單元(06925H)=

,字單元(06926H)=

。

a.1245H

b.4578H

c.4512H

d.7845H2.邏輯運(yùn)算指令都是按

進(jìn)行操作的,指令執(zhí)行后只設(shè)置標(biāo)志位,不保留結(jié)果的邏輯運(yùn)算指令是

。

a.位

b.字節(jié)

c.字

d.BCD碼

e.AND

f.OR

g.XOR

h.

TEST3.和指令A(yù)NDAL,55AND0F0H等效的指令是

,和MOVBX,0FHEQ1111B等效的指令是

。

a.ANDAL,55H

b.ANDAL,0F5H

c.ANDAL,50H

d.ANDAL,0F0H

e.MOVBX,0000H

f.MOVBX,0FH

g.MOVBX,0FFH

h.MOVBX,0FFFFH4.過(guò)程定義開(kāi)始的偽指令是

。

宏定義結(jié)束的偽指令是

a.SEGMENT

b.MACRO

c.PROC

d.ASSUME

e.END

f.ENDS

g.ENDM

h.ENDP5.將數(shù)據(jù)37H定義為字節(jié)變量X1的語(yǔ)句是

,數(shù)據(jù)37H定義為字變量X2的語(yǔ)句是

。

a.X1DB37

b.X2DB37

c.X1DW37H

d.X2DW37H

e.X1DB37H

g.X2DB37H6.互換指令XCHG可以在兩個(gè)寄存器之間互換數(shù)據(jù),也可以在

之間互換數(shù)據(jù)。

a.寄存器

b.立即數(shù)

c.存儲(chǔ)單元

d.堆棧7.對(duì)程序流向的控制和轉(zhuǎn)移,就是對(duì)執(zhí)行指令地址的修改。如在同一段內(nèi)偏移,則修改

,如在兩個(gè)段之間轉(zhuǎn)移,則修改

。

a.IP

b.CS

c.CS和IP

d.CS或IP2/5/2023481.8088/8086CPU內(nèi)部共有

個(gè)寄存器,其中有

個(gè)通用寄存器、

個(gè)變址寄存器、

個(gè)段寄存器。2.8088/8086CPU有

種數(shù)據(jù)尋址方式,其中采用

尋址方式的指令執(zhí)行速度最快。3.IBM-PC計(jì)算機(jī)全部指令的集合稱(chēng)為它的

。這些指令按功能可以分為六大類(lèi):數(shù)據(jù)傳送指令、算術(shù)指令、

、串處理指令、

。4.在不改變段寄存器的前提下,IBM-PC計(jì)算機(jī)內(nèi)存尋址的最大范圍是

字節(jié)。若CS=1234H,SS=2341H,DS=3412H,BP=8756H,則以BP寄存器間接尋址的非段超越的內(nèi)存單元的物理地址是

。5.程序有順序結(jié)構(gòu)

、

、

四種結(jié)構(gòu)。6.循環(huán)程序有兩種結(jié)構(gòu)形式,一種是

,另一種是

,當(dāng)有可能一次也無(wú)需執(zhí)行循環(huán)體時(shí)采用前者。7.8088/8086允許使用

個(gè)中斷向量,每個(gè)中斷向量占

個(gè)字節(jié),系統(tǒng)的低段地址從

存放著中斷向量表。8.下面是對(duì)DOS功能調(diào)用方法的簡(jiǎn)單說(shuō)明:

(1)在AH寄存器中存入所要調(diào)用功能的

。

(2)根據(jù)所調(diào)用功能的規(guī)定設(shè)置

(3)用

指令轉(zhuǎn)入子程序入口。

(4)相應(yīng)的子程序運(yùn)行完后,可以按規(guī)定取得

2/5/2023491、在指令系統(tǒng)中,段內(nèi)、段間返回均為RET指令。試回答:(1)執(zhí)行段內(nèi)返回RET指令時(shí),執(zhí)行的操作是:(2)執(zhí)行段間返回RET指令時(shí),執(zhí)行的操作是:2、ARY

DW

10

DUP(?)┇MOV

AL,TYPE

ARYMOV

BL,LENGTH

ARYMOV

CL,SIZE

ARY上述MOV指令序列執(zhí)行后的結(jié)果是什么?3、設(shè)某數(shù)據(jù)段:

DATA

SEGMENTORG

20HNUM1=8NUM2=NUM1+10HDA1

DB'COMPUTER'DB

0AH,0DHCOUNT

EQU

$-DA1DA2

DW'CO','MP','UT','ER'DATA

ENDS試回答:(1)DA1的偏移地址是:___________________(2)COUNT的值是___________________________________(3)DA2+5字節(jié)單元的內(nèi)容是_________________________________2/5/20235013.在一段匯編程序中多次調(diào)用另一段程序,用宏指令比用子程序?qū)崿F(xiàn)起來(lái)(

)。參考答案為:B

A.占內(nèi)存空間小,但速度慢B.占內(nèi)存空間大,但速度快

C.占內(nèi)存空間相同,速度快D.占內(nèi)存空間相同,速度慢14.在程序執(zhí)行過(guò)程中,IP寄存器中始終保存的是(

)。參考答案為:B

A.上一條指令的首地址

B.下一條指令的首地址

C.正在執(zhí)行指令的首地址D.需計(jì)算有效地址后才能確定地址15.PSW寄存器中共有(

)位條件狀態(tài)位,有(

)位控制狀態(tài)位。參考答案為:A

A.6、3

B.3、6

C.8、4

D.4、816.下列指令執(zhí)行時(shí)出錯(cuò)的是(

)。參考答案為:A

A.ADDBUF1,BUF2

B.JMPDWORDPTRDAT[BX]

C.MOVAX,[BX+DI]NUM

D.TESTAL,08H17.已知(AX)=1234H,執(zhí)行下述三條指令后,(AX)=(

)。參考答案為:D

MOVBX,AX

NEGBX

ADDAX,BXA.1234H

B.0EDCCH

C.6DCCH

D.0000H18.在下列指令中,(

)指令的執(zhí)行會(huì)影響條件碼中的CF位。參考答案為:D

A.JMPNEXT

B.JCNEXT

C.INCBX

D.SHLAX,119.串指令中的目的操作數(shù)地址是由(

)提供。參考答案為:C

A.SS:[BP]

B.DS:[SI]

C.ES:[DI]

D.CS:[IP]20.將DX的內(nèi)容除以2,正確的指令是(

)。參考答案為:C

A.DIV2

B.DIVDX,2

C.SARDX,1

D.SHLDX,12/5/202351l.變量和標(biāo)號(hào)的區(qū)別是________。

2.下述指令的目操作數(shù)是存放在堆棧段中,請(qǐng)?zhí)钊胝_答案。ADD____[BX],CH。

3.段地址和偏移地址為2000:5076的存儲(chǔ)單元物理地址是____。

4.在下列程序段括號(hào)中,填入正確的答案。(

SEGMENTBUFDB12H,56HDATAENDS...CODE(

5.指出下列指令錯(cuò)誤原因,填入括號(hào)中。A.MOVAX,BL;(

)B.MOVCS,AX;(

)C.DECGAMA[BX];(

)D.MOVES,5600H;(

)E.SUBAX,DS;(

6.下列語(yǔ)句在存貯器中分別為變量分配多少字節(jié)?請(qǐng)?zhí)钊肜ㄌ?hào)中。VR1DW?

;(

)VR2DW4DUP(?),2;(

)CONTEQU10;(

2/5/2023521.在8086/8088系統(tǒng)中,存儲(chǔ)器是分段的,每段最大長(zhǎng)度是_______字節(jié),段內(nèi)偏移地址從_______到_______。2.在程序調(diào)試時(shí),顯示某指令存放地址是2340:0056,則物理地址是_______。3.匯編語(yǔ)言源程序中的語(yǔ)句有三種類(lèi)型,它們是_______語(yǔ)句,_______語(yǔ)句和_______語(yǔ)句。4.指令MOVAX,[BX+SI+10H]源操作數(shù)尋址方式是_______。5.執(zhí)行段間返回指令RET時(shí),將棧頂?shù)囊粋€(gè)字彈出到_______后,又彈出一個(gè)字到_______寄存器中。6.已知DS=3000H,DI=1200H,(31200H)=64H,(31201H)=93H,執(zhí)行NEGWORDPTR[DI]后,(31200H)=_______,(31201H)=_______。7.執(zhí)行下列指令序列MOVAL,80HMOVBL,08HCBWIDIVBL則AH=_______AL=_______。8.已知數(shù)據(jù)定義語(yǔ)句ORG120HVECT1DW200HVECT2DWVECT1執(zhí)行

MOVAX,VECT1AX=_______MOVBX,VECT2BX=_______。

2/5/202353判斷以下各語(yǔ)句是否有錯(cuò)誤,如有錯(cuò)誤請(qǐng)說(shuō)明錯(cuò)誤原因1.MOV

AX,02.MOV

[1000H],1000H3.MOV

BL,AX4.MOV

[0],AX5.PUSH

PSW6.SHR

DX,BL7.MUL

AL,BL8.AND

AX,[1000]9.XCHG

CS,DS10.LDS

AL,[BX]2/5/2023541.下列語(yǔ)句在存儲(chǔ)器中分別為變量數(shù)據(jù)區(qū)分配多少個(gè)字節(jié)單元?(1)VAR3

DD

10(2)VAR4

DW

4

DUP(?),22.設(shè)DS=2000H,BX=1256H,變量TABLE的偏移地址為20A1H,(232F7H)=3280H.下列指令分別執(zhí)行后,IP的值各是多少?(1)JMP

BXIP=___________________(2)JMP

TABLE[BX]IP=___________________3.選用NOT,AND,OR

XOR邏輯指令編寫(xiě)一指令序列,實(shí)現(xiàn)將AL第0位,第2位同時(shí)置1,其他位變反。

1.指令

ARRAYDB100DUP(0,3DUP(1,2),0,3)

匯編后為ARRAY存儲(chǔ)單元分配

個(gè)字節(jié)。2.指令

LEASI,DATA1可用指令(

)代替。3.中斷向量表的地址范圍是(

)。4.指令

MOVAX,256[BX][SI]的尋址方式是

。5.STRINGDB‘AB’,0,0,‘CD’,0,0,‘EF’,0,0請(qǐng)用DW偽指令改寫(xiě)上述語(yǔ)句,必須保持內(nèi)存單元內(nèi)容不變。(

2/5/2023551.在指令系統(tǒng)中,段內(nèi)、段間返回均為RET指令。試回答:

(1)執(zhí)行段內(nèi)返回RET指令時(shí),執(zhí)行的操作是:

(2)執(zhí)行段間返回RET指令時(shí),執(zhí)行的操作是:2.用兩種辦法,分別只用一條指令實(shí)現(xiàn)將DA1數(shù)據(jù)區(qū)中數(shù)據(jù)個(gè)數(shù)送入CX。DA1DB20HDUP(?)

DA2DW10H,45H,7856H3.已知:BX=1357H,BP=2468H,SI=1000H,DI=2000H,SS=1000H,DS=2000H,ES=3000H,試分別指出下列各指令中存儲(chǔ)器操作數(shù)的物理地址。

MOVAL,

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論