工學(xué)第四章 微機(jī)原理與接口技術(shù) 課件 科大 周荷琴_第1頁
工學(xué)第四章 微機(jī)原理與接口技術(shù) 課件 科大 周荷琴_第2頁
工學(xué)第四章 微機(jī)原理與接口技術(shù) 課件 科大 周荷琴_第3頁
工學(xué)第四章 微機(jī)原理與接口技術(shù) 課件 科大 周荷琴_第4頁
工學(xué)第四章 微機(jī)原理與接口技術(shù) 課件 科大 周荷琴_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

§4.

1

概述§4.2

匯編語言源程序的格式§4.3MASM中的表達(dá)式§4.4

偽指令§4.5常用的DOS和BIOS調(diào)用§4.6

匯編程序設(shè)計(jì)及舉例第四章

匯編語言程序設(shè)計(jì)三層語言結(jié)構(gòu):用來編寫計(jì)算機(jī)程序的語言,即程序設(shè)計(jì)語言,包括機(jī)器語言、匯編語言和高級(jí)語言,分別位于三個(gè)層次。(1)機(jī)器語言機(jī)器語言是位于最底層的程序設(shè)計(jì)語言,是使用二級(jí)制代碼表示的指令系統(tǒng),用機(jī)器語言編寫的程序稱為“目標(biāo)程序”難辨認(rèn)、難記憶、易出錯(cuò)§4.1概述匯編語言使用助記符來表示指令的操作碼和操作數(shù),使用標(biāo)號(hào)和符號(hào)來代表地址、常量和變量,便于識(shí)別和記憶。匯編語言的一條語句對(duì)應(yīng)一條機(jī)器語言指令。用匯編語言編寫的程序,稱為“匯編語言程序”,這種程序不能直接由計(jì)算機(jī)識(shí)別,需要通過一種起翻譯作用的“匯編程序”將其翻譯成機(jī)器語言,由計(jì)算機(jī)執(zhí)行。缺點(diǎn):使用匯編語言編寫程序,必須要熟悉機(jī)器的指令系統(tǒng)、尋址方式、寄存器的設(shè)置和使用方法,它是一種面向機(jī)器的低級(jí)語言,不能被直接移植到其他類型的機(jī)器上。(

2)

匯編語言高級(jí)語言是一種面向問題或過程的語言,它獨(dú)立于機(jī)器,其編寫的程序是可以移植的。高級(jí)語言的一個(gè)語句相當(dāng)于許多條匯編語言指令或機(jī)器語言指令。高級(jí)語言編寫的程序也必須翻譯成機(jī)器語言后才能執(zhí)行。實(shí)現(xiàn)這種翻譯的程序叫做“編譯程序”,不同的語言有不同的編譯程序。用匯編語言或高級(jí)語言編寫的程序稱為“源程序”。(

3)

高級(jí)語言匯編語言或高級(jí)語言的程序處理過程:1、編輯匯編語言源程序(即建立.ASM文件)2、匯編為目標(biāo)程序(即匯編為.OBJ,.LST,.CRF文件)3、連接為可執(zhí)行程序(即生成.EXE文件)4、運(yùn)行匯編語言或高級(jí)語言的程序處理過程:語言源程序結(jié)構(gòu):一、分段格式匯編語言程序按段編寫,這樣有利于用戶按段組織程序和存放數(shù)據(jù)。用戶所定義的不同段將被存放在內(nèi)存的不同位置,有利于存儲(chǔ)器管理。一個(gè)匯編語言源程序可以由若干個(gè)段組成,程序中的指令、數(shù)據(jù)以及堆棧都應(yīng)當(dāng)定義到具體的段中?!?.2

匯編語言格式匯編語言有兩種類型語句,即指令和偽指令,前者屬于指令性語句,后者屬于指示性語句·指令性語句:指令,由匯編程序翻譯成機(jī)器指令,在匯編過程中產(chǎn)生對(duì)應(yīng)的目標(biāo)代碼典型的匯編指令是:ADDAX,[SI]·指示性語句:為匯編程序提供一些信息,讓匯編程序在匯編過程執(zhí)行某些特定的功能,不產(chǎn)生目標(biāo)代碼典型的偽指令是:COSTDW?;定義一個(gè)字空間,并將標(biāo)識(shí)符COST指向該字空間二

