微機(jī)接口原理匯編語言程序設(shè)計(jì)_第1頁
微機(jī)接口原理匯編語言程序設(shè)計(jì)_第2頁
微機(jī)接口原理匯編語言程序設(shè)計(jì)_第3頁
微機(jī)接口原理匯編語言程序設(shè)計(jì)_第4頁
微機(jī)接口原理匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、本章教學(xué)重點(diǎn)和難點(diǎn):本章教學(xué)重點(diǎn)和難點(diǎn): 匯編語言語句的書寫格式及運(yùn)行環(huán)境與步驟匯編語言語句的書寫格式及運(yùn)行環(huán)境與步驟 匯編語言的數(shù)據(jù)定義偽指令、符號定義偽指匯編語言的數(shù)據(jù)定義偽指令、符號定義偽指 令、段定義偽指令等偽指令令、段定義偽指令等偽指令 順序、分支、循環(huán)基本程序的設(shè)計(jì)。順序、分支、循環(huán)基本程序的設(shè)計(jì)。 匯編語言程序與匯編語言程序與C C語言程序的調(diào)用方法語言程序的調(diào)用方法 中斷服務(wù)程序、模塊化程序設(shè)計(jì)中斷服務(wù)程序、模塊化程序設(shè)計(jì) 第第5章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 本章教學(xué)內(nèi)容:本章教學(xué)內(nèi)容: 5.1 5.1 匯編語言簡述匯編語言簡述 5.2 5.2 匯編語言的偽指令匯編語

2、言的偽指令 5.3 5.3 匯編語言程序設(shè)計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 5.4 5.4 中斷服務(wù)程序設(shè)計(jì)中斷服務(wù)程序設(shè)計(jì) 5.5 5.5 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 機(jī)器語言機(jī)器語言:計(jì)算機(jī)最終能識別并執(zhí)行的是以二進(jìn)制代:計(jì)算機(jī)最終能識別并執(zhí)行的是以二進(jìn)制代 碼表示的。碼表示的。 匯編語言匯編語言:用意義明確的助記符來表示指令的操作碼、:用意義明確的助記符來表示指令的操作碼、 操作數(shù),對機(jī)器的依賴性很大。主要用于編寫計(jì)算機(jī)操作數(shù),對機(jī)器的依賴性很大。主要用于編寫計(jì)算機(jī) 的系統(tǒng)程序、實(shí)時(shí)控制程序等。的系統(tǒng)程序、實(shí)時(shí)控制程序等。 匯編語言源程序匯編語言源程序(匯編語言程序):是用匯編語言編(匯編語

3、言程序):是用匯編語言編 寫的程序。寫的程序。 計(jì)算機(jī)必須將匯編語言程序翻譯成由機(jī)器代碼組成的計(jì)算機(jī)必須將匯編語言程序翻譯成由機(jī)器代碼組成的 目標(biāo)程序才能執(zhí)行。這個(gè)翻譯過程稱為目標(biāo)程序才能執(zhí)行。這個(gè)翻譯過程稱為匯編匯編,完成匯,完成匯 編過程的軟件就是編過程的軟件就是匯編程序匯編程序。 5.1 匯編語言簡述匯編語言簡述 面向機(jī)器面向機(jī)器 5.1.1 5.1.1 匯編語言源程序的格式匯編語言源程序的格式 例,在屏幕上顯示例,在屏幕上顯示“HELLO”HELLO”并讓機(jī)器蜂鳴器響一聲。并讓機(jī)器蜂鳴器響一聲。 DATA SEGMENT ;DATA SEGMENT ;數(shù)據(jù)段部分定義數(shù)據(jù)段部分定義 ms

4、g DB 0DHh,0DH,07H,Hello$msg DB 0DHh,0DH,07H,Hello$ DATA ENDSDATA ENDS SSEG SEGMENT STACK ;SSEG SEGMENT STACK ;堆棧段部分定義堆棧段部分定義 DB 256 DUP(?)DB 256 DUP(?) SSEG ENDSSSEG ENDS CODE SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEGASSUME CS:CODE,DS:DATA,SS:SSEG MAIN PROC FARMAIN PROC FAR PUSH DS PUSH DS

5、 MOV AX,0MOV AX,0 PUSH AXPUSH AX MOV AX,DATA ;MOV AX,DATA ;設(shè)置數(shù)據(jù)段設(shè)置數(shù)據(jù)段 MOV DS,AXMOV DS,AX LEA DX,msg ;LEA DX,msg ;取字符串地址取字符串地址 MOV AH,09H ;MOV AH,09H ;顯示字符串,顯示字符串, INT 21HINT 21H RET ;RET ;程序結(jié)束,返回操作系統(tǒng)程序結(jié)束,返回操作系統(tǒng) MAIN ENDPMAIN ENDP CODE ENDSCODE ENDS END MAIN ;END MAIN ; 源程序結(jié)束源程序結(jié)束 1 1匯編語言程序的一般組成匯編語言程

6、序的一般組成 (1 1)一個(gè)程序由)一個(gè)程序由SEGMENTSEGMENT和和ENDSENDS等定義成三類段:等定義成三類段: 數(shù)據(jù)段:用來定義變量和其他數(shù)據(jù);數(shù)據(jù)段:用來定義變量和其他數(shù)據(jù); 堆棧段:為程序堆棧操作提供空間;堆棧段:為程序堆棧操作提供空間; 代碼段:存放代碼,即程序指令。代碼段:存放代碼,即程序指令。 一個(gè)程序中一定有至少一個(gè)代碼段;可以沒有堆棧段,一個(gè)程序中一定有至少一個(gè)代碼段;可以沒有堆棧段, 若沒有堆棧段在程序連接時(shí)會給出警告信息;也可以若沒有堆棧段在程序連接時(shí)會給出警告信息;也可以 定義多個(gè)段。定義多個(gè)段。 (2 2)匯編語言源程序的基本結(jié)構(gòu)是)匯編語言源程序的基本結(jié)

7、構(gòu)是分段結(jié)構(gòu)分段結(jié)構(gòu)形式。形式。 每個(gè)邏輯段都有一個(gè)名字,叫段名,而且在每個(gè)邏輯段都有一個(gè)名字,叫段名,而且在SEGMENTSEGMENT 開始和開始和ENDSENDS結(jié)束時(shí)的名字必須一致。結(jié)束時(shí)的名字必須一致。 (3 3)每個(gè)邏輯段內(nèi)由若干語句行組成,每個(gè)語句)每個(gè)邏輯段內(nèi)由若干語句行組成,每個(gè)語句 行可以是指令性語句、指示性語句或者宏指令。行可以是指令性語句、指示性語句或者宏指令。 (4 4)代碼段又是由若干個(gè)子程序組成。每個(gè)子程)代碼段又是由若干個(gè)子程序組成。每個(gè)子程 序以序以PROCPROC語句開始定義,語句開始定義,ENDPENDP語句結(jié)束定義。每個(gè)語句結(jié)束定義。每個(gè) 子程序也有自己

