




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-2-41第四章第四章 宏匯編語言程序設(shè)計(jì)宏匯編語言程序設(shè)計(jì)4.1 匯編語言程序格式匯編語言程序格式4.2 MASM中的表達(dá)式中的表達(dá)式4.3 偽指令語句偽指令語句4.4 DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用中斷調(diào)用4.5 程序設(shè)計(jì)方法程序設(shè)計(jì)方法4.6 宏匯編和條件匯編宏匯編和條件匯編2022-2-424.1 匯編語言程序設(shè)計(jì)特點(diǎn)匯編語言程序設(shè)計(jì)特點(diǎn)o匯編語言是一種用符號(hào)表示的、面向匯編語言是一種用符號(hào)表示的、面向CPU指令系統(tǒng)的程序指令系統(tǒng)的程序設(shè)計(jì)語言。是機(jī)器語言的符號(hào)表示。設(shè)計(jì)語言。是機(jī)器語言的符號(hào)表示。o基本特點(diǎn):基本特點(diǎn):程序設(shè)計(jì)人員能更充分地利用機(jī)器硬件的全
2、部功能,發(fā)程序設(shè)計(jì)人員能更充分地利用機(jī)器硬件的全部功能,發(fā)揮機(jī)器的長處;揮機(jī)器的長處;程序目標(biāo)代碼占用內(nèi)存少,執(zhí)行速度快,效率高,具有程序目標(biāo)代碼占用內(nèi)存少,執(zhí)行速度快,效率高,具有實(shí)時(shí)性;實(shí)時(shí)性;由于匯編的特點(diǎn),由于匯編的特點(diǎn),匯編語言匯編語言常用于編寫計(jì)算機(jī)系統(tǒng)程序、常用于編寫計(jì)算機(jī)系統(tǒng)程序、實(shí)時(shí)通信程序和實(shí)時(shí)控制程序。但匯編語言程序依賴于實(shí)時(shí)通信程序和實(shí)時(shí)控制程序。但匯編語言程序依賴于機(jī)器硬件,其機(jī)器硬件,其通用性和移植性都較差通用性和移植性都較差。2022-2-43從源程序獲得目標(biāo)程序的過程從源程序獲得目標(biāo)程序的過程o匯編語言源程序匯編語言源程序 經(jīng)過經(jīng)過匯編匯編翻譯成二進(jìn)制代碼的翻譯
3、成二進(jìn)制代碼的浮動(dòng)目標(biāo)文件浮動(dòng)目標(biāo)文件,然后,然后由由連接程序連接程序?qū)⒛繕?biāo)文件和庫文件目標(biāo)文件和庫文件相連接相連接 生成機(jī)器上生成機(jī)器上可執(zhí)行的目標(biāo)程可執(zhí)行的目標(biāo)程序序進(jìn)行匯編語言開發(fā)需要的文件:進(jìn)行匯編語言開發(fā)需要的文件:1)匯編程序)匯編程序 MASM.exe 2)連接程序)連接程序 LINK.EXE 3)庫管理程序)庫管理程序LIB.EXE(如果不創(chuàng)建子程序庫,不需要該文件)(如果不創(chuàng)建子程序庫,不需要該文件)4)文本編輯器。如)文本編輯器。如DOS下的下的EDIT 或其它開發(fā)工具中的編輯環(huán)境如或其它開發(fā)工具中的編輯環(huán)境如Turbo C等。目的:生成等。目的:生成.ASM文件。文件。
4、5)調(diào)試程序)調(diào)試程序 DEBUG源程序源程序二進(jìn)制代碼的浮動(dòng)目標(biāo)程序二進(jìn)制代碼的浮動(dòng)目標(biāo)程序庫文件庫文件可執(zhí)行程序可執(zhí)行程序匯編程序匯編程序連接程序連接程序Masm.exelink.exe2022-2-44開發(fā)的步驟(補(bǔ)充)開發(fā)的步驟(補(bǔ)充)1、源程序的匯編、源程序的匯編 命令格式:命令格式:MASM 源程序文件名源程序文件名如果沒有語法錯(cuò)誤,則生成目標(biāo)模塊文件如果沒有語法錯(cuò)誤,則生成目標(biāo)模塊文件.obj,否則給,否則給出錯(cuò)誤信息出錯(cuò)誤信息2、目標(biāo)文件的連接、目標(biāo)文件的連接 命令格式:命令格式:LINK obj文件名文件名如果沒有嚴(yán)重錯(cuò)誤,將生成可執(zhí)行文件如果沒有嚴(yán)重錯(cuò)誤,將生成可執(zhí)行文件
5、.exe,否則將,否則將提示相應(yīng)的錯(cuò)誤信息提示相應(yīng)的錯(cuò)誤信息3、可執(zhí)行文件的執(zhí)行調(diào)試、可執(zhí)行文件的執(zhí)行調(diào)試 命令格式:命令格式:可執(zhí)行文件名可執(zhí)行文件名操作系統(tǒng)加載該文件進(jìn)入主存開始運(yùn)行,如果出現(xiàn)運(yùn)行操作系統(tǒng)加載該文件進(jìn)入主存開始運(yùn)行,如果出現(xiàn)運(yùn)行錯(cuò)誤,可用錯(cuò)誤,可用debug.exe調(diào)試程序。調(diào)試程序。 命令格式:命令格式:debug 可執(zhí)行程序文件名可執(zhí)行程序文件名注意:如果程序里沒有的堆棧段,系統(tǒng)會(huì)給出注意:如果程序里沒有的堆棧段,系統(tǒng)會(huì)給出warning,但不會(huì)影響程序運(yùn)行。,但不會(huì)影響程序運(yùn)行。2022-2-454-1匯編語言程序格式匯編語言程序格式p匯編語言源程序用語句書寫,匯編語
6、言源程序用語句書寫,MASMMASM中可以使用的語句中可以使用的語句有兩類:有兩類:指令性語句和偽指令語句指令性語句和偽指令語句。o指令性語句:即執(zhí)行性語句指令性語句:即執(zhí)行性語句(指令指令),與機(jī)器碼一一對(duì)應(yīng)與機(jī)器碼一一對(duì)應(yīng),表示某,表示某種確定操作,包括四部分:種確定操作,包括四部分: 標(biāo)號(hào):標(biāo)號(hào): 指令操作碼指令操作碼 操作數(shù)操作數(shù) ;注釋注釋 例:例: AGAN:ADC BX,AX;累加累加o指示性語句:即說明性語句指示性語句:即說明性語句(偽指令偽指令),不對(duì)應(yīng)機(jī)器碼不對(duì)應(yīng)機(jī)器碼,只為匯編,只為匯編提供所需信息,由四部分組成:提供所需信息,由四部分組成: 名字名字 偽指令偽指令 操作
7、數(shù)操作數(shù) ;注釋注釋 例:例:SUMDW 0;為結(jié)果保留一個(gè)字為結(jié)果保留一個(gè)字 2022-2-46DATASEGMENTSRC_LESSDBHELLO!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOV DX,OFFSET SRC_LESSMOV AH,9INT 21HMOV AH,1INT 21HMOVAH,4CHINT21HCODE ENDSENDSTART2022-2-47匯編程序的基本結(jié)構(gòu)要求匯編程序的基本結(jié)構(gòu)要求o完整的匯編程序要包括:完整的匯編程序要包括:段定義、段分配、設(shè)置段
8、地址、返段定義、段分配、設(shè)置段地址、返回回DOS語句、程序結(jié)束語句、程序結(jié)束 和程序體和程序體。必要時(shí)加上過程調(diào)用。必要時(shí)加上過程調(diào)用。o完整匯編語言程序的典型格式完整匯編語言程序的典型格式o段定義格式:段定義格式: 段名段名 SEGMENT 段名段名 ENDSo至少有一個(gè)代碼段,至少有一個(gè)代碼段,堆棧段如果不定義,由計(jì)算機(jī)自動(dòng)分配。堆棧段如果不定義,由計(jì)算機(jī)自動(dòng)分配。段名是由字母數(shù)字組成的,可以任意定義。段名是由字母數(shù)字組成的,可以任意定義。o計(jì)算機(jī)識(shí)別不同的段靠計(jì)算機(jī)識(shí)別不同的段靠 段分配段分配ASSUME 語句語句完成完成1.ASSUME CS:段名,:段名,DS:段名,:段名,SS:段
9、名,:段名,ES:段名:段名2022-2-48oassume指定段與段寄存器之間的關(guān)系,但并不為段寄存指定段與段寄存器之間的關(guān)系,但并不為段寄存器設(shè)定初值,程序中如果使用數(shù)據(jù)段或者附加段,需要明確器設(shè)定初值,程序中如果使用數(shù)據(jù)段或者附加段,需要明確對(duì)對(duì)DS、ES賦值。只要正確書寫源程序,賦值。只要正確書寫源程序,CS、IP和和SS、SP的值將會(huì)由連接程序正確設(shè)置的值將會(huì)由連接程序正確設(shè)置o設(shè)置方法:設(shè)置方法: MOV AX,STACKMOV AX,STACK MOV SS,AX MOV SS,AX MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AXo程序執(zhí)行
10、完畢后要返回程序執(zhí)行完畢后要返回DOS,最常用的實(shí)現(xiàn)方法:,最常用的實(shí)現(xiàn)方法:p全部程序以全部程序以END結(jié)尾,結(jié)尾,END后面可以加上程序執(zhí)行起始的后面可以加上程序執(zhí)行起始的名稱,匯編程序遇到名稱,匯編程序遇到END就結(jié)束匯編。就結(jié)束匯編。MOV AX,4C00HINT 21H2022-2-49三、數(shù)據(jù)項(xiàng)(匯編語言中使用的操作數(shù))三、數(shù)據(jù)項(xiàng)(匯編語言中使用的操作數(shù))1 1、常數(shù)、常數(shù)二進(jìn)制數(shù):以二進(jìn)制數(shù):以“B B”結(jié)尾,如結(jié)尾,如0000110100001101B B;八進(jìn)制數(shù):以八進(jìn)制數(shù):以“O O”結(jié)尾,如結(jié)尾,如725725O O;十六進(jìn)制數(shù):以十六進(jìn)制數(shù):以“H H”結(jié)尾,并且必須
11、以數(shù)字打頭,即結(jié)尾,并且必須以數(shù)字打頭,即若最高位為字母若最高位為字母A AF F,前面應(yīng)加,前面應(yīng)加0 0,如,如0 0A12A12H H;十進(jìn)制數(shù):以十進(jìn)制數(shù):以“D D”結(jié)尾或省略結(jié)尾,如結(jié)尾或省略結(jié)尾,如1010D D、1010。o字符串常量字符串常量字符串常量表示為包含在兩個(gè)字符串常量表示為包含在兩個(gè)單引號(hào)單引號(hào)之間的一連串之間的一連串ASCIIASCII字符。每個(gè)串元素的值定義為該元素所對(duì)應(yīng)的字符。每個(gè)串元素的值定義為該元素所對(duì)應(yīng)的1 1字節(jié)字節(jié)ASCIIASCII碼值碼值。2022-2-410三、數(shù)據(jù)項(xiàng)(匯編語言中使用的操作數(shù))三、數(shù)據(jù)項(xiàng)(匯編語言中使用的操作數(shù))2 2、變量:指
12、存儲(chǔ)在存儲(chǔ)單元中的值,所有變量有三個(gè)屬性:、變量:指存儲(chǔ)在存儲(chǔ)單元中的值,所有變量有三個(gè)屬性:v段值段值SEGMENTSEGMENT:變量所在段的段基址:變量所在段的段基址v段內(nèi)偏移地址段內(nèi)偏移地址OFFSETOFFSET:變量所在地址和所在段首地址之:變量所在地址和所在段首地址之間的偏移字節(jié)數(shù)間的偏移字節(jié)數(shù)v類型類型TYPETYPE:變量中每個(gè)元素包含的字節(jié)數(shù)。:變量中每個(gè)元素包含的字節(jié)數(shù)。3 3、標(biāo)號(hào):可執(zhí)行指令語句地址的符號(hào)表示,三個(gè)屬性:、標(biāo)號(hào):可執(zhí)行指令語句地址的符號(hào)表示,三個(gè)屬性:v段值段值SEGMENTSEGMENT:標(biāo)號(hào)所在段的段基址:標(biāo)號(hào)所在段的段基址v段內(nèi)偏移地址段內(nèi)偏移地
13、址OFFSETOFFSET:標(biāo)號(hào)所在地址和所在段首地址之:標(biāo)號(hào)所在地址和所在段首地址之間的偏移字節(jié)數(shù)間的偏移字節(jié)數(shù)v類型類型TYPETYPE:指轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離,也叫距離:指轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離,也叫距離屬性,屬性,NEARNEAR(近標(biāo)號(hào),實(shí)現(xiàn)本代碼段內(nèi)轉(zhuǎn)移)、(近標(biāo)號(hào),實(shí)現(xiàn)本代碼段內(nèi)轉(zhuǎn)移)、FARFAR(遠(yuǎn)標(biāo)(遠(yuǎn)標(biāo)號(hào),段間轉(zhuǎn)移)號(hào),段間轉(zhuǎn)移)2022-2-411 補(bǔ)充:補(bǔ)充:o變量:放在偽指令前的標(biāo)識(shí)符是變量變量:放在偽指令前的標(biāo)識(shí)符是變量o標(biāo)號(hào):放在指令前的標(biāo)識(shí)符是標(biāo)號(hào)標(biāo)號(hào):放在指令前的標(biāo)識(shí)符是標(biāo)號(hào),標(biāo)號(hào)后有標(biāo)號(hào)后有“:”o都有段地址、偏移地址、類型等屬性。都有段地址、偏
14、移地址、類型等屬性。o例如:例如:DATA SEGMENT TRY DB 20DATA ENDSNEXT: . LOOP NEXT2022-2-4124-2、MASM中的表達(dá)式中的表達(dá)式o表達(dá)式表達(dá)式=操作數(shù)操作數(shù)+運(yùn)算符。運(yùn)算符。o表達(dá)式可出現(xiàn)于源程序的任何地方,表達(dá)式可出現(xiàn)于源程序的任何地方,o在在匯編過程中匯編過程中(而不是程序執(zhí)行過程中而不是程序執(zhí)行過程中)即可產(chǎn)生)即可產(chǎn)生確定的值。運(yùn)算的結(jié)果作為語句中的操作數(shù)使用。確定的值。運(yùn)算的結(jié)果作為語句中的操作數(shù)使用。p6類運(yùn)算符:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)類運(yùn)算符:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、數(shù)值返回運(yùn)算符、修改屬性運(yùn)算符、其它
15、算符、數(shù)值返回運(yùn)算符、修改屬性運(yùn)算符、其它運(yùn)算符運(yùn)算符2022-2-413o算術(shù)運(yùn)算符:算術(shù)運(yùn)算符:+、-、*、/、MOD、SHL、SHRo邏輯運(yùn)算符:邏輯運(yùn)算符:AND、OR、XOR、NOTo關(guān)系運(yùn)算符:關(guān)系運(yùn)算符:EQ、NE、GT、 LT、 GE 、LEo分析運(yùn)算符:分析運(yùn)算符:SEG、OFFSET、TYPE、SIZE、LENGTH 、HIGH、LOWo綜合運(yùn)算符:綜合運(yùn)算符:PTR、DS:、THIS、SHORT2022-2-414一、算術(shù)運(yùn)算符一、算術(shù)運(yùn)算符數(shù)值表達(dá)式數(shù)值表達(dá)式中可使用所有算術(shù)運(yùn)算符中可使用所有算術(shù)運(yùn)算符地址表達(dá)式地址表達(dá)式僅使用僅使用+、-算術(shù)運(yùn)算符算術(shù)運(yùn)算符/除法,取
16、商。除法,取商。MOD除法取余數(shù)。除法取余數(shù)。例例4-2 數(shù)組數(shù)組ARRAY定義如下:定義如下:ARRAY DB 1,2,3,4,5,6,7,8TRY DB 20指令為:指令為:MOV AX,30*5MOV CX,(,(TRY-ARRAY)匯編時(shí),計(jì)算表達(dá)式形成的指令為:匯編時(shí),計(jì)算表達(dá)式形成的指令為:MOV AX,150MOV CX,8+、-、*、/、MOD、SHL、SHR2022-2-415二、邏輯運(yùn)算符二、邏輯運(yùn)算符o邏輯運(yùn)算符在兩個(gè)操作數(shù)之間邏輯運(yùn)算符在兩個(gè)操作數(shù)之間按位按位進(jìn)行二進(jìn)制布爾運(yùn)算,結(jié)進(jìn)行二進(jìn)制布爾運(yùn)算,結(jié)果產(chǎn)生確定的數(shù)值。果產(chǎn)生確定的數(shù)值。AND、 OR、 NOT、 XO
17、Ro邏輯運(yùn)算符只能對(duì)邏輯運(yùn)算符只能對(duì)常數(shù)常數(shù)進(jìn)行運(yùn)算,運(yùn)算結(jié)果也是常數(shù)。進(jìn)行運(yùn)算,運(yùn)算結(jié)果也是常數(shù)。o例例:AND BL, 46H AND 0FH; 匯編后得到匯編后得到 “ AND BL, 06H ” 的目標(biāo)碼的目標(biāo)碼2022-2-416三、關(guān)系運(yùn)算符三、關(guān)系運(yùn)算符o在兩個(gè)在兩個(gè)無符號(hào)無符號(hào)操作數(shù)之間進(jìn)行大小關(guān)系比較操作數(shù)之間進(jìn)行大小關(guān)系比較oEQ(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于或等于)、(小于或等于)、GE(大于或等于)(大于或等于)o若關(guān)系滿足則返回若關(guān)系滿足則返回全全1,否則返回,否則返回全全0。(。(0FFH0FF
18、FFH0)o兩個(gè)操作數(shù)必須為兩個(gè)操作數(shù)必須為 數(shù)據(jù)數(shù)據(jù) 或是同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址或是同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址o例例: MOV AX, 0A2H NE 02H ; 匯編后得到匯編后得到 “ MOV AX, 0FFFFH ” 的目標(biāo)碼的目標(biāo)碼例例4-6 MOV CX,(PORT LT 5)AND 100)OR(PORT GE 5)AND 200)2022-2-417四、數(shù)值返回運(yùn)算符(分析運(yùn)算符)四、數(shù)值返回運(yùn)算符(分析運(yùn)算符)o對(duì)單個(gè)操作數(shù)進(jìn)行屬性分解,分別返回不同屬性的值對(duì)單個(gè)操作數(shù)進(jìn)行屬性分解,分別返回不同屬性的值oSEG取取變量或標(biāo)號(hào)變量或標(biāo)號(hào)所在段的段基址,結(jié)果為所在段的段基
19、址,結(jié)果為16位值位值o OFFSET 取取變量或標(biāo)號(hào)變量或標(biāo)號(hào)的段內(nèi)偏移量,結(jié)果為的段內(nèi)偏移量,結(jié)果為16位值位值o TYPE 取取變量或標(biāo)號(hào)變量或標(biāo)號(hào)的類型的類型o LENGTH 取取變量變量重復(fù)次數(shù)重復(fù)次數(shù) or 1只和有無只和有無DUP有關(guān)有關(guān)o SIZE 取分配給取分配給變量變量的字節(jié)個(gè)數(shù)的字節(jié)個(gè)數(shù)SIZE=LENGTH*TYPE類型類型返回值返回值變量變量DBDWDDDQ1248標(biāo)號(hào)標(biāo)號(hào)NEARFAR-1FFH-2FEH表表4-2 TYPE運(yùn)算符返回值運(yùn)算符返回值2022-2-418例例則:則:SEG BUFF = CSEG ;段基址;段基址 OFFSET BUFF = 0 ;偏移
20、量;偏移量 TYPE BUFF = 2(字)(字) ;類型;類型 LENGTH BUFF = 10 ;DUP次數(shù)次數(shù) SIZE BUFF = 10*2 = 20 ;字節(jié)數(shù);字節(jié)數(shù)SEG COUN = CSEGOFFSET COUN = 24TYPE COUN = 4(雙字)(雙字) LENGTH COUN = 1 SIZE COUN = 4 2022-2-419修改屬性運(yùn)算符(綜合運(yùn)算符)修改屬性運(yùn)算符(綜合運(yùn)算符)o可以在程序運(yùn)行過程中,通過可以在程序運(yùn)行過程中,通過“修改屬性運(yùn)算符修改屬性運(yùn)算符”來來修改變量或標(biāo)號(hào)的屬性修改變量或標(biāo)號(hào)的屬性,包括段屬性、偏移地址,包括段屬性、偏移地址屬性、
21、類型屬性等。屬性、類型屬性等。o有有: 段操作符、段操作符、PTR、THIS、HIGH、LOW、SHORT2022-2-420o段操作符段操作符(P36 表表2-7)格式:格式:段前綴:變量或地址表達(dá)式段前綴:變量或地址表達(dá)式功能:功能:修改變量或表達(dá)式到某個(gè)段寄存器提供的段基址中修改變量或表達(dá)式到某個(gè)段寄存器提供的段基址中段前綴:段前綴:CS、ES、DS、SSEg4-12:MOVAX,ES:BXoPTR:給已分配的存儲(chǔ)單元或標(biāo)號(hào)賦予新的屬性。:給已分配的存儲(chǔ)單元或標(biāo)號(hào)賦予新的屬性。格式:類型格式:類型/距離距離 PTR 變量或標(biāo)號(hào)變量或標(biāo)號(hào)功能:將功能:將PTR左邊的類型屬性賦給右邊的變量或
22、標(biāo)號(hào)左邊的類型屬性賦給右邊的變量或標(biāo)號(hào)常與常與BYTE、WORD、NEAR、FAR等連用等連用Eg4-13: N1DB15H,36H MOV AX,WORD PTR N12022-2-421oPTR例例o MUL BYTE PTRBX ;限定存儲(chǔ)器操作數(shù)的類型限定存儲(chǔ)器操作數(shù)的類型oJMP WORD PTRBX ;段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移oJMP DWORD PTRBX ;段間轉(zhuǎn)移;段間轉(zhuǎn)移 CS:IPoJMP FAR PTR LO ;段間轉(zhuǎn)移;段間轉(zhuǎn)移2022-2-422qTHIS:q格式:變量格式:變量/標(biāo)號(hào)標(biāo)號(hào) EQU THIS 類型類型/距離距離q功能:該變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存
23、儲(chǔ)功能:該變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元的地址相同,并具有單元的地址相同,并具有THIS后的屬性后的屬性qEg4-45:FIRST EQU THIS BYTE TABLE DW 200DUP(?)(?) EG4-46 :SP1 EQU THIS FAR MOV AX,100oSHORT:格式:格式:SHORT 標(biāo)號(hào)標(biāo)號(hào)功能:限制轉(zhuǎn)移類指令為短轉(zhuǎn)移(功能:限制轉(zhuǎn)移類指令為短轉(zhuǎn)移(-128127)Eg:L1:JMP SHORT L2 . L2:MOV AX,02022-2-423oHIGH、LOW(字節(jié)分離運(yùn)算符)(字節(jié)分離運(yùn)算符)格式:格式:HIGH/LOW 變量或標(biāo)號(hào)變量或標(biāo)號(hào)功
24、能:對(duì)于一個(gè)數(shù)或表達(dá)式,分離出高位字節(jié)和低位字節(jié)功能:對(duì)于一個(gè)數(shù)或表達(dá)式,分離出高位字節(jié)和低位字節(jié)Eg: K1 EQU 0ABCDHK2 EQU 1234HMOV AH, HIGH K1MOV BL, LOW K2經(jīng)過匯編后形成指令:經(jīng)過匯編后形成指令:MOV AH,0ABHMOV BL,34H2022-2-4244-3 8086宏匯編語言常用偽指令宏匯編語言常用偽指令o8086宏匯編語言宏匯編語言MASM5.0規(guī)定的常用偽指令,包括規(guī)定的常用偽指令,包括數(shù)據(jù)定義語句數(shù)據(jù)定義語句DB、DW、DD標(biāo)號(hào)賦值語句:標(biāo)號(hào)賦值語句:EQU、=段定義語句段定義語句SEGMENT、ENDS段分配語句:段分配
25、語句:ASSUME過程定義語句:過程定義語句:PROC.ENDP程序開始結(jié)束語句:程序開始結(jié)束語句:ORG、END、NAME群定義語句群定義語句GROUP結(jié)構(gòu)定義語句:結(jié)構(gòu)定義語句:STRUC.ENDS記錄定義語句:記錄定義語句:RECODE2022-2-425一、數(shù)據(jù)定義語句一、數(shù)據(jù)定義語句DB、DW、DD等等o用于為數(shù)據(jù)項(xiàng)用于為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元分配存儲(chǔ)單元并并預(yù)置初值預(yù)置初值。DB 變量為變量為字節(jié)字節(jié)數(shù)據(jù)類型(數(shù)據(jù)類型(8位位)DW 變量為變量為字字?jǐn)?shù)據(jù)類型(數(shù)據(jù)類型(16位位)DD 變量為變量為雙字雙字?jǐn)?shù)據(jù)類型(數(shù)據(jù)類型(32位位)DQ 變量為變量為4字字?jǐn)?shù)據(jù)類型(數(shù)據(jù)類型(64位位
26、)DT 變量為變量為10字節(jié)字節(jié)數(shù)據(jù)類型(數(shù)據(jù)類型(80位位)格式格式1:變量名:變量名 助記符助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋格式格式2:變量名:變量名 助記符助記符 n DUP(操作數(shù),操作數(shù)(操作數(shù),操作數(shù).) ;注釋;注釋2022-2-426oONE DB 8; 給變量給變量ONE分配一個(gè)字節(jié)分配一個(gè)字節(jié),并,并 預(yù)置初值為預(yù)置初值為8oTWODB ?; 字節(jié)變量字節(jié)變量TWO初值不定初值不定oST DB 96, 20, ?, 57; 以以ST為首址為首址連續(xù)分配連續(xù)分配4個(gè)字節(jié)的存儲(chǔ)單元個(gè)字節(jié)的存儲(chǔ)單元oSTR DB How are you ? $ ; 定義定義字符
27、串字符串oTWIN DB 5 DUP( 0FFH ); 連續(xù)分配連續(xù)分配5個(gè)字節(jié)個(gè)字節(jié),初值均為,初值均為0FFH2022-2-427DB 與與DW的應(yīng)用的應(yīng)用41H42H42H41H20H30H30H20H注意注意 :用:用DWDW定義字符串時(shí)只允許包括兩個(gè)定義字符串時(shí)只允許包括兩個(gè)字符,多于兩個(gè)字符只能用字符,多于兩個(gè)字符只能用DBDB定義。定義。2022-2-428例例o設(shè)設(shè)DATA的段首地址為的段首地址為2000HDATA SEGMENTORG 0004HAVR1 DW 2030H AVR2 DB 40HDWVR DW AVR1DDVR DD AVR2DATA ENDS30H20H40
28、H04H00H06H00H00H20HAVR1AVR2DWVRDDVR0004H0006H0009H用偽指令可以將變量或標(biāo)號(hào)的偏移地址存入存儲(chǔ)器,當(dāng)用用偽指令可以將變量或標(biāo)號(hào)的偏移地址存入存儲(chǔ)器,當(dāng)用DD定義的定義的時(shí)候,變量或標(biāo)號(hào)的偏移地址存入低位字中,段地址存入高位字中。時(shí)候,變量或標(biāo)號(hào)的偏移地址存入低位字中,段地址存入高位字中。2022-2-429二、表達(dá)式賦值語句二、表達(dá)式賦值語句o格式:符號(hào)名格式:符號(hào)名 EQU 表達(dá)式表達(dá)式o功能:用于給變量、標(biāo)號(hào)、常數(shù)、指令、表達(dá)式等定義功能:用于給變量、標(biāo)號(hào)、常數(shù)、指令、表達(dá)式等定義一個(gè)一個(gè)符號(hào)名符號(hào)名,程序中用到左邊的變量標(biāo)號(hào)時(shí)可用右邊的,程
29、序中用到左邊的變量標(biāo)號(hào)時(shí)可用右邊的常數(shù)或表達(dá)式代替常數(shù)或表達(dá)式代替o特點(diǎn)特點(diǎn) :一經(jīng)定義不能重新定義一經(jīng)定義不能重新定義 例例4-27 COUNT EQU 100 DATA EQU COUNT+2(注:(注:count必須提前定義)必須提前定義)A1 EQU BX+SIB1 EQU OFFSET A1C1 EQU ADD2022-2-430o等號(hào)語句等號(hào)語句 ;賦值;賦值PP = 89FAHPP = PP+1; PP = 89FBHo等號(hào)語句等號(hào)語句與與EQU語句語句的相同點(diǎn)在于的相同點(diǎn)在于:定義符號(hào)而非變量,定義符號(hào)而非變量,故用故用EQU、= 定義的符號(hào)定義的符號(hào)不占用存儲(chǔ)器單元不占用存儲(chǔ)
30、器單元o區(qū)別在于區(qū)別在于:等號(hào)語句等號(hào)語句可以在同一源程序中重復(fù)定義符號(hào)而可以在同一源程序中重復(fù)定義符號(hào)而無需解除無需解除2022-2-431三、段定義語句三、段定義語句o段定義語句段定義語句 SEGMENT / ENDSo用于對(duì)用于對(duì) DS、ES、SS、CS 段的定義段的定義o語句格式:語句格式:段名段名 SEGMENT 定位類型定位類型 組合類型組合類型 分類名分類名 段名段名 ENDSoENDS必須與必須與SEGMENT成對(duì)出現(xiàn),且成對(duì)出現(xiàn),且段名必須一致段名必須一致。2022-2-432段定義的相關(guān)約定(略)段定義的相關(guān)約定(略)2022-2-433段定義的相關(guān)約定(略)段定義的相關(guān)約
31、定(略)STACK:此參數(shù)在堆棧段中不能省略,多個(gè)模塊只需一個(gè):此參數(shù)在堆棧段中不能省略,多個(gè)模塊只需一個(gè)堆棧段,各個(gè)模塊的堆棧段采用覆蓋方式組合,容量為其中堆棧段,各個(gè)模塊的堆棧段采用覆蓋方式組合,容量為其中最大的那段的容量。最大的那段的容量。COMMON:本段與其它:本段與其它同名段有相同的起始地址同名段有相同的起始地址,采用,采用覆蓋方式在存儲(chǔ)器中存放,長度為同名段中最大段的長度。覆蓋方式在存儲(chǔ)器中存放,長度為同名段中最大段的長度。AT表達(dá)式:連接程序把本段裝在表達(dá)式值所表達(dá)式:連接程序把本段裝在表達(dá)式值所指定的段地址指定的段地址(此方式不能指定代碼段)。(此方式不能指定代碼段)。MEM
32、ORY:定位該段與其它模塊中的同名段有相同的首地:定位該段與其它模塊中的同名段有相同的首地址,采用覆蓋方式在存儲(chǔ)器中組合連接,功能與址,采用覆蓋方式在存儲(chǔ)器中組合連接,功能與COMMAN類似,區(qū)別在于第一個(gè)類似,區(qū)別在于第一個(gè)MEMORY邏輯段覆蓋其它段。邏輯段覆蓋其它段。分類名分類名:給各段的名字信息,連接程序?qū)ⅲ航o各段的名字信息,連接程序?qū)㈩悇e名相同的段類別名相同的段組成組成一個(gè)段組用它們共同的名字作為這個(gè)段組的名字,物一個(gè)段組用它們共同的名字作為這個(gè)段組的名字,物理上相鄰的連接在一起。類別必須用單引號(hào)括起來。理上相鄰的連接在一起。類別必須用單引號(hào)括起來。2022-2-434地址計(jì)數(shù)偽指令
33、地址計(jì)數(shù)偽指令$SORTD SEGMENTARRAY DB 25,46,3,75,5COUNT EQU $-ARRAYSORTD ENDSoARRAY的偏移地址的偏移地址:0000Ho$ 的偏移地址的偏移地址:0005Ho$-ARRAY 實(shí)際是實(shí)際是ARRAY數(shù)組的長度數(shù)組的長度表示表示當(dāng)前偏移地址值,當(dāng)前偏移地址值,常用來常用來計(jì)算變量定義的數(shù)組計(jì)算變量定義的數(shù)組或字符串的個(gè)數(shù)?;蜃址膫€(gè)數(shù)。2022-2-435段分配語句段分配語句ASSUMEASSUME 偽指令僅用在代碼段首行偽指令僅用在代碼段首行,用來將邏輯段分用來將邏輯段分別定義成代碼段、數(shù)據(jù)段、堆棧段及附加段別定義成代碼段、數(shù)據(jù)段
34、、堆棧段及附加段2022-2-436o每個(gè)段的容量小于等于每個(gè)段的容量小于等于64KBo用戶可以設(shè)置多個(gè)邏輯段,但只允許用戶可以設(shè)置多個(gè)邏輯段,但只允許4個(gè)邏輯段同時(shí)有效個(gè)邏輯段同時(shí)有效o4個(gè)邏輯段不一定全部定義,通常個(gè)邏輯段不一定全部定義,通常代碼段代碼段和和數(shù)據(jù)段數(shù)據(jù)段是必須的是必須的o如果代碼段中使用了串指令,必須設(shè)置附加段做目標(biāo)串基址如果代碼段中使用了串指令,必須設(shè)置附加段做目標(biāo)串基址oASSUME只指定某個(gè)段分配給哪個(gè)段寄存器,并將代碼段只指定某個(gè)段分配給哪個(gè)段寄存器,并將代碼段的段基址的段基址自動(dòng)裝入自動(dòng)裝入CS寄存器寄存器,而不能把其它段基址裝入相,而不能把其它段基址裝入相應(yīng)的段
35、寄存器,所以在應(yīng)的段寄存器,所以在代碼段的開始要有初始化程序代碼段的開始要有初始化程序完成這完成這個(gè)工作。對(duì)個(gè)工作。對(duì)堆棧段來說堆棧段來說,除了將段基址送入,除了將段基址送入SS寄存器寄存器,還,還需要將棧頂偏移地址置入堆棧指示器需要將棧頂偏移地址置入堆棧指示器SP。o例例例例4-29:求兩個(gè)求兩個(gè)16位無符號(hào)數(shù)相乘位無符號(hào)數(shù)相乘 DATA SEGMENT D1 DW 1234H D2 DW 5678H P1 DD ? P2 DD ? DATA ENDS STACK SEGMENT STACK STT DB 100 DUP(?) TOP EQU LENGTH STT STACK ENDS CO
36、DE SEGMENT ASSUME CS:CODE , DS:DATA , SS:STACK MAIN PROC FAR START: MOV AX, STACK MOV SS, AX MOV SP, TOP PUSH DS SUB AX,AX PUSH AX MOV AX, DATA MOV DS, AX MOV AX, D1 MUL D2 MOV BX, OFFSET P1 MOV BX, AX MOV BX+2, DX RET MAIN ENDP CODE ENDS END STARTTOP=?2022-2-438四、過程定義偽指令四、過程定義偽指令PROC FAR 、ENDP 遠(yuǎn)遠(yuǎn)過程
37、定義偽指令過程定義偽指令PROC NEAR、ENDP 近近過程定義偽指令過程定義偽指令2022-2-439o過程名過程名實(shí)質(zhì)上是過程入口的實(shí)質(zhì)上是過程入口的符號(hào)地址符號(hào)地址,也有,也有三種屬性三種屬性:段屬段屬性性、偏移量屬性偏移量屬性和和類型類型。過程的。過程的類型屬性類型屬性可以是可以是NEARNEAR或或FARFAR。q 過程和其它程序可定義在同一個(gè)段中,也可定義在不同的段過程和其它程序可定義在同一個(gè)段中,也可定義在不同的段中。對(duì)過程的調(diào)用要使用中。對(duì)過程的調(diào)用要使用CALLCALL語句語句,如:,如: CALL PROC_NAME1注:注:如果在過程定義中沒有寫明是如果在過程定義中沒有
38、寫明是NEARNEAR過程或過程或FARFAR過程,則匯編過程,則匯編器將這個(gè)過程默認(rèn)為器將這個(gè)過程默認(rèn)為NEARNEAR過程。過程。例例COD1SEGMENTASSUME CS: COD1, ; 代碼段中的其它語句(主程序)代碼段中的其它語句(主程序)SUB1 PROC FAR; 名為名為SUB1的的FAR過程開始過程開始 RET; 返回返回SUB1 ENDP; SUB1結(jié)束結(jié)束SUB2 PROC ; 名為名為SUB2的的NEAR過程過程開始開始 RET; 返回返回SUB2 ENDP; SUB2結(jié)束結(jié)束; 可能定義的其它過程可能定義的其它過程COD1ENDS; 代碼段結(jié)束代碼段結(jié)束2022-
39、2-441五、程序開始和結(jié)束語句五、程序開始和結(jié)束語句o語句格式:語句格式:ORG 表達(dá)式或常量表達(dá)式或常量oORG語句之后段內(nèi)所有的數(shù)據(jù)或代碼均以表達(dá)式或常量的語句之后段內(nèi)所有的數(shù)據(jù)或代碼均以表達(dá)式或常量的值為值為起始偏移量起始偏移量連續(xù)存放,除非遇到另一個(gè)連續(xù)存放,除非遇到另一個(gè)ORG語句。語句。o此語句本身并不占內(nèi)存。此語句本身并不占內(nèi)存。2022-2-442例例4-33 用用ORG指定代碼段地址指定代碼段地址CODE SEGMENTORG 100HASSUME CS:CODE,DS:DATASTART:MOVAX,DATACODE ENDS請(qǐng)問:這里請(qǐng)問:這里100H是哪條語句的偏移地
40、址呢?是哪條語句的偏移地址呢?2022-2-4432、NAME格式:格式:NAME NAME 程序名程序名功能:給源程序匯編以后得到的目標(biāo)程序指定一個(gè)程序名,連功能:給源程序匯編以后得到的目標(biāo)程序指定一個(gè)程序名,連接時(shí)需要使用這個(gè)目標(biāo)程序的名。接時(shí)需要使用這個(gè)目標(biāo)程序的名。注釋:如果程序中沒有注釋:如果程序中沒有NAMENAME偽指令,則匯編程序?qū)沃噶?,則匯編程序?qū)ITLETITLE偽指令偽指令(TITLE(TITLE屬于列表偽指令屬于列表偽指令) )后面后面“標(biāo)題名標(biāo)題名”中的前六個(gè)字符作中的前六個(gè)字符作為模塊名。為模塊名。如果源程序中既沒有使用如果源程序中既沒有使用NAMENAME,也
41、沒有使用,也沒有使用 TITLETITLE偽指令,則匯編程序?qū)⒃闯绦虻奈募鳛槟繕?biāo)程序偽指令,則匯編程序?qū)⒃闯绦虻奈募鳛槟繕?biāo)程序的模塊名。的模塊名。 2022-2-4443. END3. END 格式:格式:END標(biāo)號(hào)標(biāo)號(hào) 功能:功能:標(biāo)記匯編程序結(jié)束。標(biāo)記匯編程序結(jié)束。 END偽指令助記符,不可缺省,在源程序最后一行,偽指令助記符,不可缺省,在源程序最后一行,每個(gè)模塊只有一個(gè)每個(gè)模塊只有一個(gè)END,匯編程序到,匯編程序到END語句停止匯編。語句停止匯編。 標(biāo)號(hào)標(biāo)號(hào)是該程序中是該程序中第一條可執(zhí)行語句第一條可執(zhí)行語句的標(biāo)號(hào),可以缺的標(biāo)號(hào),可以缺省。省。 以上幾類偽指令語句是經(jīng)常用到的,下
42、面所介紹的偽指以上幾類偽指令語句是經(jīng)常用到的,下面所介紹的偽指令語句對(duì)于靈活的編程較為有用。自學(xué)。令語句對(duì)于靈活的編程較為有用。自學(xué)。2022-2-4454-4. DOS4-4. DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和BIOSBIOS中斷調(diào)用中斷調(diào)用用戶程序高級(jí)語言高級(jí)語言DOS操作系統(tǒng)其它操作系統(tǒng)BIOS硬件系統(tǒng)用戶程序和操作系統(tǒng)的關(guān)系用戶程序和操作系統(tǒng)的關(guān)系2022-2-4464-4. DOS4-4. DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和BIOSBIOS中斷調(diào)用中斷調(diào)用o補(bǔ)充知識(shí):補(bǔ)充知識(shí):當(dāng)我們編寫的匯編語言源程序是在當(dāng)我們編寫的匯編語言源程序是在DOSDOS環(huán)境環(huán)境下運(yùn)行時(shí),下運(yùn)行時(shí),必須必
43、須了解匯編語言是如何同了解匯編語言是如何同DOSDOS操作系統(tǒng)接口操作系統(tǒng)接口的。的。 當(dāng)我們用編輯程序把源程序輸入到機(jī)器中,用匯編程序把它轉(zhuǎn)換當(dāng)我們用編輯程序把源程序輸入到機(jī)器中,用匯編程序把它轉(zhuǎn)換為目標(biāo)程序,為目標(biāo)程序,用連接程序?qū)ζ溥M(jìn)行連接和定位時(shí),操作系統(tǒng)為每用連接程序?qū)ζ溥M(jìn)行連接和定位時(shí),操作系統(tǒng)為每一個(gè)用戶程序建立了一個(gè)一個(gè)用戶程序建立了一個(gè)程序段前綴區(qū)程序段前綴區(qū)PSPPSP,其長度為,其長度為256256個(gè)字節(jié),個(gè)字節(jié),主要主要用于存放所要執(zhí)行程序的有關(guān)信息用于存放所要執(zhí)行程序的有關(guān)信息,同時(shí),同時(shí)也提供了程序和操也提供了程序和操作系統(tǒng)的接口作系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的
44、開始處。操作系統(tǒng)在程序段前綴的開始處( (偏移地址偏移地址0000H)0000H)安排了一條安排了一條INT 20HINT 20H軟中斷指令。軟中斷指令。INT 20HINT 20H中斷服務(wù)程序由中斷服務(wù)程序由DOSDOS提提供,執(zhí)行該服務(wù)程序后,控制就轉(zhuǎn)移到供,執(zhí)行該服務(wù)程序后,控制就轉(zhuǎn)移到DOSDOS,即返回到,即返回到DOSDOS管理的管理的狀態(tài)。狀態(tài)。因此,用戶在組織程序時(shí),必須使程序執(zhí)行完后能去執(zhí)行因此,用戶在組織程序時(shí),必須使程序執(zhí)行完后能去執(zhí)行存放于存放于PSPPSP開始處的開始處的INT 20HINT 20H指令,這樣便返回到指令,這樣便返回到DOSDOS,否則就無,否則就無法
45、繼續(xù)鍵入命令和程序。法繼續(xù)鍵入命令和程序。2022-2-447 DOS DOS在建立了程序段前綴區(qū)在建立了程序段前綴區(qū)PSPPSP之后,就將要執(zhí)行的程序之后,就將要執(zhí)行的程序(加載加載 文件時(shí)文件時(shí))從磁盤裝入內(nèi)存。在定位程序時(shí),從磁盤裝入內(nèi)存。在定位程序時(shí),DOSDOS將代碼段置于將代碼段置于PSPPSP下方,代碼段之后是數(shù)據(jù)段,最后放置堆棧段。內(nèi)存分配好下方,代碼段之后是數(shù)據(jù)段,最后放置堆棧段。內(nèi)存分配好之后,之后,DOSDOS就設(shè)置段寄存器就設(shè)置段寄存器DSDS和和ESES的值,以使它們指向的值,以使它們指向PSPPSP的開始的開始處處,即即INT 20HINT 20H的存放地址,同時(shí)的
46、存放地址,同時(shí)將將CSCS設(shè)置為設(shè)置為PSPPSP后面代碼段的段后面代碼段的段地址,地址,IPIP設(shè)置為指向代碼段中第一條要執(zhí)行的指令位置設(shè)置為指向代碼段中第一條要執(zhí)行的指令位置,把,把SSSS設(shè)設(shè)置為指向堆棧的段地址,讓置為指向堆棧的段地址,讓SPSP指向堆棧段的棧底指向堆棧段的棧底( (取決于堆棧的取決于堆棧的長度長度) ),然后系統(tǒng)開始執(zhí)行用戶程序,然后系統(tǒng)開始執(zhí)行用戶程序。 為了保證用戶程序執(zhí)行完后能返回到為了保證用戶程序執(zhí)行完后能返回到DOSDOS狀態(tài),可使用如下兩種狀態(tài),可使用如下兩種方法。方法。 2022-2-448用戶程序返回用戶程序返回DOS的方法的方法(1)標(biāo)準(zhǔn)方法)標(biāo)準(zhǔn)方
47、法 首先將用戶程序的主程序定義成一個(gè)首先將用戶程序的主程序定義成一個(gè)FAR過程過程,其最后一條指令,其最后一條指令為為RET。然后在代碼段的主程序。然后在代碼段的主程序(即即FAR過程過程)的開始部分用如下的開始部分用如下三條指令將三條指令將PSP中中INT 20H 指令的段地址及偏移地址壓入堆棧指令的段地址及偏移地址壓入堆棧:PUSHDS ;保護(hù);保護(hù)PSP段地址段地址MOV AX,0 ;保護(hù)偏移地址;保護(hù)偏移地址0PUSH AX 這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令RETRET時(shí),由于該過時(shí),由于該過程具有程具有FARFAR屬性,故存在堆棧內(nèi)的兩個(gè)字
48、就分別彈出到屬性,故存在堆棧內(nèi)的兩個(gè)字就分別彈出到CSCS和和IPIP,從而執(zhí)行從而執(zhí)行INT 20HINT 20H指令,使控制返回到指令,使控制返回到DOSDOS狀態(tài)。狀態(tài)。2022-2-449用戶程序返回用戶程序返回DOS的方法的方法(2)非標(biāo)準(zhǔn)方法)非標(biāo)準(zhǔn)方法 也可在用戶的程序中不定義過程段,只在代碼段結(jié)束之前也可在用戶的程序中不定義過程段,只在代碼段結(jié)束之前(即即CODE ENDS之前之前)增加兩條語句:增加兩條語句:MOV AH,4CHINT 21H則程序執(zhí)行完后也會(huì)自動(dòng)返回則程序執(zhí)行完后也會(huì)自動(dòng)返回DOS狀態(tài)。狀態(tài)。 2022-2-450例:基本程序結(jié)構(gòu)(例:基本程序結(jié)構(gòu)(1)CO
49、DE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKBEGIN: MOV AX, DATA MOV DS, AX CODE SEGMENT END BEGIN為段寄存器賦值為段寄存器賦值2022-2-451基本程序結(jié)構(gòu)(基本程序結(jié)構(gòu)(2)2022-2-452二、二、DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用oDOS提供若干的軟中斷調(diào)用,例如提供若干的軟中斷調(diào)用,例如讀寫磁盤扇區(qū)的軟中斷讀寫磁盤扇區(qū)的軟中斷INT 25H 和和 INT 26H,退出程序的軟中斷退出程序的軟中斷 INT 20H、INT 22H等。等。o軟中斷中以軟中斷中以INT 21H功能最強(qiáng),它提供一系列
50、的功能調(diào)用,功能最強(qiáng),它提供一系列的功能調(diào)用,可以說幾乎包括了整個(gè)系統(tǒng)的功能??梢哉f幾乎包括了整個(gè)系統(tǒng)的功能。o要求要求 :掌握:掌握 INT 21H 中的幾個(gè)基本的輸入輸出調(diào)用。其中的幾個(gè)基本的輸入輸出調(diào)用。其它的掌握使用的方法即可它的掌握使用的方法即可2022-2-453二、二、DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用 系統(tǒng)功能調(diào)用是微機(jī)的磁盤操作系統(tǒng)系統(tǒng)功能調(diào)用是微機(jī)的磁盤操作系統(tǒng)DOSDOS為用戶提供的一為用戶提供的一組例行組例行子程序子程序,因而又稱為,因而又稱為DOSDOS系統(tǒng)功能調(diào)用。系統(tǒng)功能調(diào)用。 為了使用方便,系統(tǒng)已將所有為了使用方便,系統(tǒng)已將所有子程序子程序按順序編號(hào),稱為按順序編號(hào)
51、,稱為調(diào)用號(hào)(又稱子功能號(hào))調(diào)用號(hào)(又稱子功能號(hào))。對(duì)于所有的功能調(diào)用,使用時(shí)一。對(duì)于所有的功能調(diào)用,使用時(shí)一般需要經(jīng)過以下般需要經(jīng)過以下四個(gè)步驟四個(gè)步驟: (1) (1) 系統(tǒng)功能號(hào)送系統(tǒng)功能號(hào)送AHAH寄存器。寄存器。 (2) (2) 入口參數(shù)送指定寄存器入口參數(shù)送指定寄存器 (3) (3) 發(fā)出中斷請(qǐng)求:發(fā)出中斷請(qǐng)求:INT 21H(INT 21H(系統(tǒng)功能調(diào)用指令系統(tǒng)功能調(diào)用指令) )。 (4) (4) 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況。 2022-2-4541、DOS鍵盤功能調(diào)用鍵盤功能調(diào)用表表4-7 DOS鍵盤功能調(diào)用鍵盤功能調(diào)用AH功能功能入口參
52、數(shù)入口參數(shù)出口參數(shù)出口參數(shù)1讀鍵盤輸入的一個(gè)字符,并在屏讀鍵盤輸入的一個(gè)字符,并在屏幕上顯示,檢查幕上顯示,檢查Ctrl-Break鍵鍵AL=字符字符8同同1號(hào)子功能,無回顯號(hào)子功能,無回顯AL=字符字符6直接讀鍵盤輸入的字符,回顯,直接讀鍵盤輸入的字符,回顯,不檢查不檢查Ctrl-Break鍵鍵DL=0FFH鍵盤有輸入:鍵盤有輸入:AL=字字符,符,ZF=0; 鍵盤無輸鍵盤無輸入:入:AL=0,ZF=17直接鍵盤輸入字符,無回顯,不直接鍵盤輸入字符,無回顯,不檢查檢查Ctrl-Break鍵鍵AL=字符字符0AH輸入字符串到內(nèi)存緩沖區(qū)輸入字符串到內(nèi)存緩沖區(qū)DS:DX=緩沖區(qū)首緩沖區(qū)首址址0BH
53、檢查鍵盤輸入狀態(tài)檢查鍵盤輸入狀態(tài)AL=0FFH有鍵入有鍵入AL=00H無鍵入無鍵入0CH清鍵盤緩沖區(qū)清鍵盤緩沖區(qū)AL=鍵盤功能號(hào)鍵盤功能號(hào)(1,6,7,8,0A)出口參數(shù)依賴于清除出口參數(shù)依賴于清除標(biāo)準(zhǔn)輸入緩沖區(qū)后使標(biāo)準(zhǔn)輸入緩沖區(qū)后使用的功能調(diào)用。用的功能調(diào)用。2022-2-455 (1) (1)鍵入單字符:鍵入單字符: 1 1號(hào)功能調(diào)用:號(hào)功能調(diào)用: 調(diào)用格式:調(diào)用格式:MOVMOV AH AH,1 1INT INT 21H 21H 功能:系統(tǒng)執(zhí)行該功能時(shí)將掃描鍵盤,等待鍵入。一旦有鍵功能:系統(tǒng)執(zhí)行該功能時(shí)將掃描鍵盤,等待鍵入。一旦有鍵按下,就將按下,就將鍵值鍵值( (相應(yīng)字符的相應(yīng)字符的A
54、SCIIASCII碼值碼值) )讀入讀入,先,先檢查是否檢查是否是是CtrlBreakCtrlBreak。若是,則退出命令執(zhí)行;否則將。若是,則退出命令執(zhí)行;否則將鍵值送入鍵值送入ALAL寄存器,同時(shí)將這個(gè)字符寄存器,同時(shí)將這個(gè)字符顯示顯示在屏幕上。在屏幕上。 2022-2-456例例4-51o交互式程序中用戶按下數(shù)字鍵交互式程序中用戶按下數(shù)字鍵1,2,3,程序轉(zhuǎn)入相應(yīng)的,程序轉(zhuǎn)入相應(yīng)的服務(wù)子程序,若按下其它鍵就繼續(xù)等待。服務(wù)子程序,若按下其它鍵就繼續(xù)等待。KEY: MOV AH,1INT21HCMPAL,1JEONECMPAL,2JETWOCMPAL,3JETHREEJMPKEYONE:.T
55、WO:.2022-2-457(2)輸入字符串)輸入字符串 0AH號(hào)功能調(diào)用號(hào)功能調(diào)用 調(diào)用格式:調(diào)用格式:MOV DX,數(shù)據(jù)區(qū)的首偏移地址,數(shù)據(jù)區(qū)的首偏移地址MOV AH,10INT 21H功能功能: :從鍵盤接收的字符串送到內(nèi)存數(shù)據(jù)區(qū)。要求從鍵盤接收的字符串送到內(nèi)存數(shù)據(jù)區(qū)。要求事先定義一個(gè)數(shù)據(jù)區(qū),事先定義一個(gè)數(shù)據(jù)區(qū),數(shù)數(shù)據(jù)區(qū)內(nèi)據(jù)區(qū)內(nèi)第一個(gè)字節(jié)指出數(shù)據(jù)區(qū)能容納的字符個(gè)數(shù)第一個(gè)字節(jié)指出數(shù)據(jù)區(qū)能容納的字符個(gè)數(shù),不能為零;,不能為零;第二個(gè)字第二個(gè)字節(jié)保留,以用做填寫實(shí)際輸入的字符個(gè)數(shù);節(jié)保留,以用做填寫實(shí)際輸入的字符個(gè)數(shù);從從第三個(gè)字節(jié)開始存放從鍵第三個(gè)字節(jié)開始存放從鍵盤上接收的字符串,直到盤上接
56、收的字符串,直到ENTERENTER鍵結(jié)束鍵結(jié)束。實(shí)際輸入的字符數(shù)少于定義的。實(shí)際輸入的字符數(shù)少于定義的字節(jié)數(shù),數(shù)據(jù)區(qū)內(nèi)其余字節(jié)填零;若多于定義的字節(jié)數(shù),則后來輸入的字節(jié)數(shù),數(shù)據(jù)區(qū)內(nèi)其余字節(jié)填零;若多于定義的字節(jié)數(shù),則后來輸入的字符丟掉,且響鈴。字符丟掉,且響鈴。調(diào)用時(shí),要求調(diào)用時(shí),要求DSDS:DXDX指向數(shù)據(jù)區(qū)首地址。指向數(shù)據(jù)區(qū)首地址。2022-2-458例如:例如: DATASEGMENTBUFDB 50;數(shù)據(jù)區(qū)長度;數(shù)據(jù)區(qū)長度DB ? ;保留,填入實(shí)際輸入的字符個(gè)數(shù);保留,填入實(shí)際輸入的字符個(gè)數(shù) DB 50 DUP(?) ;定義;定義50個(gè)字節(jié)存儲(chǔ)空間個(gè)字節(jié)存儲(chǔ)空間DATAENDSCO
57、DESEGMENTASSUME CS:CODE, DS:DATASTART:MOVAX, DATAMOVDS,AX MOV DX,OFFSET BUF MOV AH,10 INT 21H CODE ENDS ENDSTART2022-2-4592、DOS顯示功能調(diào)用顯示功能調(diào)用表表4-6 DOS顯示功能調(diào)用顯示功能調(diào)用AH功能功能入口參數(shù)入口參數(shù)說明說明2顯示一個(gè)字符,檢查顯示一個(gè)字符,檢查Ctrl-Break鍵鍵DL=字符字符光標(biāo)跟隨字符移動(dòng)光標(biāo)跟隨字符移動(dòng)6顯示一個(gè)字符,不檢查顯示一個(gè)字符,不檢查Ctrl-Break鍵鍵DL=字符字符(0FFH)光標(biāo)跟隨字符移動(dòng)光標(biāo)跟隨字符移動(dòng)9顯示字符串
58、顯示字符串DS:DX=串地址串地址串以串以“$”字符結(jié)束字符結(jié)束,光標(biāo)隨串移動(dòng)光標(biāo)隨串移動(dòng)2022-2-460 (1) 單字符顯示:?jiǎn)巫址@示:2號(hào)功能調(diào)用號(hào)功能調(diào)用 調(diào)用格式:調(diào)用格式: MOV DL,待顯示字符的,待顯示字符的ASCII碼碼 MOV AH,2 INT 21H 本調(diào)用執(zhí)行后,顯示器顯示其本調(diào)用執(zhí)行后,顯示器顯示其ASCII碼值放入碼值放入DL中的字符。中的字符。 2022-2-461 (2) 字符串輸出:字符串輸出:9號(hào)功能調(diào)用號(hào)功能調(diào)用調(diào)用格式:調(diào)用格式:MOV 通用寄存器,帶顯示字符串的段基址通用寄存器,帶顯示字符串的段基址MOV DS, 通用寄存器通用寄存器MOV DX
59、,待顯示字符串首字符的偏移地址,待顯示字符串首字符的偏移地址;DS:DX MOV AH,9 INT 21H 本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符串。調(diào)用時(shí),要求本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符串。調(diào)用時(shí),要求DS:DX必須指向內(nèi)存中一個(gè)以必須指向內(nèi)存中一個(gè)以“$”作為結(jié)束標(biāo)志的字符串。作為結(jié)束標(biāo)志的字符串。例如:例如: DATASEGMENTBUF DB HOW DO YOU DO?,0DH,0AH,$DATAENDSCODE SEGMENT MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,9 INT 21H CODE ENDS 換成:換成:M
60、OV DX, SEG BUFMOVDS, DXMOVDX, OFFSET BUFMOVAH, 9INT21H2022-2-463 常用系統(tǒng)功能調(diào)用應(yīng)用舉例常用系統(tǒng)功能調(diào)用應(yīng)用舉例 例例: 利用利用DOS系統(tǒng)功能調(diào)用實(shí)現(xiàn)人機(jī)對(duì)話。系統(tǒng)功能調(diào)用實(shí)現(xiàn)人機(jī)對(duì)話。 下述程序可以在屏幕上顯示一行提示信息,然后接收用戶下述程序可以在屏幕上顯示一行提示信息,然后接收用戶從鍵盤輸入的信息并將其存入內(nèi)存數(shù)據(jù)區(qū)。從鍵盤輸入的信息并將其存入內(nèi)存數(shù)據(jù)區(qū)。 DATASEGMENT PARSDB 100;定義輸入緩沖區(qū);定義輸入緩沖區(qū) DB ? DB 100 DUP(?) MESGDB WHAT IS YOUR NAME
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度家居建材配送承包服務(wù)協(xié)議
- 2025年度智能設(shè)備租賃合同中發(fā)票開具、技術(shù)支持及維護(hù)服務(wù)的約定
- 2025年度校地合作框架協(xié)議-現(xiàn)代服務(wù)業(yè)合作開發(fā)合同
- 二零二五年度股東借款給公司長期投資及收益共享協(xié)議
- 二零二五年度業(yè)主委托物業(yè)公共區(qū)域清潔維護(hù)合同
- 二零二五年度醫(yī)療機(jī)構(gòu)崗位聘用協(xié)議書(臨床醫(yī)學(xué)專業(yè))
- 2025年度新能源項(xiàng)目墊資合作協(xié)議
- 2025年度無財(cái)產(chǎn)分割協(xié)議及離婚后共同財(cái)產(chǎn)管理協(xié)議
- 二零二五年度新型商業(yè)綜合體門面租賃服務(wù)合同
- 2025年度輔導(dǎo)班知識(shí)產(chǎn)權(quán)與品牌使用權(quán)轉(zhuǎn)讓合同
- 幼兒園優(yōu)質(zhì)公開課:中班數(shù)學(xué)《到艾比家做客》課件
- 保潔巡查記錄表
- 部編人教版歷史八年級(jí)下冊(cè)《三大改造》省優(yōu)質(zhì)課一等獎(jiǎng)教案
- 水輪機(jī)調(diào)速器現(xiàn)場(chǎng)調(diào)試
- 貴州省體育高考評(píng)分標(biāo)準(zhǔn)
- 比較思想政治教育(第二版)第十二章課件
- 企業(yè)員工安全教育培訓(xùn)檔案 模板
- 小學(xué)校本課程-第十三課安全文明網(wǎng)上行教學(xué)課件設(shè)計(jì)
- 人教版區(qū)域地理課件世界地理之中亞五國【公開課教學(xué)PPT課件】高中地理
- 第二章-英國學(xué)前教育
評(píng)論
0/150
提交評(píng)論