IBMPC匯編程序設(shè)計(jì)第8章課件_第1頁(yè)
IBMPC匯編程序設(shè)計(jì)第8章課件_第2頁(yè)
IBMPC匯編程序設(shè)計(jì)第8章課件_第3頁(yè)
IBMPC匯編程序設(shè)計(jì)第8章課件_第4頁(yè)
IBMPC匯編程序設(shè)計(jì)第8章課件_第5頁(yè)
已閱讀5頁(yè),還剩56頁(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ì)7/23/20231概況1

您的內(nèi)容打在這里,或者通過復(fù)制您的文本后。概況2

您的內(nèi)容打在這里,或者通過復(fù)制您的文本后。概況3

您的內(nèi)容打在這里,或者通過復(fù)制您的文本后。+++整體概況

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

每種輸入輸出設(shè)備都是通過硬件接口或控制器與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è)7/23/20234控制信息:是由CPU發(fā)送給外部設(shè)備的,命令其處于某種方式或執(zhí)行某種操作。狀態(tài)信息:從接口輸入的狀態(tài)信息表示I/O設(shè)備當(dāng)前的狀態(tài)。數(shù)據(jù)信息:則是I/O設(shè)備和CPU真正要交換的信息。數(shù)據(jù)信息可分為三種類型:數(shù)字量、模擬量和開關(guān)量。這些信息可以是并行的,也可以是串行的。

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

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

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

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

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指令7/23/202314(1)INAX,28HMOVDATA_WORD,AX(2)INAL,27HTESTAL,00000100JNZERRORMOVDX,126INAL,DXORAL,80HOUT

DX,AL7/23/202315codesegmentmainprocfarassumecs:codes:pushdsxorax,axpushaxmovbx,6000;fmovcx,1000;timesmovdx,cx

inal,61handal,11111100b

trig:xoral,2

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

P

U打

機(jī)

器打印機(jī)DBSTBBUSYCB

DB

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

【例】向打印機(jī)輸出字符。7/23/2023187/23/202319:┆源程序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,ALMOV AL,0CH OUT DX,AL INC BX ;指向下一輸出字符 LOOP BG┆7/23/202320在看一個(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)備位。7/23/202321

input:in al,stat1test al,20hjz dev2call farptrproc1

dev2:in al,stat2test al,20hjz dev3call farptrproc2

dev3:in al,stat3 test al,20h jz no_input call farptrproc3no_input7/23/202322

查詢式傳輸過程的優(yōu)點(diǎn)是硬件開銷小,使用起來(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è)通過接口電路向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中斷傳送方式7/23/202323外部設(shè)備是如何連到主機(jī)上的?7/23/2023248.3.18086中斷的分類:內(nèi)部中斷和硬件中斷(1)內(nèi)部中斷

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

除數(shù)為0中斷——類型0中斷l(xiāng)溢出中斷——類型4中斷INTOl

單步中斷——類型1中斷l(xiāng)

斷點(diǎn)中斷——類型3中斷l(xiāng)

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

系統(tǒng)板的RAM在讀寫時(shí)產(chǎn)生奇偶校驗(yàn)錯(cuò);I/O通道中的擴(kuò)展選件出現(xiàn)奇偶校驗(yàn)錯(cuò);協(xié)處理器8087的異常狀態(tài)產(chǎn)生的中斷。?可屏蔽中斷INTR是由外部設(shè)備通過一片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è)中斷屏蔽寄存器,端口地址為21h7/23/202326結(jié)束硬件中斷moval,20hout20h,al中斷屏蔽寄存器和中斷命令寄存器只允許鍵盤中斷:

moval,11111101

out21h,al7/23/202327外部設(shè)備向cpu發(fā)出中斷請(qǐng)求,cpu是否相應(yīng)還與IF有關(guān)STI——開中斷指令將標(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)求7/23/2023288.3.2中斷向量表

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

中斷向量表中的存儲(chǔ)地址=中斷類型碼n×4什么是中斷向量、中斷向量地址、中斷向量表?7/23/2023297/23/202330表8-3中斷向量表地址(Hex)類型碼中斷名稱