8、的名字,叫過程名或子程序名,且子程序也有自己的名字,叫過程名或子程序名,且 在在PROCPROC開始和開始和ENDPENDP結(jié)束時(shí)的名字必須一致。結(jié)束時(shí)的名字必須一致。 (5 5)一個(gè)程序只有一個(gè)起始點(diǎn)。整個(gè)源程序以)一個(gè)程序只有一個(gè)起始點(diǎn)。整個(gè)源程序以ENDEND 結(jié)束。結(jié)束。 2 2匯編語言語句的類型匯編語言語句的類型 匯編語言源程序中的語句可分為五類:匯編語言源程序中的語句可分為五類: (1 1)指令語句,是能產(chǎn)生目標(biāo)代碼,)指令語句,是能產(chǎn)生目標(biāo)代碼,CPUCPU可執(zhí)行的能可執(zhí)行的能 完成特定功能的語句,主要由完成特定功能的語句,主要由CPUCPU指令組成。指令組成。 mov ax,d

9、ata ;mov ax,data ;設(shè)置數(shù)據(jù)段設(shè)置數(shù)據(jù)段 (2 2)指示性語句,是一種不產(chǎn)生目標(biāo)代碼的語句,僅)指示性語句,是一種不產(chǎn)生目標(biāo)代碼的語句,僅 僅在匯編過程中告訴匯編程序應(yīng)如何匯編,也叫偽指僅在匯編過程中告訴匯編程序應(yīng)如何匯編,也叫偽指 令語句或命令語句。令語句或命令語句。 data segment ;data segment ;數(shù)據(jù)段定義開始數(shù)據(jù)段定義開始 (3 3)宏指令語句,是一個(gè)指令序列,在匯編時(shí)凡有宏)宏指令語句,是一個(gè)指令序列,在匯編時(shí)凡有宏 指令語句的都將用相應(yīng)的指令序列的目標(biāo)代碼插入。指令語句的都將用相應(yīng)的指令序列的目標(biāo)代碼插入。 (4 4)注釋語句,以分號)注釋語

10、句,以分號“;” ” 。 (5 5)空語句。)空語句。 3.3.匯編語言的語句匯編語言的語句可由四部分組成:可由四部分組成: 名字名字 操作碼項(xiàng)操作碼項(xiàng) 操作數(shù)項(xiàng)操作數(shù)項(xiàng) ;注釋;注釋 一般來說:一般來說: 名字名字是一個(gè)符號,表示本條語句的符號地址,可以為是一個(gè)符號,表示本條語句的符號地址,可以為 標(biāo)號標(biāo)號(Label)(Label)和變量和變量(Variable)(Variable),統(tǒng)稱,統(tǒng)稱標(biāo)識符標(biāo)識符。 操作碼項(xiàng)操作碼項(xiàng)可以是機(jī)器指令、偽指令和宏指令的助記符。可以是機(jī)器指令、偽指令和宏指令的助記符。 操作數(shù)項(xiàng)操作數(shù)項(xiàng)是操作碼的操作對象。操作碼在完成相應(yīng)的是操作碼的操作對象。操作碼在完

11、成相應(yīng)的 操作時(shí)要求有一系列的操作數(shù)。當(dāng)有兩個(gè)或兩個(gè)以上的操作時(shí)要求有一系列的操作數(shù)。當(dāng)有兩個(gè)或兩個(gè)以上的 操作數(shù)時(shí),各操作數(shù)之間用逗號隔開。操作數(shù)時(shí),各操作數(shù)之間用逗號隔開。 注釋字段注釋字段是以是以“;”開頭的說明部分,可以用英文或開頭的說明部分,可以用英文或 者中文書寫。注釋字段是語句的非執(zhí)行部分者中文書寫。注釋字段是語句的非執(zhí)行部分 。 5.1.2 5.1.2 匯編語言的編程環(huán)境匯編語言的編程環(huán)境 1.匯編語言的編程環(huán)境匯編語言的編程環(huán)境 硬件環(huán)境:具有基本配置的硬件環(huán)境:具有基本配置的PC機(jī)機(jī) 軟件環(huán)境:指支持匯編程序運(yùn)行和幫助建立匯軟件環(huán)境:指支持匯編程序運(yùn)行和幫助建立匯 編語言源

12、程序的一些軟件,主要包括:編語言源程序的一些軟件,主要包括: (1)編輯程序)編輯程序(記事本、記事本、EDIT.COM) (2)宏匯編程序)宏匯編程序(MASM.EXE) (3)連接程序)連接程序(LINK.EXE) (4)調(diào)試程序)調(diào)試程序(DEBUG.COM) 建立建立.ASM.ASM文件文件 產(chǎn)生產(chǎn)生.OBJ.OBJ文件文件 -R-R -D-D 產(chǎn)生產(chǎn)生.EXE.EXE文件文件 2.2.匯編語言程序上機(jī)的執(zhí)行步驟匯編語言程序上機(jī)的執(zhí)行步驟 第一步:用記事本編輯建立第一步:用記事本編輯建立.ASM.ASM匯編語言源程序文件。匯編語言源程序文件。 注意:程序的結(jié)構(gòu)與書寫格式。注意:程序的結(jié)

13、構(gòu)與書寫格式。 第二步:用第二步:用MASMMASM程序匯編成程序匯編成.OBJ.OBJ文件文件 調(diào)用調(diào)用DOSDOS系統(tǒng)進(jìn)入系統(tǒng)進(jìn)入MASM5.0MASM5.0,輸入,輸入MASMMASM命令和文件命令和文件 名回車后即可產(chǎn)生名回車后即可產(chǎn)生.OBJ.OBJ目標(biāo)程序文件。目標(biāo)程序文件。 輸入輸入MASMMASM命命 令和文件名令和文件名 匯編時(shí)輸出匯編時(shí)輸出.OBJ.OBJ,.LST.LST,.CRF.CRF三個(gè)文件并且顯示匯三個(gè)文件并且顯示匯 編源程序的正確或錯(cuò)誤結(jié)果,若出現(xiàn)編源程序的正確或錯(cuò)誤結(jié)果,若出現(xiàn)語法錯(cuò)誤語法錯(cuò)誤,則,則 根據(jù)錯(cuò)誤提示,用編輯軟件根據(jù)錯(cuò)誤提示,用編輯軟件重新調(diào)出源

14、程序重新調(diào)出源程序進(jìn)行修進(jìn)行修 改。改。 MASM5.0MASM5.0 版本介紹版本介紹 .OBJ.OBJ. LST.LST. CRFCRF 第三步:用第三步:用LINKLINK程序把程序把.OBJ.OBJ文件轉(zhuǎn)化成文件轉(zhuǎn)化成.EXE.EXE文件文件 輸入輸入LINKLINK命令和文件名回車后可輸出命令和文件名回車后可輸出.EXE.EXE等三個(gè)文件。等三個(gè)文件。 輸入輸入LINKLINK命命 令和文件名令和文件名 .EXE.EXE .MAP.MAP .LIB.LIB 沒有堆棧段沒有堆棧段 LINKLINK程序程序 版本介紹版本介紹 第四步:程序的運(yùn)行,直接鍵入文件名。第四步:程序的運(yùn)行,直接鍵