、匯編語言語句的類型和組成1、匯編指令格式[標(biāo)號(hào):]助記符[操作數(shù),操作數(shù)][;注釋]◆標(biāo)號(hào)是指為該指令所在地址取的名字,后面必須跟冒號(hào)“:”。標(biāo)號(hào)是可供選擇的標(biāo)識(shí)符8086/8088匯編語言中使用的標(biāo)識(shí)符必須遵循下列規(guī)則:?標(biāo)識(shí)符由字母(a~z,A~Z)、數(shù)字(0~9)或下劃線組成?標(biāo)識(shí)符必須以字母開頭?標(biāo)識(shí)符有效長(zhǎng)度為31個(gè)字符,若超過31個(gè)字符,則只保留前面的31個(gè)字符為有效字符[標(biāo)號(hào):]助記符[操作數(shù),操作數(shù)][;注釋]■指令助記符是指令名稱的代表符號(hào),是指令語句中的關(guān)鍵字,不能省略,它表示本指令的操作類型,必要時(shí)可在助記符前加一個(gè)或多個(gè)“前綴”■操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),有些指令只需要一個(gè)操作數(shù),有些指令需要兩個(gè)操作數(shù),需要用逗號(hào)隔開;有些操作數(shù)可以用表達(dá)式表示■注釋為可選項(xiàng),需用分號(hào)開頭,便于閱讀程序,匯編程序不對(duì)其進(jìn)行任何處理2、偽指令格式[名稱]偽指令定義符[操作數(shù)][;注釋]偽指令格式與指令格式有以下幾點(diǎn)不同:名稱相當(dāng)于指令語句中的標(biāo)號(hào),但在名稱后不允許帶冒號(hào)偽指令定義符是由MASM規(guī)定的符號(hào),又稱匯編命令,不可缺省,如DB、DW、PROC等操作數(shù)個(gè)數(shù)隨不同的偽指令不同,有的偽指令不允許帶操作數(shù),有的允許帶多個(gè)操作數(shù)1、常數(shù)指令中出現(xiàn)的固定值?二進(jìn)制:最后加字母B例如:01000111B?十進(jìn)制:最后加字母D,D可以忽略例如:1996或1996D?八進(jìn)制:最后加字母Q(或O)例如:2560Q?十六進(jìn)制:最后加字母H,如果以字母“A~F”開頭,前面加0:0AH,0A342H三

、匯編語言的數(shù)據(jù)例如132、變量變量通常指存放在存儲(chǔ)單元中的值,在程序運(yùn)行中是可以修改的。(1)段值(SEGMENT)(2)段內(nèi)偏移地址(OFFSET)(3)類型(TYPE):指變量中每個(gè)元素包含的字節(jié)數(shù)3、標(biāo)號(hào)標(biāo)號(hào)是可執(zhí)行指令語句的地址的符號(hào)表示,它可以作為轉(zhuǎn)移指令和調(diào)用指令的目標(biāo)操作數(shù),以確定程序轉(zhuǎn)向的目標(biāo)地址,它也具有三個(gè)屬性:段值、段內(nèi)偏移地址、類型(指在轉(zhuǎn)移指令中標(biāo)號(hào)可轉(zhuǎn)移的距離)144、保留字保留字是匯編語言中預(yù)先保留下的具有特殊意義的符號(hào),只能作為固定的用途指令、偽指令。寄存器名等都是保留字5、注釋從分號(hào)(;)開始,到本行結(jié)束15表達(dá)式由操作數(shù)以及運(yùn)算符組成,在匯編時(shí)由匯編程序?qū)λM(jìn)行運(yùn)算,運(yùn)算結(jié)果作為一個(gè)語句中的操作數(shù)去使用。運(yùn)算結(jié)果可以是一個(gè)常數(shù)字,也可以是一個(gè)存儲(chǔ)器的地址。一、操作數(shù):代表一個(gè)數(shù)據(jù)或一個(gè)地址數(shù)據(jù):常數(shù)或變量地址:標(biāo)號(hào)二、運(yùn)算符1、算術(shù)運(yùn)算符2、邏輯運(yùn)算符3、關(guān)系運(yùn)算符4、分析運(yùn)算符5、綜合運(yùn)算符6、其它運(yùn)算符§4.3MASM中的表達(dá)式161、算術(shù)運(yùn)算符+-X/MODSHLSHR可以對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算結(jié)果仍然為數(shù)據(jù),但對(duì)地址不能進(jìn)行乘除20A1H+1040H21H