0—30除以04—71單步8—B2非屏蔽C—F3斷點(diǎn)10—134溢出14—175打印屏幕18—1B6保留1D—1F7保留20—238定時(shí)器24—279鍵盤28—2BA保留的硬中斷2C—2FB異步通信(COM2)30—33C異步通信(COM1)34—37D硬盤

38—3BE軟盤3C—3FF并行打印機(jī)地址(Hex)類型碼中斷名稱40—4310視頻顯示I/O調(diào)用44—4711設(shè)備檢測(cè)調(diào)用48—4B12存儲(chǔ)器容量檢測(cè)4C—4F13軟/硬盤I/O調(diào)用50—5314通信I/O調(diào)用54—5715盒式磁帶I/O調(diào)用58—5B16鍵盤I/O調(diào)用5C—5F17打印機(jī)I/O調(diào)用60—6318ROMBASIC64—6719引導(dǎo)程序入口68—6B1A時(shí)間調(diào)用6C—6F1B鍵盤CTRL-BREAK控制70—731C定時(shí)器報(bào)時(shí)74—771D顯示器參數(shù)表78—7B1E軟盤參數(shù)表7C—7F1F字符點(diǎn)陣結(jié)構(gòu)參數(shù)表BIOS中斷向量7/23/202331地址(Hex)類型碼中斷名稱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ì)磁盤讀98—9B26絕對(duì)磁盤寫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中斷向量7/23/202332用指令來(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ào)擴(kuò)充自己的需要的中斷功能,對(duì)新增加的中斷功能要在中斷向量表中建立相應(yīng)的中斷向量。7/23/202333

用戶在編寫自己的中斷處理程序代替系統(tǒng)中的某個(gè)中斷處理功能時(shí),要注意保留原來(lái)的中斷向量。程序結(jié)束時(shí),要恢復(fù)原來(lái)的中斷向量??梢允褂胐os功能調(diào)用來(lái)存取中斷向量取中斷向量預(yù)置AH=35H,AL=中斷類型號(hào)執(zhí)行INT21H——把類型號(hào)為AL的中斷向量取出到ES:BX中設(shè)置中斷向量預(yù)置AH=25H,AL=中斷類型號(hào),DS:DX=中斷向量執(zhí)行INT21H——把DS:DX指向的中斷向量放置到中斷向量表中類型號(hào)為AL的中斷向量處7/23/202334┆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)用存取中斷向量。7/23/202335 POP DS ┆ POP DX ;恢復(fù)原中斷向量 POP DS MOV AL,N MOV AH,25H INT 21H RETINTHAND: ;中斷處理程序 ┆

IRET7/23/202336當(dāng)中斷發(fā)生時(shí),由硬件自動(dòng)完成下列動(dòng)作:(1)取中斷類型號(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中斷過程7/23/202337

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、IR77/23/202338

可屏蔽中斷的優(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)求為最低7/23/202339主程序中斷請(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)怎么做?7/23/202340(1)中斷處理流程圖(2)中斷服務(wù)子程序結(jié)構(gòu)1)保護(hù)現(xiàn)場(chǎng)(類似于執(zhí)行通用子程序)2)開中斷(可選)3)執(zhí)行關(guān)于當(dāng)前中斷源或異常處理所要求的I/O等程序操作4)關(guān)中斷(可選)5)送中斷結(jié)束命令給(EOI)6)恢復(fù)現(xiàn)場(chǎng)7)中斷返回

8.3.5中斷處理的一般過程YNYYNN7/23/202341

中斷控制

子程序調(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)用7/23/202342【例8.5】編一段中斷處理程序,在主程序運(yùn)行的過程中,每隔10秒鐘響鈴一次,同時(shí)在屏幕上顯示“Thebellisring!”。