15、入文件名。 直接輸入文件名直接輸入文件名 需要時(shí)使用需要時(shí)使用DEBUGDEBUG調(diào)試并查看寄存器或存儲器單元調(diào)試并查看寄存器或存儲器單元 5.2 5.2 匯編語言的偽指令匯編語言的偽指令 偽指令偽指令:控制匯編過程的命令,又稱為匯編控制命令。:控制匯編過程的命令,又稱為匯編控制命令。 具有數(shù)據(jù)定義、存儲區(qū)分配、指示程序的開始與結(jié)束具有數(shù)據(jù)定義、存儲區(qū)分配、指示程序的開始與結(jié)束 等功能,但是沒有對應(yīng)的機(jī)器碼。將匯編語言源程序等功能,但是沒有對應(yīng)的機(jī)器碼。將匯編語言源程序 翻譯為目標(biāo)程序后,其作用消失。翻譯為目標(biāo)程序后,其作用消失。 80868086匯編語言中用到的偽指令有:匯編語言中用到的偽指

16、令有: 數(shù)據(jù)定義偽指令、符號定義偽指令、段定義偽指令、數(shù)據(jù)定義偽指令、符號定義偽指令、段定義偽指令、 過程定義偽指令、宏處理偽指令、模塊定義與連接偽過程定義偽指令、宏處理偽指令、模塊定義與連接偽 指令、處理器方式偽指令、條件偽指令、列表偽指令指令、處理器方式偽指令、條件偽指令、列表偽指令 和其它偽指令等類別。和其它偽指令等類別。 5.2.1 5.2.1 符號定義偽指令符號定義偽指令 包括變量名、標(biāo)號名、過程名、寄存器名以及指令助包括變量名、標(biāo)號名、過程名、寄存器名以及指令助 記符。常用的有記符。常用的有EQUEQU(等值命令)、(等值命令)、= =(賦值命令)和(賦值命令)和 PURGEPUR

17、GE(解除定義命令)。(解除定義命令)。 1 1基本概念基本概念 (1 1)標(biāo)識符:用來對程序中的常量、變量、記錄、)標(biāo)識符:用來對程序中的常量、變量、記錄、 結(jié)構(gòu)、段、過程、模塊等進(jìn)行命名結(jié)構(gòu)、段、過程、模塊等進(jìn)行命名。 (2 2)保留字:)保留字:80X8680X86中的寄存器名、指令助記符、偽中的寄存器名、指令助記符、偽 操作命令、表達(dá)式運(yùn)算符、屬性操作符等都是系統(tǒng)專操作命令、表達(dá)式運(yùn)算符、屬性操作符等都是系統(tǒng)專 用的保留字。用的保留字。 (3 3)符號:用符號等代替存儲單元、端口地址、數(shù))符號:用符號等代替存儲單元、端口地址、數(shù) 據(jù)表達(dá)式等。常用的有:寄存器、變量、標(biāo)號、數(shù)等。據(jù)表達(dá)式

18、等。常用的有:寄存器、變量、標(biāo)號、數(shù)等。 (4 4)常量:是固定值(即程序運(yùn)行期間不變化)就)常量:是固定值(即程序運(yùn)行期間不變化)就 稱為常量。包括稱為常量。包括數(shù)字常量和字符常量數(shù)字常量和字符常量。在匯編語言中。在匯編語言中 值相對固定不變化的數(shù)據(jù)一般以符號的形式出現(xiàn),也值相對固定不變化的數(shù)據(jù)一般以符號的形式出現(xiàn),也 叫符號常數(shù)。叫符號常數(shù)。字符常量字符常量必須用單引號括起來。必須用單引號括起來。 (5 5)變量:存放在存儲單元中的操作數(shù)就是變量,)變量:存放在存儲單元中的操作數(shù)就是變量, 因?yàn)槠渲凳强筛淖兊?。但程序中出現(xiàn)的一般是存儲單因?yàn)槠渲凳强筛淖兊摹5绦蛑谐霈F(xiàn)的一般是存儲單 元地址

19、的符號,或者說是符號地址。具體在后面再講。元地址的符號,或者說是符號地址。具體在后面再講。 (6 6)標(biāo)號:是某條指令所存放單元的符號地址,是)標(biāo)號:是某條指令所存放單元的符號地址,是 轉(zhuǎn)移控制類指令的目標(biāo)操作數(shù)。轉(zhuǎn)移控制類指令的目標(biāo)操作數(shù)。 (7 7)過程名:是某個(gè)子程序中首條指令所存放單元)過程名:是某個(gè)子程序中首條指令所存放單元 的符號地址,是調(diào)用子程序指令的目標(biāo)操作數(shù)。的符號地址,是調(diào)用子程序指令的目標(biāo)操作數(shù)。 2 2EQUEQU(等值命令)(等值命令) 格式:格式: NAME EQU EXP ;NAME EQU EXP ;用符號名用符號名NAMENAME替代替代EXPEXP 3 3=

20、 =(賦值語句)(賦值語句) 同一源程序中同一符號名不能同時(shí)用同一源程序中同一符號名不能同時(shí)用EQUEQU和和= =來定義。來定義。 格式:格式: NAME=EXPNAME=EXP 4 4PURGRPURGR(解除定義語句)(解除定義語句) 解除語句,可以解除原來用解除語句,可以解除原來用EQUEQU語句定義的符號語句定義的符號 格式:格式: PURGE PURGE 符號符號11,符號,符號NN 表達(dá)式常出現(xiàn)在語句格式的操作數(shù)域。表達(dá)式常出現(xiàn)在語句格式的操作數(shù)域。 (1 1)算術(shù)運(yùn)算符)算術(shù)運(yùn)算符 + +、- -、* *、/ /和和MODMOD(求余,兩數(shù)必須為正整數(shù))。(求余,兩數(shù)必須為正整

21、數(shù))。 (2 2)邏輯運(yùn)算符)邏輯運(yùn)算符 ANDAND、OROR、NOTNOT、XORXOR等。邏輯運(yùn)算符是等。邏輯運(yùn)算符是按位按位操作的,操作的, 只能用于數(shù)值表達(dá)式中,不能用于存儲器地址操作數(shù)只能用于數(shù)值表達(dá)式中,不能用于存儲器地址操作數(shù) 的表達(dá)式中。的表達(dá)式中。 (3 3)關(guān)系運(yùn)算符)關(guān)系運(yùn)算符 EQEQ、NENE、LTLT、GTGT、LELE和和GEGE等六項(xiàng)。計(jì)算結(jié)果應(yīng)該是邏等六項(xiàng)。計(jì)算結(jié)果應(yīng)該是邏 輯值:結(jié)果為真,表示輯值:結(jié)果為真,表示FFFFHFFFFH(-1-1); ;結(jié)果為假,表示結(jié)果為假,表示 0000H0000H(0 0)。 (4 4)分析運(yùn)算符)分析運(yùn)算符(數(shù)值返回運(yùn)

22、算符)(數(shù)值返回運(yùn)算符) 把特征或存儲器操作數(shù)地址分解為它的組成部分,如把特征或存儲器操作數(shù)地址分解為它的組成部分,如 偏移量、段基址和類型等。偏移量、段基址和類型等。 有有TYPETYPE、LENGTHLENGTH、SIZESIZE、OFFSETOFFSET和和SEGSEG等五項(xiàng)。等五項(xiàng)。 格式:格式: SEG VARSEG VAR或者或者LABLAB 返回指定變量或者標(biāo)號的偏移地址值。返回指定變量或者標(biāo)號的偏移地址值。 格式:格式: OFFSET VAROFFSET VAR或者或者LABLAB 注意:該運(yùn)算符實(shí)際與注意:該運(yùn)算符實(shí)際與LEALEA指令等效。指令等效。 TYPETYPE類型返