SHL

2

=

84H運(yùn)算。例如:172、邏輯運(yùn)算符ANDORNOTXOR只能對(duì)常數(shù)進(jìn)行運(yùn)算,得到的結(jié)果也是常數(shù)既可以作指令助記符,又可以作匯編語言的運(yùn)算符指令助記符是在程序執(zhí)行時(shí)運(yùn)算的,運(yùn)算符是在匯編過程進(jìn)行的例如:ANDDX,PORTAND0FEH如果PORT值為90H,則相當(dāng)于ANDDX,90H如果PORT值為81H,則相當(dāng)于ANDDX,80H183、關(guān)系運(yùn)算符EQNELTGTLEGE兩個(gè)參加運(yùn)算的數(shù)必須同是數(shù)值,或同是內(nèi)存單元的地址,而結(jié)果總是一個(gè)數(shù)值。如果關(guān)系成立:其運(yùn)算結(jié)果為0FFH或0FFFFH,否則,其結(jié)果為0例如:MOVDX,PORTLT5如果PORT小于5,相當(dāng)于MOVDX,0FFFFH如果PORT不小于5,相當(dāng)于MOVDX,019關(guān)系運(yùn)算符一般不單獨(dú)使用,而是和邏輯運(yùn)算符結(jié)合起來使用例如:MOVBX,((PORTLT5)AND20)OR(PORTGE5)AND30)當(dāng)PORT小于5時(shí),相當(dāng)于MOVBX,20當(dāng)PORT大于或等于5時(shí),相當(dāng)于MOVBX,30D204、分析運(yùn)算符(數(shù)值返回運(yùn)算符)OFFSETSEGTYPESIZELENGTH(1)OFFSET:取變量或標(biāo)號(hào)的偏移地址值格式:OFFSET變量或標(biāo)號(hào)(2)SEG:取變量或標(biāo)號(hào)的段基址格式:SEG變量或標(biāo)號(hào)D21(3)TYPE:返回變量的類型屬性或標(biāo)號(hào)的距離屬性格式:TYPE變量或標(biāo)號(hào)A1DB20H,30HA2DW0438HL1:MOVAH,TYPEA1MOVBH,TYPEA2MOVBL,TYPEL1(4)LENGTH:當(dāng)變量中使用DUP時(shí),LENGTH返回此變量所包含的單元數(shù),對(duì)其它變量則返回1格式:LENGTH變量22M1DW100DUP(?)M2DW1,2,3M3DB‘ABCD’MOVCX,LENGTHM1MOVBL,LENGTHM2MOVAL,LENGTHM3(5)SIZE:返回變量包含的字節(jié)數(shù)格式:SIZE變量SIZE=LENGTH*TYPED23例如:ABCDW100DUP(?)?OFFSET:求偏移地址MOVDX,OFFSETABC?SEG:求段基址MOVAX,SEGABCMOVDS,AX?TYPE:求標(biāo)識(shí)符類型值?LENGTH:求為標(biāo)識(shí)符分配的項(xiàng)數(shù)?SIZE:求為標(biāo)識(shí)符分配的字節(jié)數(shù)TYPEABC;等于2LENGTHABC;等于100SIZEABC;等于200D245、綜合運(yùn)算符(修改屬性運(yùn)算符):段操作符、PTR、THIS、HIGH、LOW、SHORT?PTR:定義某內(nèi)存單元類型格式:類型PTR變量/標(biāo)號(hào)例如:MOVAX,WORDPTRD1;定義D1指向的內(nèi)存單元為字單元MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0PTR通常和偽指令BYTE、WORD等合用25?THIS:指定新類型格式:變量/標(biāo)號(hào)EQUTHIS類型/距離將EQUTHIS右邊的類型/距離屬性,賦給左邊的變量/標(biāo)號(hào),該變量或標(biāo)號(hào)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元的地址相同例如:LABCEQUTHISBYTELABDDW4321H,2255HMOVAL,LABC;AL=21HMOVAX,LABD;AX=4321HLABC和LABD具有相同的段地址和偏移量,但LABC是字節(jié)類型,LABD是字類型。26?SHORT標(biāo)號(hào)SHORT用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向的目標(biāo)地址與本指令之間的距離在-128~+127之間,即限制在短轉(zhuǎn)移范圍內(nèi)?LOW變量或標(biāo)號(hào);取低字節(jié)?HIGH變量或標(biāo)號(hào);取高字節(jié)MOVAL,LOW3080H;AL=80HMOVAX,HIGH3A4BH;AH=3AH276、其他運(yùn)算符其它運(yùn)算符有(),[],<>,●,MASK和WIDTH等六種?圓括號(hào)():用來改變運(yùn)算符的優(yōu)先級(jí)別,()中的運(yùn)算符具有最高優(yōu)先權(quán)?方括號(hào)[]:主要用來表示地址表達(dá)式或多重變量的下標(biāo)值?尖括號(hào)<>及原點(diǎn):在結(jié)構(gòu)中專用?MASK和WIDTH:在記錄中專用28數(shù)據(jù)定義偽指令:DBDWDDDQDT存儲(chǔ)單元類型定義偽指令:BYTEWORDDWORD符號(hào)定義偽指令:EQU=段定義偽指令:SEGMENTENDSASSUMEORG過程定義偽指令:PROCENDPNEARFAR程序結(jié)束偽指令:END簡(jiǎn)化段定義偽指令:MODELCODEDATASTACKD29§4.4