在系統(tǒng)定時(shí)器的中斷處理程序中,有一條中斷指令I(lǐng)NT1CH,時(shí)鐘中斷每發(fā)生一次(約每秒中斷18.2次)都嵌套調(diào)用一次1CH的處理程序。在ROMBIOS例程中,1CH的處理程序只有一條IRET指令,實(shí)際上它沒有作任何工作,只是為用戶提供了一個(gè)中斷類型號(hào)。如果用戶有某種定時(shí)周期性的工作需要完成,就可以利用系統(tǒng)定時(shí)器的中斷間隔,用自己設(shè)計(jì)的處理程序來(lái)代替原有的1CH中斷程序。7/23/202343編程如下: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 21H7/23/202344PUSH ES ;存原中斷向量段址PUSH BX ;存原中斷向量偏移量PUSH DSMOV DX,OFFSETRING ;新偏移量送DXMOV AX,SEGRINGMOV DS,AX ;新段址送DSMOV AL,1CHMOV AH,25HINT 21H ;寫入新的中斷向量POP DSIN AL,21H ;讀取中斷屏蔽字AND AL,11111110B ;允許定時(shí)器中斷OUT 21H,ALSTI ;開中斷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,AX7/23/202345

STI ;開中斷 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 START7/23/202346例8.6在配置了鍵盤中斷輸入(中斷類型09)和打印機(jī)輸出(中斷類型為0fh)兩種外部設(shè)備的80x86的中斷系統(tǒng)中,要求從鍵盤上接收一個(gè)字符,同時(shí)對(duì)32字節(jié)的輸入緩沖區(qū)進(jìn)行測(cè)試,如果緩沖區(qū)已滿,則鍵盤掛起(禁止鍵盤中斷輸入),由打印機(jī)輸出一個(gè)信息。鍵盤和打印機(jī)分別由中斷屏蔽寄存器(21h)的1位和7位控制。鍵盤的輸入寄存器的端口地址為60h,控制寄存器的端口地址為61h.打印機(jī)輸出寄存器的端口地址為378h,打印機(jī)控制寄存器的端口地址為37ah。7/23/202347例8.7除數(shù)為0的軟件中斷(類型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ò)誤引起終止。7/23/2023481.假設(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.過程定義開始的偽指令是

。宏定義結(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或IP7/23/2023491.8088/8086CPU內(nèi)部共有

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

個(gè)通用寄存器、

個(gè)變址寄存器、

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

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

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

。這些指令按功能可以分為六大類:數(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ī)定取得

7/23/2023501、在指令系統(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)容是_________________________________7/23/20235113.在一段匯編程序中多次調(diào)用另一段程序,用宏指令比用子程序?qū)崿F(xiàn)起來(lái)()。參考答案為:BA.占內(nèi)存空間小,但速度慢B.占內(nèi)存空間大,但速度快C.占內(nèi)存空間相同,速度快D.占內(nèi)存空間相同,速度慢14.在程序執(zhí)行過程中,IP寄存器中始終保存的是()。參考答案為:BA.上一條指令的首地址B.下一條指令的首地址C.正在執(zhí)行指令的首地址D.需計(jì)算有效地址后才能確定地址15.PSW寄存器中共有()位條件狀態(tài)位,有()位控制狀態(tài)位。參考答案為:AA.6、3B.3、6C.8、4D.4、816.下列指令執(zhí)行時(shí)出錯(cuò)的是()。參考答案為:AA.ADDBUF1,BUF2B.JMPDWORDPTRDAT[BX]C.MOVAX,[BX+DI]NUMD.TESTAL,08H17.已知(AX)=1234H,執(zhí)行下述三條指令后,(AX)=()。參考答案為:DMOVBX,AXNEGBXADDAX,BXA.1234HB.0EDCCHC.6DCCHD.0000H18.在下列指令中,()指令的執(zhí)行會(huì)影響條件碼中的CF位。參考答案為:DA.JMPNEXTB.JCNEXTC.INCBXD.SHLAX,119.串指令中的目的操作數(shù)地址是由()提供。參考答案為:CA.SS:[BP]B.DS:[SI]C.ES:[DI]D.CS:[IP]20.將DX的內(nèi)容除以2,正確的指令是()。參考答案為:CA.DIV2B.DIVDX,2C.SARDX,1D.SHLDX,17/23/202352l.變量和標(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;(

7/23/2023531.在8086/8088系統(tǒng)中,存儲(chǔ)器是分段的,每段最大長(zhǎng)度是_______字節(jié),段內(nèi)偏移地址從_______到_______。2.在程序調(diào)試時(shí),顯示某指令存放地址是2340:0056,則物理地址是_______。3.匯編語(yǔ)言源程序中的語(yǔ)句有三種類型,它們是_______語(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,

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論