23、回運(yùn)算符類型返回運(yùn)算符 返回的運(yùn)算結(jié)果是一個(gè)數(shù)值與存儲器操作數(shù)類型或者返回的運(yùn)算結(jié)果是一個(gè)數(shù)值與存儲器操作數(shù)類型或者 標(biāo)號類型有固定的對應(yīng)關(guān)系,如表標(biāo)號類型有固定的對應(yīng)關(guān)系,如表5-15-1所示。所示。 【例例5-145-14】 V1 DB 1V1 DB 1,2 2,3 3 V2 DW 1020HV2 DW 1020H,3040H3040H V3 DD 12345678HV3 DD 12345678H PF LABEL FARPF LABEL FAR PNPN:MOV AHMOV AH,TYPE V1 ;AH=1TYPE V1 ;AH=1 MOV ALMOV AL,TYPE V2 ;AL=2T

24、YPE V2 ;AL=2 MOV DLMOV DL,TYPE V3 ;DL=4TYPE V3 ;DL=4 MOV DHMOV DH,TYPE PF ;DH=-2TYPE PF ;DH=-2 【例例5-155-15】 FEES DW 100 DUPFEES DW 100 DUP(0 0) MOV CXMOV CX,LENGTH FEESLENGTH FEES 則則CXCX值為值為100100 (5 5)合成運(yùn)算符(修改屬性運(yùn)算符)合成運(yùn)算符(修改屬性運(yùn)算符) 用來建立或臨時(shí)改變變量或標(biāo)號的類型或者存儲器操用來建立或臨時(shí)改變變量或標(biāo)號的類型或者存儲器操 作數(shù)的存儲單元類型。作數(shù)的存儲單元類型。 有

25、有PTRPTR、THISTHIS、SHORTSHORT、段超越操作符等幾項(xiàng)。、段超越操作符等幾項(xiàng)。 基本格式:基本格式: 段寄存器名:符號地址段寄存器名:符號地址 格式:格式: type PTR EXP ;TYPEtype PTR EXP ;TYPE是要建立或改變的標(biāo)號或者是要建立或改變的標(biāo)號或者 存儲的新的類型。存儲的新的類型。 (6 6)其他操作符)其他操作符 當(dāng)前偏移地址運(yùn)算符。返回該操作符所在標(biāo)號或者存當(dāng)前偏移地址運(yùn)算符。返回該操作符所在標(biāo)號或者存 儲單元的有效地址。儲單元的有效地址。 格式:格式: 【例例5-205-20】 10001000:3124H MOV BX 3124H MO

26、V BX , 則(則(BXBX)=3124H=3124H LOWLOW和和HIGHHIGH。字節(jié)分離運(yùn)算符。分別得到一個(gè)數(shù)。字節(jié)分離運(yùn)算符。分別得到一個(gè)數(shù) 值(值(1616位)或地址表達(dá)式(位)或地址表達(dá)式(1616位)的低位和高位字節(jié)。位)的低位和高位字節(jié)。 格式:格式: LOW/HIGH VARLOW/HIGH VAR LOW/HIGH EXPLOW/HIGH EXP 各類運(yùn)算符的優(yōu)先級別為:各類運(yùn)算符的優(yōu)先級別為: 1 1、() LENGTH SIZE WIDTH MASK() LENGTH SIZE WIDTH MASK 2 2、: : 3 3、PTR OFFSET SEG TPYE

27、THISPTR OFFSET SEG TPYE THIS及段操作符及段操作符 4 4、HIGE LOWHIGE LOW 5 5、* * / MOD SHL SHR/ MOD SHL SHR 6 6、+ -+ - 7 7、EQ NE GT LT GE LEEQ NE GT LT GE LE 8 8、NOTNOT 9 9、AND AND 1010、OR XOR OR XOR 1111、SHORTSHORT 5.2.3 5.2.3 段定義偽指令段定義偽指令 1 1基本概念基本概念 在匯編語言源程序中定義邏輯段,常用的有:在匯編語言源程序中定義邏輯段,常用的有: SEGMENT SEGMENT 、EN

28、DS ENDS 、ASSUME ASSUME 、ORG ORG 。 2 2SEGMENT/ENDSSEGMENT/ENDS命令命令 格式:格式: 段名段名 SEGMENT SEGMENT 定位定位組合組合段字段字類別類別 ; ;其它語句其它語句 段名段名 ENDS ENDS 5.2.4 5.2.4 過程定義偽指令過程定義偽指令 過程定義的一般格式如下:過程定義的一般格式如下: 過程名過程名 PROC NEAR/FAR PROC NEAR/FAR ; ; RET ;RET ;至少有一條返回主程序的指令;至少有一條返回主程序的指令; 過程名過程名 ENDP ENDP 5.3 5.3 匯編語言程序設(shè)

29、計(jì)基礎(chǔ)匯編語言程序設(shè)計(jì)基礎(chǔ) 5.3.1 5.3.1 程序設(shè)計(jì)的一般步驟程序設(shè)計(jì)的一般步驟 1 1基本步驟基本步驟 1) 1) 分析問題,抽象出描述問題的數(shù)學(xué)模型分析問題,抽象出描述問題的數(shù)學(xué)模型 2) 2) 確定解決問題的算法或解題思想確定解決問題的算法或解題思想 3) 3) 繪制流程圖和結(jié)構(gòu)圖繪制流程圖和結(jié)構(gòu)圖 4) 4) 分配存儲空間和工作單元分配存儲空間和工作單元 5) 5) 編制程序編制程序 6) 6) 程序靜態(tài)檢查程序靜態(tài)檢查 7) 7) 上機(jī)調(diào)試上機(jī)調(diào)試 2 2流程圖流程圖 3 3基本控制結(jié)構(gòu)基本控制結(jié)構(gòu) 程序結(jié)構(gòu)可分為三個(gè)基本結(jié)構(gòu):即順序結(jié)構(gòu)、分支結(jié)程序結(jié)構(gòu)可分為三個(gè)基本結(jié)構(gòu):即

30、順序結(jié)構(gòu)、分支結(jié) 構(gòu)和循環(huán)結(jié)構(gòu)。構(gòu)和循環(huán)結(jié)構(gòu)。 (1 1)順序結(jié)構(gòu):指按語句出現(xiàn)的先后次序執(zhí)行,沒)順序結(jié)構(gòu):指按語句出現(xiàn)的先后次序執(zhí)行,沒 有判斷和轉(zhuǎn)移、重復(fù)等,順序結(jié)構(gòu)也叫簡單結(jié)構(gòu)。有判斷和轉(zhuǎn)移、重復(fù)等,順序結(jié)構(gòu)也叫簡單結(jié)構(gòu)。 (2 2)分支結(jié)構(gòu):指根據(jù)不同情況作出判斷和選擇,)分支結(jié)構(gòu):指根據(jù)不同情況作出判斷和選擇, 以便執(zhí)行不同的程序段。以便執(zhí)行不同的程序段。 (3 3)循環(huán)結(jié)構(gòu):是指重復(fù)做某些操作,直到出現(xiàn)某)循環(huán)結(jié)構(gòu):是指重復(fù)做某些操作,直到出現(xiàn)某 個(gè)條件為止??梢钥闯鲞@實(shí)際上是順序結(jié)構(gòu)和分支結(jié)個(gè)條件為止??梢钥闯鲞@實(shí)際上是順序結(jié)構(gòu)和分支結(jié) 構(gòu)的組合。構(gòu)的組合。 (4 4)過程:實(shí)