偽指令1、數(shù)據(jù)定義偽指令:DBDWDDDQDT用來定義存儲(chǔ)單元的符號(hào)名,并初始化該單元或該單元開始的若干連續(xù)單元,初始化可以采用確定值,也可以采用不確定值DB(DefineByte)格式:[符號(hào)名]DB<表達(dá)式或數(shù)據(jù)項(xiàng)表>表達(dá)式中的值或項(xiàng)表中的每一項(xiàng)定義為一個(gè)字節(jié)數(shù),它們從符號(hào)名地址開始按字節(jié)連續(xù)存放,直到表中數(shù)據(jù)項(xiàng)結(jié)束(地址遞增方向),表達(dá)式的值或項(xiàng)對(duì)應(yīng)小于8位2進(jìn)制數(shù)表示的最大值例如:FIRSTDB3,18,25H,’ABC’SECONDDB?THIRDDB9DUP(?)30DW(DefineWord)格式:[符號(hào)名]DW<表達(dá)式或數(shù)據(jù)項(xiàng)表>表達(dá)式的值或項(xiàng)表中的每一項(xiàng)都是兩個(gè)字節(jié)數(shù),應(yīng)小于16位二進(jìn)制數(shù)表示的最大值例如:DONDW10DUP(?);在內(nèi)存中留出10個(gè)空單元,其中每項(xiàng)都是2個(gè)字節(jié)31DD:定義雙字DQ:定義4個(gè)字DT:定義10個(gè)字例如:N1DD2.5,3.2E+2DD可以用來定義有小數(shù)點(diǎn)的十進(jìn)制數(shù)或用科學(xué)計(jì)數(shù)法表示的數(shù)據(jù),小數(shù)在匯編時(shí)被譯成四字節(jié)浮點(diǎn)數(shù),尾數(shù)在低地址一端,階碼在高地址一端DQ和DT也允許浮點(diǎn)數(shù)形式COUNTDT?;在內(nèi)存中留出1個(gè)空單元,其中每項(xiàng)都是10個(gè)字32舉例:S1DB‘ABCDEF’S1DB‘A’,’B’,’C’,’D’,’E’,’F’S2DW‘AB’,’CD’,’EF’S3DD‘AB’,’CD’D33例:例:例:例:例:第一個(gè)語句表示保留10H個(gè)字節(jié),第二個(gè)語句表示重復(fù)10H個(gè)字符串“ABCD”,共占40H個(gè)字節(jié),第三個(gè)語句是重復(fù)2H個(gè)數(shù)字串和空單元帶DUP的表達(dá)式,DUP是定義重復(fù)數(shù)據(jù)操作符34要保證數(shù)據(jù)類型的正確性DB3DUP(12H)AX,D1;

