第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ō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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端口就只有最基本的輸入輸出指令),但能最大程度地滿(mǎn)足存儲(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)行輸入/輸出之前,不需要查詢(xún)外設(shè)的狀態(tài).2)有條件傳送又稱(chēng)查詢(xún)式傳送,在每次輸入/輸出之前,先要讀取外設(shè)的狀態(tài),滿(mǎn)足一定的條件才能進(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

;忙,重查詢(xún)

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

查詢(xún)式傳輸過(guò)程的優(yōu)點(diǎn)是硬件開(kāi)銷(xiāo)小,使用起來(lái)比較簡(jiǎn)單。但在此方式下,CPU要不斷地查詢(xún)外設(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在滿(mǎn)足一定的條件下,暫停執(zhí)行當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)入執(zhí)行相應(yīng)能夠進(jìn)行輸入/輸出操作的子程序,待輸入/輸出操作執(zhí)行完畢之后CPU即返回繼續(xù)執(zhí)行原來(lái)被中斷的主程序。這樣CPU就避免了把大量時(shí)間耗費(fèi)在等待、查詢(xún)狀態(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為用戶(hù)軟中斷保留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

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

用戶(hù)在編寫(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 ;置用戶(hù)定義的中斷處理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)有作任何工作,只是為用戶(hù)提供了一個(gè)中斷類(lèi)型號(hào)。如果用戶(hù)有某種定時(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ū)已滿(mǎn),則鍵盤(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,該功能是惟一不依賴(lài)于任何段寄存器內(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)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論