31、際上它是三種基本結(jié)構(gòu)的組合。在匯)過程:實(shí)際上它是三種基本結(jié)構(gòu)的組合。在匯 編語言里經(jīng)常把它當(dāng)做第四種基本控制結(jié)構(gòu)來看待。編語言里經(jīng)常把它當(dāng)做第四種基本控制結(jié)構(gòu)來看待。 (5 5)程序設(shè)計(jì)時(shí),應(yīng)采用)程序設(shè)計(jì)時(shí),應(yīng)采用“自頂向下,逐步求精自頂向下,逐步求精” ” 。 4 4程序的結(jié)束方法程序的結(jié)束方法 常用的在常用的在DOSDOS下返回的方法主要有以下三種:下返回的方法主要有以下三種: (1 1)利用)利用INT 20HINT 20H結(jié)束程序結(jié)束程序 (2 2)利用標(biāo)準(zhǔn)序結(jié)束程序)利用標(biāo)準(zhǔn)序結(jié)束程序 (3 3)用)用DOSDOS功能調(diào)用結(jié)束程序功能調(diào)用結(jié)束程序 5.3.2 5.3.2 程序設(shè)計(jì)

32、的基本方法程序設(shè)計(jì)的基本方法 1 1順序結(jié)構(gòu)設(shè)計(jì)順序結(jié)構(gòu)設(shè)計(jì) 【例【例5-275-27】試編制一程序,求出】試編制一程序,求出 下列公式中下列公式中Z Z值,并存放在值,并存放在 RESULTRESULT單元中。單元中。 RESULTRESULT(X+YX+Y)8-X 8-X 2 2 參考代碼:參考代碼: DATA SEGMENTDATA SEGMENT X DW 6X DW 6 Y DW 7 ;Y DW 7 ;數(shù)據(jù)段數(shù)據(jù)段 RESULT DW RESULT DW ? DATA ENDSDATA ENDS STACK1 SEGMENT PARA STACKSTACK1 SEGMENT PARA

33、 STACK DW 20H DUP(0) ;DW 20H DUP(0) ;堆棧段堆棧段 STACK1 ENDSSTACK1 ENDS COSEG SEGMENTCOSEG SEGMENT PROC1 PROC FARPROC1 PROC FAR ASSUME CS:COSEG,SS:STACK1ASSUME CS:COSEG,SS:STACK1 ASSUME DS:DATAASSUME DS:DATA START: PUSH DSSTART: PUSH DS MOV AX,0MOV AX,0 PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA MOV DS,AXMO

34、V DS,AX MOV DX,X MOV DX,X ADD DX,Y ADD DX,Y MOV CL,3MOV CL,3 SAL DX,CL SAL DX,CL SUB DX,X SUB DX,X SAR DX,1 SAR DX,1 MOV RESULT,DX MOV RESULT,DX RETRET PROC1 ENDPPROC1 ENDP COSEG ENDSCOSEG ENDS END STARTEND START 2 2分支結(jié)構(gòu)設(shè)計(jì)分支結(jié)構(gòu)設(shè)計(jì) 分支結(jié)構(gòu)主要是通過條件轉(zhuǎn)移指令來實(shí)現(xiàn)的。分支結(jié)構(gòu)主要是通過條件轉(zhuǎn)移指令來實(shí)現(xiàn)的。 可分為三種:單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)??煞譃槿N:

35、單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)。 (1 1)單分支結(jié)構(gòu))單分支結(jié)構(gòu) 分支一般由產(chǎn)生條件、測試、定向和標(biāo)號四部分組成。分支一般由產(chǎn)生條件、測試、定向和標(biāo)號四部分組成。 【例例5-285-28】設(shè)內(nèi)存中有設(shè)內(nèi)存中有 三個(gè)互不相等的無符號三個(gè)互不相等的無符號 字?jǐn)?shù)據(jù),分別存放在字?jǐn)?shù)據(jù),分別存放在 VAR1VAR1開始的字單元,試開始的字單元,試 求其中最大值并存入求其中最大值并存入 MAXMAX單元。單元。 解題思路:求三個(gè)無符解題思路:求三個(gè)無符 號數(shù)中的最大值,只要號數(shù)中的最大值,只要 將三個(gè)數(shù)兩兩比較,用將三個(gè)數(shù)兩兩比較,用 無符號數(shù)的比較轉(zhuǎn)移指無符號數(shù)的比較轉(zhuǎn)移指 令令 JA/JB/JA

36、E/JBE/JE/JCJA/JB/JAE/JBE/JE/JC 等指令就可判斷兩數(shù)的等指令就可判斷兩數(shù)的 大小,從而選出其中的大小,從而選出其中的 最大值。最大值。 DATA SEGMENT DATA SEGMENT VAR1 DW 1238H,1047H,19E1HVAR1 DW 1238H,1047H,19E1H MAX DW MAX DW ? DATA ENDSDATA ENDS SSEG SEGMENT PARA STACKSSEG SEGMENT PARA STACK DB 100 DUP(0) DB 100 DUP(0) SSEG ENDSSSEG ENDS CODE SEGMENT

37、CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEG ASSUME CS:CODE,DS:DATA,SS:SSEG STARTSTART: MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX LEA SI,VAR1 ; LEA SI,VAR1 ;設(shè)置指針,設(shè)置指針, MOV AX,SI ; MOV AX,SI ;取第一個(gè)元素取第一個(gè)元素 MOV BX,SI+2;MOV BX,SI+2;取第二個(gè)元素取第二個(gè)元素 CMP AX,BX ;CMP AX,BX ;比較比較 JAE BIGE1 ;JAE BIGE1 ;大于等于時(shí)轉(zhuǎn)大于等于

38、時(shí)轉(zhuǎn) MOV AX,BX ;MOV AX,BX ;小于時(shí)小于時(shí) BIGE1BIGE1: CMP AX,SI+4 ;CMP AX,SI+4 ;和第三個(gè)元素比較和第三個(gè)元素比較 JAE BIGE2 ;JAE BIGE2 ;大于等于時(shí)轉(zhuǎn)大于等于時(shí)轉(zhuǎn) MOV AX,SI+4 ;MOV AX,SI+4 ;取第三個(gè)元素取第三個(gè)元素 BIGE2BIGE2: MOV MAX,AX ;MOV MAX,AX ;將找的最大值送將找的最大值送MAXMAX MOV AH,4CH ; MOV AH,4CH ;準(zhǔn)備結(jié)束程序準(zhǔn)備結(jié)束程序 INT 21HINT 21H CODE ENDS CODE ENDS END START