引用錯(cuò)誤AX,WORD

PTRD1注意數(shù)據(jù)定義與引用時(shí),舉例:數(shù)據(jù)定義:D1引用:MOVMOVD35EQU偽指令用來對(duì)標(biāo)號(hào)賦值,使標(biāo)號(hào)等于數(shù)值或標(biāo)號(hào)等于標(biāo)號(hào)格式:<標(biāo)號(hào)>EQU<表達(dá)式><新標(biāo)號(hào)>EQU<舊標(biāo)號(hào)>例如:ABCEQU220XYZEQUABCCOUNTEQUCX同一個(gè)標(biāo)號(hào)不能被兩次賦值,除非先清除標(biāo)號(hào)的原值,與EQU相對(duì)應(yīng)的清除指令:PURGEPURGEABC;清除對(duì)ABC的賦值2

、符號(hào)定義偽指令EQU36用來對(duì)標(biāo)號(hào)賦值,使標(biāo)號(hào)等于數(shù)值格式:<標(biāo)號(hào)>=<表達(dá)式>例如:ABC=10ABC=ABC-1D372

、符號(hào)定義偽指令=SEGMENTENDS成對(duì)出現(xiàn),定義段格式:段名SEGMENT段的內(nèi)容…段名ENDS段名為用戶自定義的標(biāo)號(hào),可以為任何有效的標(biāo)識(shí)符例如:DATA-SEGSEGMENT…D38DATA-SEGENDSCODE-SEGSEGMENT…CODE-SEGENDS3

、段定義偽指令SEGMENT

ENDSAEEUMEORGASSUME:用于指定用戶定義的哪一個(gè)段為數(shù)據(jù)段、代碼段和堆棧段。對(duì)DS、SS只知道段基址,而實(shí)際值要在程序中使用傳送命令來具體賦值。例如:ASSUMECS:CODE-SEG,DS:DATA-SEG該指令指出CODE-SEG的段地址在CS中,DATA-SEG的段地址在DS中,但并沒有把段地址裝入相應(yīng)的段寄存器,因此除了CS以外(CS通過在啟動(dòng)代碼段時(shí)由段間轉(zhuǎn)移裝入),將段地址裝入相應(yīng)寄存器的工作必須通過MOV傳送指令完成。393