39、 END START (2)2)雙分支結(jié)構(gòu)雙分支結(jié)構(gòu) (3)3)多分支程序設(shè)計(jì)多分支程序設(shè)計(jì) 多分支結(jié)構(gòu)的設(shè)計(jì)有三種主要形式:轉(zhuǎn)移表法、地址多分支結(jié)構(gòu)的設(shè)計(jì)有三種主要形式:轉(zhuǎn)移表法、地址 表法和邏輯分解法。而且實(shí)現(xiàn)分支轉(zhuǎn)移還得使用條件表法和邏輯分解法。而且實(shí)現(xiàn)分支轉(zhuǎn)移還得使用條件 轉(zhuǎn)移指令。轉(zhuǎn)移指令。 轉(zhuǎn)移表法轉(zhuǎn)移表法 地址表法地址表法 邏輯分解法。邏輯分解法。 (3 3)循環(huán)程序的設(shè)計(jì)步驟:)循環(huán)程序的設(shè)計(jì)步驟: 1 1)分析問題,確定循環(huán)結(jié)構(gòu):選用當(dāng)型還是直到型;)分析問題,確定循環(huán)結(jié)構(gòu):選用當(dāng)型還是直到型; 2 2)根據(jù)循環(huán)變化的規(guī)律,確定循環(huán)體部分;)根據(jù)循環(huán)變化的規(guī)律,確定循環(huán)體部分

40、; 3 3)考慮循環(huán)參數(shù)的修改,確定參數(shù)修改方法;)考慮循環(huán)參數(shù)的修改,確定參數(shù)修改方法; 4 4)設(shè)置循環(huán)控制部分,注意循環(huán)結(jié)束條件的完備;)設(shè)置循環(huán)控制部分,注意循環(huán)結(jié)束條件的完備; 5 5)設(shè)置循環(huán)參數(shù)和控制條件的初值設(shè)定部分;)設(shè)置循環(huán)參數(shù)和控制條件的初值設(shè)定部分; 6 6)最后編碼實(shí)現(xiàn)。)最后編碼實(shí)現(xiàn)。 (4 4)循環(huán)程序的控制方法)循環(huán)程序的控制方法 計(jì)數(shù)控制法計(jì)數(shù)控制法,CXCX計(jì)數(shù)器加計(jì)數(shù)器加1 1,常用指令是,常用指令是LOOPLOOP。 條件控制法。條件控制法。 開關(guān)控制法。一般只有兩個(gè)不同動作需要交替執(zhí)行,開關(guān)控制法。一般只有兩個(gè)不同動作需要交替執(zhí)行, 可以用一個(gè)二進(jìn)制編

41、碼串來表示其執(zhí)行序列,這個(gè)二可以用一個(gè)二進(jìn)制編碼串來表示其執(zhí)行序列,這個(gè)二 進(jìn)制編碼串就是邏輯尺,也叫進(jìn)制編碼串就是邏輯尺,也叫邏輯比例尺邏輯比例尺。 【例例5-325-32】求求1 1至至100100數(shù)字之和,結(jié)果保存到數(shù)字之和,結(jié)果保存到SUMSUM中。中。 5.3.3 5.3.3 子程序設(shè)計(jì)與調(diào)用技術(shù)子程序設(shè)計(jì)與調(diào)用技術(shù) 一個(gè)完整的子程序結(jié)構(gòu),應(yīng)該包括以下幾方面的內(nèi)容:一個(gè)完整的子程序結(jié)構(gòu),應(yīng)該包括以下幾方面的內(nèi)容: 1 1子程序的說明部分子程序的說明部分,一般有:一般有: 子程序名(被調(diào)用名)子程序名(被調(diào)用名);作者(包括后來參與的作作者(包括后來參與的作 者)者);版本(一般含歷次

42、修正的內(nèi)容、原因等)版本(一般含歷次修正的內(nèi)容、原因等);開開 發(fā)日期(一般含歷次修正日期)發(fā)日期(一般含歷次修正日期);功能說明(說明子功能說明(說明子 程序具體完成的任務(wù))程序具體完成的任務(wù));占用的資源說明,包括軟、占用的資源說明,包括軟、 硬各方面硬各方面;輸入?yún)?shù),包括名稱、類型、存放位置、輸入?yún)?shù),包括名稱、類型、存放位置、 作用等;輸出參數(shù),包括名稱、類型、存放位置、作作用等;輸出參數(shù),包括名稱、類型、存放位置、作 用等用等;子程序的使用格式;子程序的使用格式;子程序的使用范例。子程序的使用范例。 2 2子程序的現(xiàn)場保護(hù)和恢復(fù)子程序的現(xiàn)場保護(hù)和恢復(fù) 現(xiàn)場保護(hù)和恢復(fù)常用的方法有:現(xiàn)

43、場保護(hù)和恢復(fù)常用的方法有: (1 1)利用堆棧進(jìn)行保護(hù)。可以用進(jìn)棧指令將要保護(hù))利用堆棧進(jìn)行保護(hù)??梢杂眠M(jìn)棧指令將要保護(hù) 的信息壓棧,用出棧指令將要恢復(fù)的信息出棧,這是的信息壓棧,用出棧指令將要恢復(fù)的信息出棧,這是 最常用的方法。最常用的方法。 (2 2)利用特定的內(nèi)存區(qū)域。可以在內(nèi)存中專門劃出)利用特定的內(nèi)存區(qū)域??梢栽趦?nèi)存中專門劃出 一片區(qū)域用于現(xiàn)場信息的保護(hù)和恢復(fù)。此時(shí)主要用數(shù)一片區(qū)域用于現(xiàn)場信息的保護(hù)和恢復(fù)。此時(shí)主要用數(shù) 據(jù)傳送指令即可完成任務(wù)。據(jù)傳送指令即可完成任務(wù)。 (3 3)在信息很少時(shí),也可用暫時(shí)閑置不用的寄存器。)在信息很少時(shí),也可用暫時(shí)閑置不用的寄存器。 3 3子程序的參數(shù)

44、傳遞子程序的參數(shù)傳遞 傳遞過程主要有以下傳遞過程主要有以下四種四種方法:方法: (1 1)使用堆棧。)使用堆棧。 (2 2)使用指定的存儲區(qū)域。)使用指定的存儲區(qū)域。 (3 3)使用寄存器。在數(shù)據(jù)量較少時(shí)常采用這種方式。)使用寄存器。在數(shù)據(jù)量較少時(shí)常采用這種方式。 (4 4)使用端口。)使用端口。 【例例5-355-35】寫出滿足以下過程的代碼部分:寫出滿足以下過程的代碼部分: 使用寄存器傳遞參數(shù),將使用寄存器傳遞參數(shù),將ASCIIASCII碼轉(zhuǎn)換為碼轉(zhuǎn)換為1616進(jìn)制數(shù)進(jìn)制數(shù) 入口條件:(入口條件:(ALAL)存放)存放ASCIIASCII碼碼; ; 出口條件:(出口條件:(ALAL)161

45、6進(jìn)制數(shù);進(jìn)制數(shù); 由題意:由題意: 數(shù)碼數(shù)碼0 09 9對應(yīng)的對應(yīng)的ASCIIASCII碼是碼是30H30H39H39H, 字符字符A AF F對應(yīng)的對應(yīng)的ASCIIASCII碼是碼是41H41H46H46H, 其轉(zhuǎn)換過程,如果是從其轉(zhuǎn)換過程,如果是從30H30H轉(zhuǎn)換為轉(zhuǎn)換為0 0,則應(yīng)該是對應(yīng),則應(yīng)該是對應(yīng) ASCIIASCII碼減去碼減去30H30H即可。而從字符即可。而從字符AA轉(zhuǎn)換為轉(zhuǎn)換為1616進(jìn)制進(jìn)制 數(shù)碼數(shù)碼A A,則應(yīng)該是對應(yīng),則應(yīng)該是對應(yīng)ASCIIASCII碼減去碼減去37H37H才可。才可。 ASCTOHEX PROC ;ASCTOHEX PROC ;過程體定義開始過程體

46、定義開始 PUSHF ;PUSHF ;通過堆棧保護(hù)現(xiàn)場信息通過堆棧保護(hù)現(xiàn)場信息 SUB AL,30H ;SUB AL,30H ;做第一步轉(zhuǎn)換做第一步轉(zhuǎn)換 CMP AL,10 ;CMP AL,10 ;如果是數(shù)碼如果是數(shù)碼0 0到到9 9,則結(jié)果是小于,則結(jié)果是小于1010的的 JL EXIT1JL EXIT1 SUB AL,7 ;SUB AL,7 ;否則就是數(shù)碼否則就是數(shù)碼A A到到F F,應(yīng)該再減去,應(yīng)該再減去7 7 EXIT1: POPF ;EXIT1: POPF ;恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場 RET ; RET ;子程序執(zhí)行結(jié)束,返回主程序子程序執(zhí)行結(jié)束,返回主程序 ASCTOHEX ENDP ;A

47、SCTOHEX ENDP ;過程定義結(jié)束。過程定義結(jié)束。 【例例5-365-36】設(shè)設(shè)ARRAYARRAY是是1010個(gè)元素的單字節(jié)無符號數(shù)組。個(gè)元素的單字節(jié)無符號數(shù)組。 試用子程序計(jì)算數(shù)組元素的校驗(yàn)和(即不計(jì)進(jìn)位的累試用子程序計(jì)算數(shù)組元素的校驗(yàn)和(即不計(jì)進(jìn)位的累 加),并將結(jié)果存入變量加),并將結(jié)果存入變量RESULTRESULT中。中。 設(shè)用變量來傳遞參數(shù),即主程序和被調(diào)用子程序通過設(shè)用變量來傳遞參數(shù),即主程序和被調(diào)用子程序通過 同一變量名的訪問來傳遞參數(shù)。同一變量名的訪問來傳遞參數(shù)。 則:則:STACK SEGMENT STACKSTACK SEGMENT STACK DW 50 DUP

48、(0) DW 50 DUP(0) STACK ENDSSTACK ENDS DATA SEGMENTDATA SEGMENT ARRAY DB 34H,9AH,0F1H,87H,06HARRAY DB 34H,9AH,0F1H,87H,06H DB 1FH,0CDH,5EH,0A1H,49H DB 1FH,0CDH,5EH,0A1H,49H COUNT EQU $-ARRAYCOUNT EQU $-ARRAY RESULT DB RESULT DB ? DATA ENDSDATA ENDS CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSU

49、ME CS:CODE,DS:DATA ASSUME SS:STACKASSUME SS:STACK MAIN PROC FAR MAIN PROC FAR STARTSTART: PUSH DSPUSH DS XOR AX,AX XOR AX,AX PUSH AXPUSH AX MOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX CALL CHECKSUB CALL CHECKSUB RET ;RET ;結(jié)束主程序,返回操作系統(tǒng)結(jié)束主程序,返回操作系統(tǒng) MAIN ENDPMAIN ENDP CHECKSUB PROC NEAR ;CHECKSUB PROC N

50、EAR ;段內(nèi)調(diào)用的子程序段內(nèi)調(diào)用的子程序 PUSH AX ;PUSH AX ;保存現(xiàn)場保存現(xiàn)場 PUSH BXPUSH BX PUSH CX PUSH CX XOR AL,AL XOR AL,AL MOV BX,OFFSET ARRAY ;MOV BX,OFFSET ARRAY ; 即第即第0 0號元素號元素34H34H的位置的位置 MOV CX,COUNT ;CXMOV CX,COUNT ;CX取數(shù)組的元素個(gè)數(shù)取數(shù)組的元素個(gè)數(shù) AGAINAGAIN: ADD AL,BX ;ADD AL,BX ;求和求和 INC BX ;INC BX ;指針偏移,指向下一個(gè)元素指針偏移,指向下一個(gè)元素 LO

51、OP AGAIN ;LOOP AGAIN ;計(jì)數(shù)遞減,不為計(jì)數(shù)遞減,不為0 0時(shí)循環(huán)時(shí)循環(huán) MOV RESULT,AL ;MOV RESULT,AL ;傳遞校驗(yàn)和傳遞校驗(yàn)和 POP CX ;POP CX ;恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場 POP BXPOP BX POP AX POP AX RET ; RET ; 返回主程序返回主程序 CHECKSUB ENDP CHECKSUB ENDP CODE ENDSCODE ENDS END START END START 4 4子程序的調(diào)用與返回子程序的調(diào)用與返回 5.3.4 DOS5.3.4 DOS功能子程序的調(diào)用功能子程序的調(diào)用 1 1概述概述 基本輸入輸出

52、系統(tǒng)基本輸入輸出系統(tǒng)BIOSBIOS和和DOSDOS層功能模塊:層功能模塊: 設(shè)置了兩設(shè)置了兩 層內(nèi)部子程序供用戶使用。層內(nèi)部子程序供用戶使用。 BIOSBIOS在系統(tǒng)主板上的在系統(tǒng)主板上的ROMROM區(qū),又稱區(qū),又稱ROM-BIOSROM-BIOS。即系統(tǒng)。即系統(tǒng) 加電自檢、引導(dǎo)裝入及對鍵盤、磁盤、磁帶、顯示器、加電自檢、引導(dǎo)裝入及對鍵盤、磁盤、磁帶、顯示器、 打印機(jī)、異步串行通信口等控制。用戶可用打印機(jī)、異步串行通信口等控制。用戶可用INT INT 10H10HINT 1AHINT 1AH 某些設(shè)備的操作,既能使用某些設(shè)備的操作,既能使用DOSDOS又能使用又能使用BIOSBIOS中斷,中

53、斷, 一般情況下盡可能使用一般情況下盡可能使用DOSDOS中斷,必要時(shí)再使用中斷,必要時(shí)再使用BIOSBIOS 中斷,中斷,BIOSBIOS更接近硬件。更接近硬件。 2 2系統(tǒng)功能調(diào)用方法系統(tǒng)功能調(diào)用方法 一般需要經(jīng)過以下三個(gè)步驟:一般需要經(jīng)過以下三個(gè)步驟: 1 1)子程序的入口參數(shù)送相應(yīng)的寄存器。)子程序的入口參數(shù)送相應(yīng)的寄存器。 2 2)子程序的標(biāo)號送)子程序的標(biāo)號送AHAH寄存器。寄存器。 3 3)發(fā)出中斷請求,即執(zhí)行軟中斷指令:)發(fā)出中斷請求,即執(zhí)行軟中斷指令: INT 21HINT 21H。 如果是如果是BIOSBIOS中斷,應(yīng)該換成其中斷類型號。中斷,應(yīng)該換成其中斷類型號。 4 4