、段定義偽指令例如:CODE-SEGSEGMENTASSUMECS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEGSTART:MOVAX,DATA-SEGMOVDS,AXMOVAX,STACK-SEGMOVSS,AX…CODE-SEGENDS說明:。段名可以是任意的自定義標(biāo)識(shí)符。DS、SS的段地址值需要傳送指令獲得D40舉例D41實(shí)現(xiàn)兩個(gè)16位二進(jìn)制數(shù)的相乘42PROC、ENDP成對(duì)出現(xiàn),用于定義過程,即子程序格式:過程名PROC[NEAR](或[FAR]過程的內(nèi)容……過程名ENDP過程名為用戶自定義的標(biāo)號(hào),定義過程是為實(shí)現(xiàn)子程序調(diào)用而設(shè)的調(diào)用格式為:CALL過程名過程由RET指令返回,它可以不是最后一條指令,在過程中可以設(shè)置多點(diǎn)返回。434

、過程定義偽指令PROC

、ENDP

、NEAR

、FAR過程調(diào)用可分為段內(nèi)調(diào)用和段間調(diào)用:段內(nèi)調(diào)用和段間調(diào)用由被調(diào)用子程序頭部的FAR或NEAR偽指令指出,NEAR可以省略段內(nèi)調(diào)用和段間調(diào)用的返回指令助記符都是RET,但執(zhí)行的操作不同,段內(nèi)調(diào)用時(shí)匯編程序?qū)ET產(chǎn)生指令編碼C3H,實(shí)現(xiàn)段內(nèi)返回;段間調(diào)用時(shí)匯編程序?qū)ET產(chǎn)生指令編碼CBH,實(shí)現(xiàn)段間返回4

、過程定義偽指令44例子:多字節(jié)的BCD碼相加45D46D475

、源程序結(jié)束偽指令

END格式:END標(biāo)號(hào)(1)存儲(chǔ)模式定義偽指令.MODEL格式:.MODEL<存儲(chǔ)模式>◆TINY:微型,其代碼和數(shù)據(jù)位于一個(gè)段內(nèi)(<=64KB),一般用于編寫.COM程序◆SMALL:小型,代碼在一個(gè)段內(nèi)(<=64KB),數(shù)據(jù)在另一個(gè)段內(nèi),在這種存儲(chǔ)模式下,數(shù)據(jù)段寄存器可保持不變,所有轉(zhuǎn)移都可以認(rèn)為是段內(nèi)轉(zhuǎn)移◆COMPACT:緊湊型,代碼在一個(gè)段內(nèi),有任意個(gè)數(shù)據(jù)段,沒有大于64KB的數(shù)組◆LARGE:大型,代碼與數(shù)據(jù)均占用任意個(gè)段,沒有大于64KB的數(shù)組486

、

簡(jiǎn)化段定義偽指令(2)段定義偽指令.CODE,.DATA和.STACK簡(jiǎn)化段定義偽指令說明一個(gè)段的開始,同時(shí)也表示上一個(gè)段的結(jié)束。偽指令END則說明最后一個(gè)段地結(jié)束和程序的結(jié)束4950例:簡(jiǎn)化段定義的源程序示例,用于顯示字符串“HELLO”MC-DOS是IBMPC系列計(jì)算機(jī)上最普遍的操作系統(tǒng),它采用層次化模塊結(jié)構(gòu),由一個(gè)引導(dǎo)程序BOOT和3個(gè)層次模塊組成。這3個(gè)模塊分別是:輸入輸出模塊IO.SYS、文件管理模塊MSDOS.SYS和命令處理模塊COMMAND.COMMS-DOS從兩個(gè)層次上為用戶提供了訪問接口。一般用戶可以通過鍵盤命令在命令處理模塊層次上進(jìn)行訪問;高級(jí)用戶則可以通過軟件中斷和系統(tǒng)功能調(diào)用在文件管理模塊層次上進(jìn)行訪問。51§4

.5

DOS的軟件中斷和系統(tǒng)功能調(diào)用1

、MS-DOS常用軟件中斷52MS-DOS的主要系統(tǒng)功能都使用中端處理程序的形式來提供這些軟中斷隱蔽了設(shè)備的物理特性和接口方式,調(diào)用時(shí)首先設(shè)置好入口參數(shù),即可轉(zhuǎn)去執(zhí)行相應(yīng)的子程序系統(tǒng)功能調(diào)用專指類型為21H的軟中斷,包含多個(gè)功能程序,每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào)。531

、MS-DOS常用軟件中斷54MS-DOS的主要系統(tǒng)功能都是使用中斷處理程序的形式來提供的。這些軟中斷隱蔽了設(shè)備的物理特性和接口方式,調(diào)用時(shí)首先設(shè)置好入口參數(shù),即可轉(zhuǎn)去執(zhí)行相應(yīng)的子程序。55INT