54、)程序執(zhí)行完畢后,如果有出口參數(shù),則按規(guī)定?。┏绦驁?zhí)行完畢后,如果有出口參數(shù),則按規(guī)定取 得出口參數(shù)。得出口參數(shù)。 【例例5-385-38】在屏幕上顯示信息在屏幕上顯示信息WELCOME TO BEIJINGWELCOME TO BEIJING! CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:CODE ASSUME CS:CODE,DS:CODE ORG 100H ORG 100H START START: JMP BEGINJMP BEGIN MSG DB WELCOME TO BEIJING MSG DB WELCOME TO BEIJING! BE

55、GINBEGIN: MOV AX,CODE ;MOV AX,CODE ;設(shè)置設(shè)置DSDS MOV DS,AX MOV DS,AX LEA DX,MSG ;LEA DX,MSG ;取字符串首地址取字符串首地址 MOV AH,09H ;MOV AH,09H ;顯示字符串功能調(diào)用編號顯示字符串功能調(diào)用編號 INT 21H ;DOSINT 21H ;DOS功能調(diào)用功能調(diào)用 INT 20H ;INT 20H ;結(jié)束程序結(jié)束程序 CODE ENDSCODE ENDS END START END START 3 3系統(tǒng)功能調(diào)用分組概況系統(tǒng)功能調(diào)用分組概況 (1 1)傳統(tǒng)的字符)傳統(tǒng)的字符I/OI/O管理。管

56、理。 (2 2)傳統(tǒng)的文件管理。)傳統(tǒng)的文件管理。 (3 3)擴(kuò)充的文件管理。)擴(kuò)充的文件管理。 (4 4)內(nèi)存管理。)內(nèi)存管理。 (5 5)作業(yè)管理。)作業(yè)管理。 (6 6)其他資源管理。)其他資源管理。 另外,還有一些另外,還有一些DOSDOS中斷,可供程序員使用:中斷功中斷,可供程序員使用:中斷功 能號:能號:20H20H,22H22H,23H23H,24H24H,25H25H,26H26H,27H27H。 4 4部分常用的基本部分常用的基本I/OI/O功能調(diào)用舉例功能調(diào)用舉例 (1 1)1 1 號系統(tǒng)功能調(diào)用:鍵盤輸入并回顯號系統(tǒng)功能調(diào)用:鍵盤輸入并回顯 有鍵按下時(shí),先檢查是否是有鍵按

57、下時(shí),先檢查是否是 Ctrl+Break Ctrl+Break鍵,若是則鍵,若是則 退出;否則將字符的鍵值(退出;否則將字符的鍵值(ASCIIASCII碼)送入寄存器碼)送入寄存器ALAL 中,并在屏幕上顯示該字符。中,并在屏幕上顯示該字符。 此調(diào)用沒有入口參數(shù)。此調(diào)用沒有入口參數(shù)。 MOV AH,1 ;lMOV AH,1 ;l為功能號為功能號 INT 21HINT 21H (2 2)2 2 號系統(tǒng)功能調(diào)用:顯示輸出號系統(tǒng)功能調(diào)用:顯示輸出 此調(diào)用的功能是向輸出設(shè)備輸出一個(gè)字符碼。此調(diào)用的功能是向輸出設(shè)備輸出一個(gè)字符碼。 此調(diào)用的入口參數(shù)是輸出字符的此調(diào)用的入口參數(shù)是輸出字符的ASCllASC

58、ll碼,入口參數(shù)碼,入口參數(shù) 需送入寄存器需送入寄存器DLDL。沒有出口參數(shù)。沒有出口參數(shù)。 MOV DL , A ; AMOV DL , A ; A為要求輸出字符的為要求輸出字符的ASCIIASCII碼碼 MOV AH, 2 ; 2MOV AH, 2 ; 2為功能號為功能號 INT 21H INT 21H 調(diào)用結(jié)果是將調(diào)用結(jié)果是將DLDL寄存器中字符寄存器中字符AA通過屏幕顯示或通過屏幕顯示或 打印機(jī)輸出。打印機(jī)輸出。 5.4 5.4 中斷服務(wù)程序設(shè)計(jì)中斷服務(wù)程序設(shè)計(jì) 1 1概述概述 當(dāng)中斷發(fā)生當(dāng)中斷發(fā)生CPUCPU的操作體現(xiàn)為以下的操作體現(xiàn)為以下5 5個(gè)步驟:個(gè)步驟: 1 1)取中斷類型號

59、。)取中斷類型號。 2 2)計(jì)算中斷向量地址。)計(jì)算中斷向量地址。 3 3)取中斷向量,按低前高后原則,先取的偏移地址)取中斷向量,按低前高后原則,先取的偏移地址 送送IPIP,后取的段基址送,后取的段基址送CSCS 4 4)轉(zhuǎn)入中斷處理程序。)轉(zhuǎn)入中斷處理程序。 5 5)中斷返回到中斷時(shí)斷點(diǎn)位置,軟中斷時(shí)是)中斷返回到中斷時(shí)斷點(diǎn)位置,軟中斷時(shí)是INTINT指令指令 的下一條指令。的下一條指令。 概括來講,中斷程序的設(shè)計(jì)包括以下兩個(gè)方面:概括來講,中斷程序的設(shè)計(jì)包括以下兩個(gè)方面: (1 1)主程序部分。)主程序部分。 包括:設(shè)置好堆棧,設(shè)置中斷向量;如是外部中斷,包括:設(shè)置好堆棧,設(shè)置中斷向量

60、;如是外部中斷, 設(shè)置外設(shè)的工作方式,開放中斷響應(yīng)設(shè)置外設(shè)的工作方式,開放中斷響應(yīng);初始化中斷控;初始化中斷控 制器(制器(8259A8259A);); 在執(zhí)行上述操作前,必須是關(guān)中斷。當(dāng)初始化過程結(jié)在執(zhí)行上述操作前,必須是關(guān)中斷。當(dāng)初始化過程結(jié) 束后,必須開中斷,才可以接受中斷請求并予以響應(yīng)。束后,必須開中斷,才可以接受中斷請求并予以響應(yīng)。 (2 2)中斷服務(wù)程序設(shè)計(jì)部分。)中斷服務(wù)程序設(shè)計(jì)部分。 包括:保護(hù)現(xiàn)場包括:保護(hù)現(xiàn)場,用戶中斷處理程序,若在執(zhí)行期間,用戶中斷處理程序,若在執(zhí)行期間 允許中斷嵌套,則應(yīng)該事先開中斷,并在中斷服務(wù)程允許中斷嵌套,則應(yīng)該事先開中斷,并在中斷服務(wù)程 序執(zhí)行完

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論