10H;

顯示器設(shè)置INT

13H;

磁盤驅(qū)動(dòng)INT

16H;

鍵盤驅(qū)動(dòng)INT

17H;

打印機(jī)驅(qū)動(dòng)INT

14H;

異步通訊設(shè)備驅(qū)動(dòng)INT

1AH;

系統(tǒng)時(shí)間設(shè)置和讀取系統(tǒng)功能調(diào)用專指類型為21H的軟中斷,包含多個(gè)功能程序,每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào)。INT21H為系統(tǒng)功能調(diào)用,其功能號(hào)在AH中AH=01;鍵盤輸入AH=02;鍵盤輸出AH=03;串口輸入AH=04;串口輸出AH=05;打印機(jī)輸出AH=08;鍵盤輸入(無回顯)AH=09;顯示字符串AH=0A;輸入字符串AH=4C;返回操作系統(tǒng)系統(tǒng)功能調(diào)用:561號(hào)功能調(diào)用:從鍵盤輸入字符并顯示格式:MOVAH,1INT21H執(zhí)行上述命令后,系統(tǒng)掃描鍵盤等待有鍵按下,若有鍵按下,就將鍵值(ASCII碼)讀入,先檢查是否為Ctrl-Break鍵,若是就自動(dòng)調(diào)用中斷INT23H,執(zhí)行退出命令,否則將鍵值送AL寄存器并在屏幕上顯示此字符(

1)

、

1號(hào)功能調(diào)用(鍵盤輸入并顯示單字符)57D58KEY:

MOVINTCMP

JE

CMP

JEJMPYES:

……NO

:

……AH,

121HAL,YESAL,NOKEY‘Y

’‘N

’例題調(diào)用INT21H的A號(hào)功能,其功能是將鍵盤輸入的字符串寫入到內(nèi)存緩沖區(qū),因此事先必須要定義一個(gè)緩沖區(qū)。DX為緩沖區(qū)的首地址,緩沖區(qū)的第一個(gè)字節(jié)指出能容納的最大字符個(gè)數(shù),由用戶給出;第二個(gè)字節(jié)存放實(shí)際輸入的字符個(gè)數(shù),由系統(tǒng)最后填入;從第三個(gè)字節(jié)開始存放從鍵盤接收的字符,直到回車鍵結(jié)束若實(shí)際鍵入的字符數(shù)大于給定的最大字符數(shù),則后面輸入的字符丟失;若輸入的字符數(shù)小于給定的最大字符數(shù),緩沖區(qū)其余部分填0,0AH功能調(diào)用時(shí),要求將DS:DX指向緩沖區(qū)第一個(gè)字節(jié)59(2)、0AH功能調(diào)用:輸入字符串MAXLEN

DB

32ACTLEN

DB

?STRINGDB32DUP(?)LEADX,

MAXLENMOV

AH,0AHINT21HD60格式:MOVDL,<字符>MOVAH,2INT21H將置入DL寄存器中的字符從屏幕上顯示輸出在屏幕上顯示“3”D61(3)、2號(hào)功能調(diào)用:單字符輸出DL,

33HAH,

221HMOVMOV

INT將指定的內(nèi)存緩沖區(qū)中的字符串從屏幕顯示輸出(或從打印機(jī)打印輸出),緩沖區(qū)的字符串以“$”結(jié)束,DS:DX為串的首地址。MESSAGEDB‘Howareyou!$’MOVDX,

SEG

MESSAGEMOVDS,

DXMOVDX,

OFFSET

MESSAGEMOVAH,

9INT21H(4)、9號(hào)功能調(diào)用:字符串輸出62如果DL=0FFH,表示從鍵盤輸入單字符送AL寄存器;如果DL≠0FFH,將指定的內(nèi)存緩沖區(qū)中的字符串從屏幕上顯示輸出(或從打印機(jī)打印輸出),緩沖區(qū)的字符串以‘$’結(jié)束。DS:DX為串的首地址。MOVDL,0FFHMOVAH,

6INT21HMOVDL,

‘A

’MOVAH,

6(

5)

控制輸入/輸出單字符INT

21H63進(jìn)行匯編語言程序設(shè)計(jì)可以參考下述過程:(1)分析問題,建立基于問題的數(shù)學(xué)模型(2)設(shè)計(jì)算法(3)繪制流程圖或結(jié)構(gòu)圖(4)編寫程序(5)上機(jī)調(diào)試D644

.6匯編程序設(shè)計(jì)及舉例匯編語言程序設(shè)計(jì)采用結(jié)構(gòu)化程序設(shè)計(jì)方法,其基本結(jié)構(gòu)包括:◆順序結(jié)構(gòu)◆分支結(jié)構(gòu)◆循環(huán)結(jié)構(gòu)65順序結(jié)構(gòu)是最簡(jiǎn)單的一種程序結(jié)構(gòu),程序?qū)凑Z句順序執(zhí)行。例如:將輸入的大寫字符轉(zhuǎn)換成小寫字符輸出.MODEL.STACK200H.DATAS-INPUTDB‘PLEASEINPUTA~Z:$’S-OUTDB0DH,0AH,‘CONVERTRESULT:$’.CODED661

、順序結(jié)構(gòu)D67MOVDS,

AXMOVAH,

9LEADX,

S-INPUTINT21HMOVAH,

1INT21HLEADX,

S-OUTINT21HPOPAXMOVDL,

ALADDDL,

20HMOVAH,

2INT

21HMOV

AX,

4C00HINT

21HEND

STARTPUSH

AXMOV

AH,9START:

MOV

AX,

@DATA682、分支程序要求計(jì)算機(jī)作出判斷,根據(jù)判斷結(jié)果作出不同處理DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,SOURCE;X1送ALCMPAL,SOURCE+1;X1-X2JNCBRANCH;若X1>X2,轉(zhuǎn)BRANCHMOVAL,SOURCE+1;否則,X2送ALBRANCH:MOVMAX,ALCODEENDS例:比較兩個(gè)無符號(hào)數(shù)的大小,把大數(shù)存入MAX單元DATASEGMENTSOURCEDB0AAH,0B2H;定義兩個(gè)無符號(hào)數(shù)MAXDB?END

START69循環(huán)程序一般由初始化、循環(huán)體、循環(huán)控制和循環(huán)結(jié)束處理幾部分組成。例:編寫程序完成DATASEGMENTBUFDWa1,a2,…,a10SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX70MOVAX,03

、循環(huán)程序D71DI,

OFFSET

SUMBX,

OFFSET

BUFCX,

10AX,

[BX]BXBXCXLOP[DI],

AXAX,

4C00H21HMOVMOVMOVADDINCINCDECJNZMOVMOVINTENDSENDSTARTLOP:CODE(1)子程序調(diào)用和返回子程序調(diào)用:CALL子程序名分為段內(nèi)調(diào)用和段間調(diào)用,直接調(diào)用和間接調(diào)用子程序返回:RET或RETn執(zhí)行CALL指令時(shí)自動(dòng)壓棧返回地址,執(zhí)行RET指令把壓棧的返回地址彈出送IP或CS:IP(段間返回)(2)現(xiàn)場(chǎng)的保護(hù)與恢復(fù)如果需要?jiǎng)t可以保存標(biāo)志寄存器和其他寄存器的值724

、子程序(3)參數(shù)的傳遞:指主程序和子程序之間相關(guān)信息或數(shù)據(jù)的傳遞傳遞的方式有:寄存器、內(nèi)存單元和堆棧三種(4)子程序的嵌套和遞歸調(diào)用子程序調(diào)用子程序的過程稱為嵌套調(diào)用;子程序調(diào)用自身的過程稱為遞歸調(diào)用。

溫馨提示

  • 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. 人人文庫(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)論