版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
母親卡第3章
宏匯編語(yǔ)言3.1宏匯編語(yǔ)言中的表達(dá)式3.2常用的機(jī)器指令語(yǔ)句3.3偽指令語(yǔ)句3.4常用的dos系統(tǒng)功能調(diào)用3.5MASM匯編程序的功能<自學(xué)>作業(yè)3.1宏匯編語(yǔ)句中的表達(dá)式3.1.1常量3.1.2數(shù)值表達(dá)式3.1.3變量3.1.4標(biāo)號(hào)3.1.5地址表達(dá)式返回本章首頁(yè)23.2.1常量1.?dāng)?shù)值常量2.符號(hào)常量返回本節(jié)31.?dāng)?shù)值常量表3.1各種形式數(shù)字常量格式對(duì)照表<匯編語(yǔ)言大小寫不敏感>數(shù)值類型常量有二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制數(shù)字形式和字符串形式的常量。4字符串常量是用單引號(hào)或雙引號(hào)引起來(lái)的一個(gè)或多個(gè)字符,或以各字符的ASCⅡ碼表示的。如‘A’用41H表示,字符串‘A1B2’用41H,31H,42H,32H表示。返回本節(jié)字符串形式的常量52.符號(hào)常量
對(duì)經(jīng)常使用的數(shù)值常量可以先為它定義一個(gè)名字,然后在語(yǔ)句中用名字來(lái)表示該常量。常數(shù)若使用有意義的符號(hào)名來(lái)表示,可以提高程序的可讀性,同時(shí)更具有通用性。
符號(hào)常量需要用等價(jià)偽指令EQU和等號(hào)偽指令“=”來(lái)定義。6等價(jià)偽指令的基本格式為:
符號(hào)名EQU表達(dá)式例:
VALEQU100;表達(dá)式為一個(gè)常數(shù)
NUMEQUVAL+50;表達(dá)式為一個(gè)數(shù)值表達(dá)式
OPEEQUADD;表達(dá)式為一個(gè)指令助記符7等號(hào)偽指令的基本格式為:
符號(hào)名=常數(shù)表達(dá)式返回本節(jié)例:COUNT=50MOVBX,COUNT;等價(jià)于MOVBX,50思考:源操作數(shù)采用的什么尋址方式。注意:EQU語(yǔ)句不能重復(fù)定義;而“=”偽指令可以重復(fù)定義,其作用域從定義點(diǎn)開始到重新定義結(jié)束。立即尋址8數(shù)值表達(dá)式算術(shù)表達(dá)式(利用算術(shù)運(yùn)算符)邏輯表達(dá)式(利用邏輯運(yùn)算符)關(guān)系表達(dá)式(利用關(guān)系運(yùn)算符)
數(shù)值表達(dá)式一般是指由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式。匯編程序在匯編過程中計(jì)算表達(dá)式,最終得到一個(gè)數(shù)值,所以,程序運(yùn)行速度沒有變慢,且增強(qiáng)程序的可讀性。3.1.2數(shù)值表達(dá)式返回本節(jié)9算術(shù)運(yùn)算符包括:+(加)、-(減)、*(乘)、/(除)、MOD(求模)、SHR(右移)、SHL(左移)幾種。1.算術(shù)運(yùn)算符注:1、加+和減-運(yùn)算符還可以用于地址表達(dá)式
2、除加、減外,其他運(yùn)算符的參數(shù)必須是整數(shù)10 ┆NUM1 EQU 25*4–50 NUM2 EQU NUM1/7 NUM3 DB NUM1MOD7 VAR1 DB 1,2,3,4,5VAR2 DB ‘12345’NUM4 EQU VAR2-VAR1 ;NUM5 EQU 0FHMOV AL,NUM5SHL4MOV BL,NUM5SHR4 ┆【例3.1】用算術(shù)運(yùn)算符進(jìn)行數(shù)值表達(dá)式運(yùn)算。結(jié)果:NUM1=50;NUM2=7;NUM3=1;NUM4=5;
(AL)=11110000B;(BL)=00000000B11邏輯運(yùn)算符包括:邏輯乘(AND)、邏輯加(OR)、按位加(XOR)、邏輯非(NOT)四種運(yùn)算。由于邏輯運(yùn)算是按位操作,且在匯編過程中完成,因而運(yùn)算的結(jié)果仍為整數(shù)常量。2.邏輯運(yùn)算符12MOV AL,34HAND0FH MOV BL,05HOR30H MOV CX,NOT00FFH MOV DX,789AHXOR000FH NUM5EQU0FH【例3.2】用邏輯運(yùn)算符進(jìn)行運(yùn)算。結(jié)果:(AL)=04H;(BL)=35H;(CX)=0FF00H(DX)=7895H;NUM5=0FH13關(guān)系運(yùn)算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。運(yùn)算結(jié)果:若關(guān)系不成立,結(jié)果為0;否則為0FFFFH。3.關(guān)系運(yùn)算符結(jié)果:NUM1=0;NUM2=0FFH;(AX)=0FFFFH;(BX)=0【例3.3】用關(guān)系運(yùn)算符進(jìn)行數(shù)值表達(dá)式運(yùn)算。
NUM1 DB 10LT5 NUM2DB 0AAAAHGT7FFFHMOVAX,‘A‘EQ41H MOV BX,NUM2LTNUM1143.1.3變量1.變量2.變量的定義返回本節(jié)15(1)段屬性(2)偏移地址屬性(3)類型屬性1.變量變量是一個(gè)數(shù)據(jù)存儲(chǔ)單元的名字。由于匯編語(yǔ)言中存儲(chǔ)單元是分段使用的,所以變量具有三個(gè)屬性:16變量定義偽指令:為變量申請(qǐng)固定長(zhǎng)度的存儲(chǔ)空間,并可同時(shí)將相應(yīng)的存儲(chǔ)單元初始化。2.變量的定義格式:[變量名]變量定義偽指令表達(dá)式在匯編語(yǔ)言中變量的主要類型有字節(jié)(BYTE)、字(WORD)、雙字(DWORD)、四字(QWORD)和十字節(jié)(TBYTE),對(duì)應(yīng)的變量定義偽指令即有:DB、DW、DD、DQ、和DT。17表達(dá)式項(xiàng)是給變量或指定存儲(chǔ)單元賦予初值,它有以下幾種形式:(1)數(shù)值表達(dá)式(2)字符串表達(dá)式(3)地址表達(dá)式(只適用DW和DD兩個(gè)偽指令)(4)?表達(dá)式(5)帶DUP的表達(dá)式表達(dá)式:18變量定義偽指令可以為一個(gè)或連續(xù)的存儲(chǔ)單元設(shè)置數(shù)值初值。【例3.4】為數(shù)據(jù)段分配存儲(chǔ)單元。
DATA SEGMENTA DB 11H,12H,13HB DW 1122H,3344HC DD 12345678HDATA ENDS上述變量的存儲(chǔ)單元分配及初始化情況如下圖3.1所示。(1)數(shù)值表達(dá)式19圖3.1數(shù)據(jù)段中數(shù)據(jù)存儲(chǔ)分配圖20
字符串表達(dá)式中的字符串必須用引號(hào)引起來(lái)。DB、DW、DD偽指令將字符串中的各字符均以ASCⅡ碼形式存放在相應(yīng)的存儲(chǔ)單元,但表示形式各不相同。【例3.5】為字符串分配存儲(chǔ)單元。
DATA SEGMENTSTR1 DB ‘1234’STR2 DW ‘AB’,‘CD’,‘A’STR3 DD ‘AB’DATA ENDS其存儲(chǔ)單元分配如下圖3.2所示。(2)字符串表達(dá)式21圖3.2數(shù)據(jù)段存儲(chǔ)分配圖22如果該地址表達(dá)式為一變量(或標(biāo)號(hào))名,用DW偽指令則是取它的偏移地址來(lái)初始化變量,用DD偽指令則是取它的段首址和偏移地址來(lái)初始化變量。例如:變量定義:BUF1DW A;(A地址為1A89:000A)BUF2DD B;(B地址為1A89:0107)
執(zhí)行語(yǔ)句:MOVAX,BUF1MOVBX,BUF2MOVCX,BUF1+1AX、BX、CX的內(nèi)容分別是什么?源操作數(shù)是什么尋址方式?(3)地址表達(dá)式(只適用DW和DD兩個(gè)偽指令)→該語(yǔ)句錯(cuò)誤(AX)=000AH,(BX)=?,(CX)=0700H直接尋址注意:1、定義該變量的段必須是當(dāng)前段,即該段的段首址一定要在某一段寄存器中,否則,該變量不能被訪問;2、變量的類型必須與指令的要求相符。23
在表達(dá)式中使用重復(fù)數(shù)據(jù)操作符DUP,可以為連續(xù)的存儲(chǔ)單元提供重復(fù)數(shù)據(jù),其格式為:
NDUP(表達(dá)式)其中N為重復(fù)因子,只能取正整數(shù),表示定義了N個(gè)重復(fù)數(shù)據(jù)存儲(chǔ)單元,其類型由它前面的數(shù)據(jù)定義偽指令確定,而每個(gè)數(shù)據(jù)存儲(chǔ)單元中的初值由DUP后面圓括號(hào)中的表達(dá)式給定。例如:BUFDB100DUP(0)以上語(yǔ)句定義了以BUF為首址,大小為100個(gè)字節(jié),初值為0的數(shù)據(jù)存儲(chǔ)單元。(5)帶DUP的表達(dá)式24綜合舉例思考:以下數(shù)據(jù)段在內(nèi)存中的存儲(chǔ)情況。DATASEGMENTADWMBUFDB‘AB’,0DH,0AHCONEQU500HBDW0FFAAHDDDBUFMDB2DUP(1),4DUP(2,’B’),’123’,1,2,3DATAENDS253.1.4標(biāo)號(hào)
標(biāo)號(hào)是一條指令語(yǔ)句的符號(hào)地址。在匯編源程序中,只有在需要轉(zhuǎn)向一條指令語(yǔ)句時(shí),才為該指令語(yǔ)句設(shè)置標(biāo)號(hào),以便在轉(zhuǎn)移類指令(含子程序調(diào)用指令)中直接引用這個(gè)標(biāo)號(hào)。因此,標(biāo)號(hào)可作為轉(zhuǎn)移類指令的操作數(shù),即轉(zhuǎn)移地址?!纠?.6】符號(hào)地址表示。 ┆NEXT:MOVAL,[SI] ;帶標(biāo)號(hào)NEXT的指令 ┆
DECCXJNENEXT
;標(biāo)號(hào)NEXT作轉(zhuǎn)移指令的操作數(shù)261.段屬性2.偏移地址屬性3.類型屬性(有near和far兩種類型,凡屬near類型的標(biāo)號(hào)只能在定義該標(biāo)號(hào)的段內(nèi)使用,而far類型的標(biāo)號(hào)卻無(wú)此限制。)標(biāo)號(hào)也具有三種屬性返回本節(jié)例如:LOOP1:MOVAL,[SI];定義近標(biāo)號(hào)LOOP1SUB1PROCFAR;定義過程名SUB1為遠(yuǎn)標(biāo)號(hào)
SUB2PROC;定義過程名SUB2為近標(biāo)號(hào)273.1.5地址表達(dá)式地址表達(dá)式即表示存儲(chǔ)器操作數(shù)地址的表達(dá)式,由變量、標(biāo)號(hào)、常量、寄存器(BX、BP、SI、DI)中的內(nèi)容(如[BX])和運(yùn)算符組成的有意義的式子。地址表達(dá)式的值描述一個(gè)地址,因此也具有段屬性、偏移地址屬性和類型屬性。地址表達(dá)式的特殊算符有屬性定義算符、屬性分離算符和其它字符。28(1)PTR運(yùn)算符格式:類型PTR地址表達(dá)式功能:指定該地址表達(dá)式的類型類型:BYTE、WORD、DWORD、NEAR、FAR等注:
PTR與EQU連用,可定義與PTR右邊地址表達(dá)式類型不同的新變量名或新標(biāo)號(hào),但不另分配存儲(chǔ)單元。例2:DATASEGMENTABADW1122H,3344H字字節(jié)
BEQUBYTEPTRADATAENDS屬性定義運(yùn)算符11H22H33H44H例如:MOV[SI],100;改進(jìn)為:MOVWORDPTR[SI],100錯(cuò)誤,兩個(gè)操作數(shù)沒有明確的類型29(2)THIS運(yùn)算符格式:
THIS類型功能:指定下一個(gè)分配的存儲(chǔ)單元的類型,通常與EQU或“=”連用,為當(dāng)前存儲(chǔ)單元定義一個(gè)指定類型的變量和標(biāo)號(hào)。例:
DATASEGMENTAEQUTHISBYTEABBDW3355H字節(jié)字
DATAENDS55H33H30(1)SEG運(yùn)算符格式:SEG變量或標(biāo)號(hào)功能:分離出其后變量或標(biāo)號(hào)所在段的段首址。例如:MOV AX,SEGARRMOV DS,AX(2)OFFSET運(yùn)算符格式:OFFSET變量或標(biāo)號(hào)功能:分離出其后變量或標(biāo)號(hào)的偏移地址。例如:MOVBX,OFFSETBUF屬性分離算符31(3)TYPE運(yùn)算符格式:TYPE變量或標(biāo)號(hào)功能:分離出其后變量或標(biāo)號(hào)的類型。如果是變量,將返回該變量的類型對(duì)應(yīng)字節(jié)數(shù);如果是標(biāo)號(hào),則返回代表標(biāo)號(hào)類型的數(shù)值。它們之間的關(guān)系見表3.2所示。32其它算符:(1)LENGTH運(yùn)算符格式:LENGTH變量功能:該算符返回該變量數(shù)據(jù)定義偽指令后面第一個(gè)表達(dá)式的元素的個(gè)數(shù),如果為dup表達(dá)式則取重復(fù)因子n,否則為1。【例3.7】指出分配給指定變量的元素的個(gè)數(shù)。DATA SEGMENTA DB ‘ABCDEF’B DW 10DUP(1,2DUP(2))D DB 3,20 DUP(0)DATA ENDS ┆ MOV AX,LENGTHA ;
MOV BX,LENGTHB ;
MOV CX,LENGTHD ; ┆結(jié)果:
AX=1BX=10CX=133(2)SIZE運(yùn)算符格式:SIZE變量功能:LENGTH變量*TYPE變量例如:上例中A、B、C三變量:SIZEA=1SIZEB=20SIZED=134(3)字節(jié)分離符HIGH和LOW格式:HIGH常量或地址表達(dá)式
LOW常量或地址表達(dá)式功能:HIGH取高字節(jié)數(shù)據(jù)作運(yùn)算結(jié)果
LOW取低字節(jié)數(shù)據(jù)作運(yùn)算結(jié)果例如:HIGH0FFCCH;結(jié)果0FFHLOW0FFCCH;結(jié)果0CCH35運(yùn)算符的優(yōu)先級(jí)表3.3運(yùn)算符的優(yōu)先級(jí)返回本節(jié)363.2常用的機(jī)器指令語(yǔ)句1、數(shù)據(jù)傳送類指令2、算術(shù)運(yùn)算類指令3、位操作類指令4、串操作類指令5、控制轉(zhuǎn)移類指令6、處理機(jī)控制類指令。8086CPU的指令系統(tǒng)的基本指令返回本章首頁(yè)37●大多數(shù)數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、位操作類指令及串操作類指令,其雙操作數(shù)指令有相同的語(yǔ)句格式和操作規(guī)定。語(yǔ)句格式:[標(biāo)號(hào):]操作符OPD,OPS[;注釋]操作規(guī)定:
a、OPS和OPD應(yīng)有相同類型;
b、OPD一定不能是立即操作數(shù);
c、操作結(jié)束后,OPS不變;
d、OPD和OPS不能同時(shí)為存儲(chǔ)器操作數(shù)。8086CPU的指令的共同的規(guī)律38●算術(shù)運(yùn)算和位操作類指令的部分單操作數(shù)指令有相同的語(yǔ)句格式和操作規(guī)定。
語(yǔ)句格式:[標(biāo)號(hào):]操作符OPD[;注釋]操作規(guī)定:
a、操作對(duì)象為目的地址中的操作數(shù),操作結(jié)束后,將結(jié)果送入目的地址中;
b、操作數(shù)不能為立即操作數(shù)。39對(duì)于每一條指令操作,程序員應(yīng)注意的問題:
a、指令的匯編格式
b、指令的功能
c、適應(yīng)于指令的操作數(shù)尋址方式
d、指令對(duì)標(biāo)志位的影響
e、指令的特殊要求(如默認(rèn)使用哪些寄存器)403.2.1數(shù)據(jù)傳送類指令一、通用數(shù)據(jù)傳送指令二、地址傳送指令返回本節(jié)首頁(yè)注意:數(shù)據(jù)傳送類指令不影響標(biāo)志位。411.傳送指令MOV2.?dāng)?shù)據(jù)交換指令XCHG3.查表轉(zhuǎn)換指令
XLAT一、通用數(shù)據(jù)傳送指令421.傳送指令MOV語(yǔ)句格式:MOVOPD,OPS功能:將源操作數(shù)傳送入目的地址,源地址內(nèi)容不變。即(OPS)→OPD。下圖2.1描述了MOV指令在傳送數(shù)據(jù)時(shí)允許傳送的路徑及類型。43圖2.1MOV指令所允許的數(shù)據(jù)傳送路徑及類型注意:1、源和目的操作數(shù)不能同時(shí)為段寄存器;2、CS不能作為目的操作數(shù);3、IP既不能作為源操作數(shù)也不能作為目的操作數(shù);4、立即數(shù)不能送到段寄存器。442.?dāng)?shù)據(jù)交換指令XCHG語(yǔ)句格式:XCHGOPD,OPS功能:將源地址與目的地址中的內(nèi)容互換。即(OPD)→OPS,(OPS)→OPD。注意:1、OPD和OPS都不能是段寄存器;
2、OPD和OPS都不能是立即數(shù)。【例3.8】寄存器之間數(shù)據(jù)交換。MOV AX,5678H ;MOV BX,0FFFFH ;XCHG AX,BX ;結(jié)果:(AX)=0FFFFH,(
BX)=5678H453.查表轉(zhuǎn)換指令XLAT語(yǔ)句格式:XLATOPS或XLAT功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中的數(shù)據(jù)送AL寄存器。即([BX+AL])→AL。【例3.9】閱讀以下程序。
DATASEGMENTTABDB‘0123456789ABCDEF’DATAENDS
……MOVBX,OFFSETTAB;取變量TAB的EA→BXMOVAL,4;TAB表中第五項(xiàng)的偏移量4→AL
XLATTAB;([BX+AL])=(TAB+4)=34H→AL
……返回本節(jié)首頁(yè)461.傳送偏移地址指令LEA2.傳送偏移地址及數(shù)據(jù)段首址指令LDS3.傳送偏移地址及附加數(shù)據(jù)段首址指令LES二、地址傳送指令471.傳送偏移地址指令LEA語(yǔ)句格式:LEAOPD,OPS功能:將操作數(shù)OPS的偏移地址傳送給操作數(shù)OPD。注意:1、OPD一定要是一個(gè)十六位的通用寄存器;
2、OPS所提供的一定是一個(gè)存儲(chǔ)器地址;【例3.10】主存偏移地址的獲取。MOVBX,0100H ;MOVSI,0210H ;LEABX,1234[BX+SI] ;結(jié)果:(BX)=1544H482.傳送偏移地址及數(shù)據(jù)段首址指令LDS語(yǔ)句格式:LDSOPD,OPS功能:(OPS)→OPD,(OPS+2)→DS注意:1、OPD一定要是一個(gè)16位的通用寄存器(通常用SI)
2、OPS所提供的一定要是一個(gè)存儲(chǔ)器地址,且類型為DD【例3.11】
DATA1SEGMENTT1DDFDATA1ENDS
DATA2SEGMENTFDW70HDATA2ENDS
CODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATAMOVDS,AXLDSSI,T1MOVAX,DS:[SI]
…思考:(AX)=?DS:可不可以不要493.傳送偏移地址及附加數(shù)據(jù)段指令LES語(yǔ)句格式:LESOPD,OPS功能:與LDS指令的操作類似,(OPS)→OPD,(OPS+2)→ES。注意:1、OPD一定要是一個(gè)16位的通用寄存器(通常用DI)
2、OPS所提供的一定要是一個(gè)存儲(chǔ)器地址,且類型為DD返回本節(jié)首頁(yè)503.2.2算術(shù)運(yùn)算類指令一、加法指令二、減運(yùn)算指令三、乘運(yùn)算指令四、除運(yùn)算指令五、符號(hào)擴(kuò)展指令返回本節(jié)首頁(yè)511.加1指令
INC2.加指令A(yù)DD3.帶進(jìn)位加指令A(yù)DC一、加運(yùn)算指令521.加1指令I(lǐng)NC語(yǔ)句格式:INCOPD功能:(OPD)+1→OPD,影響ZF、SF、OF、PF和AF標(biāo)志,不影響CF標(biāo)志,可用于對(duì)計(jì)數(shù)器和地址指針進(jìn)行調(diào)整。2.加指令A(yù)DD語(yǔ)句格式:ADDOPD,OPS功能:(OPD)+(OPS)→OPD,影響所有條件標(biāo)志位。3.帶進(jìn)位加指令A(yù)DC語(yǔ)句格式:ADCOPD,OPS功能:(OPD)+(OPS)+CF→OPD,影響所有條件標(biāo)志位。多用于實(shí)現(xiàn)多精度加法運(yùn)算。53【例2.20】無(wú)符號(hào)雙字加法運(yùn)算。MOVBX,100;INCBX;MOV AX,4652H ;ADD AX,0F0F0H ;MOV DX,0234H ;ADC DX,0F0F0H ;返回本節(jié)首頁(yè)(AX)=4652H,標(biāo)志位無(wú)影響(AX)=3742HOF=0,SF=0,ZF=0,AF=0,PF=1,CF=1(DX)=0234H,標(biāo)志位無(wú)影響(DX)=0F325HOF=0,SF=1,ZF=0,AF=0,PF=0,CF=0(BX)=65H,ZF=0,SF=0,OF=0,PF=1,AF=0(BX)=64H,標(biāo)志位無(wú)影響541.減1指令DEC2.減指令SUB3.求補(bǔ)指令NEG4.帶借位減指令
SBB5.比較指令
CMP二、減運(yùn)算指令551.減1指令DEC語(yǔ)句格式:DECOPD功能:(OPD)-1→OPD,影響ZF、SF、OF、PF、AF標(biāo)志,不影響CF標(biāo)志。用于對(duì)計(jì)數(shù)器和地址指針的調(diào)整。2.減指令SUB語(yǔ)句格式:SUBOPD,OPS功能:(OPD)-(OPS)→OPD,影響所有條件標(biāo)志。3.求補(bǔ)指令NEG語(yǔ)句格式:NEGOPD功能:將目的操作數(shù)的每一位求反(包括符號(hào)位)后加1,結(jié)果送目的地址。影響所有條件標(biāo)志位。56【例2.22】求補(bǔ)運(yùn)算。
MOV AX,0FF64H;NEG AX ;
SUB AL,9DH;
NEG AL ;
DEC AL ;
NEG AL ;(AX)=FF64H,標(biāo)志位無(wú)影響(AX)=009CH,OF=0,SF=0,ZF=0,AF=1,PF=1,CF=1(AL)=0FFH,OF=0,SF=1,ZF=0,AF=1,PF=1,CF=1(AL)=01H,OF=0,SF=0,ZF=0,AF=1,PF=0,CF=1(AL)=00H,OF=0,SF=0,ZF=1,AF=0,PF=1,CF=1(AL)=00H,OF=0,SF=0,ZF=1,AF=0,PF=1,CF=0574.帶借位減指令SBB語(yǔ)句格式:SBBOPD,OPS功能:(OPD)―(OPS)―CF→OPD,影響所有條件標(biāo)志,主要用來(lái)實(shí)現(xiàn)多精度減法運(yùn)算。例:DATASEGMENTSUB1DW4257H,3412HSUB2DW12A5H,2F65HDSUBDW0,0DATAENDS……MOVAX,SUB1SUBAX,SUB2MOVDSUB,AX;(DSUB)=2FB2HMOVAX,SUB1+2
SBB
AX,SUB2+2;(DSUB+2)=04ADHMOVDSUB+2,AX該程序功能是什么?585.比較指令CMP語(yǔ)句格式:CMPOPD,OPS功能:(OPD)-(OPS),影響所有條件標(biāo)志位?!纠?.12】比較AL的內(nèi)容數(shù)值大小。MOVAL,80H;CMP AL,50H;JB BELOW ;SUB AL,50H;BELOW:…(AL)<50,即CF=1且ZF=0,轉(zhuǎn)到BELOW處執(zhí)行(AL)=80H,不影響標(biāo)志位(AL)=80H,OF=1,SF=0,ZF=0,AF=0,PF=1,CF=0(AL)=30H,OF=1,SF=0,ZF=0,AF=0,PF=1,CF=059例:閱讀下列程序段,指出它所實(shí)現(xiàn)的功能。
CMPAX,0JGEEXIT;如果(AX)大于或等于0轉(zhuǎn)EXITNEGAX;如果(AX)小于0,求其補(bǔ)EXIT:……
該程序段可實(shí)現(xiàn)求(AX)絕對(duì)值的運(yùn)算。
60例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,并用W,W+2單元存放w。
MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0
;x+y+24SUBAX,Z
SBBDX,Z+2
;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元返回本節(jié)首頁(yè)611.無(wú)符號(hào)數(shù)乘法指令MUL2.有符號(hào)乘指令I(lǐng)MUL三、乘法運(yùn)算指令621.無(wú)符號(hào)數(shù)乘法指令MUL語(yǔ)句格式:MULOPS功能:字節(jié)乘法:(AL)*(OPS)→(AX)
字乘法:(AX)*(OPS)→(DX,AX)注:OPS不能為立即操作數(shù)。只影響CF、OF條件標(biāo)志,若乘積的高位(字節(jié)相乘指AH,字相乘指DX)不為0,則CF=1,OF=1;否則CF=0,OF=0?!纠?.25】無(wú)符號(hào)數(shù)0A3H與11H相乘。MOV AL,0A3H ;(AL)=0A3HMOV BL,11H ;(BL)=11HMUL BL ;(AX)=0AD3H,CF=1,OF=1632.有符號(hào)乘指令I(lǐng)MUL語(yǔ)句格式:IMULOPS功能:字節(jié)乘法:(AL)*(OPS)→(AX)
字乘法:(AX)*(OPS)→(DX,AX)。注:OPS不能為立即操作數(shù)。只影響CF、OF條件標(biāo)志,若乘積的高位(字節(jié)相乘指AH,字相乘指DX)不是低位的符號(hào)擴(kuò)展,則CF=1,OF=1;否則CF=0,OF=0?!纠?.26】有符號(hào)數(shù)48與4相乘。MOV AL,48 ;(AL)=48MOV BL,4 ;(BL)=4IMUL BL ;(AX)=00C0H,OF=1,CF=1返回本節(jié)首頁(yè)641.無(wú)符號(hào)除指令DIV2.有符號(hào)除指令I(lǐng)DIV四、除運(yùn)算指令651.無(wú)符號(hào)除指令DIV語(yǔ)句格式:DIVOPS功能:字節(jié)除法:(AX)/(OPS)→AL(商)AH(余數(shù))字除法:(DX,AX)/(OPS)→AX(商)DX(余數(shù))注:①OPS不能為立即操作數(shù);②不影響標(biāo)志位;③如果除數(shù)為0或運(yùn)行結(jié)果溢出(即除數(shù)為字節(jié)或字,商超過8位或16位),則會(huì)產(chǎn)生溢出中斷,立即中止程序運(yùn)行。【例2.27】寫出實(shí)現(xiàn)無(wú)符號(hào)數(shù)1000H/10H運(yùn)算的程序段。MOV AX,1000H ;(AX)=1000HMOV BL,10H ;(BL)=10HDIV BL ;結(jié)果為100H,高出8位,則產(chǎn)生溢出中斷662.有符號(hào)除指令I(lǐng)DIV語(yǔ)句格式:IDIVOPS功能:字節(jié)除法:(AX)/(OPS)→AL(商)AH(余數(shù))字除法:(DX,AX)/(OPS)→AX(商)DX(余數(shù))注:①
OPS不能為立即操作數(shù);②不影響標(biāo)志位;③如果除數(shù)為0或運(yùn)行結(jié)果溢出(即除數(shù)為字節(jié)或字,商超過8位或16位),則會(huì)產(chǎn)生溢出中斷,立即中止程序運(yùn)行;④相除后,商的符號(hào)與數(shù)學(xué)上規(guī)定相同,但余數(shù)與被除數(shù)同號(hào)?!纠?.28】寫出實(shí)現(xiàn)有符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。MOV AX,0400H ;(AX)=0400HMOV BL,0B4H ;(BL)=0B4HIDIV BL ;(AL)=0F3H,(AH)=24H返回本節(jié)首頁(yè)671.字節(jié)轉(zhuǎn)換成字指令CBW2.將字轉(zhuǎn)換成雙字指令CWD五、符號(hào)擴(kuò)展指令681.字節(jié)轉(zhuǎn)換成字指令CBW
語(yǔ)句格式:CBW功能:將AL中的符號(hào)位數(shù)據(jù)擴(kuò)展至AH,形成字?jǐn)?shù)據(jù)。注:不影響標(biāo)志位,用于在兩個(gè)有符號(hào)字節(jié)相除之前產(chǎn)生一個(gè)被除數(shù)?!纠?.29】將兩個(gè)有符號(hào)數(shù)0A5H與15H相除。MOV AL,0A5H;(AL)=0A5HCBW ;(AX)=0FFA5HMOV BL,15H ;(AL)=15HIDIVBL ;692.將字轉(zhuǎn)換成雙字指令CWD
語(yǔ)句格式:CWD功能:將AX中的符號(hào)位數(shù)據(jù)擴(kuò)展至DX,形成雙字?jǐn)?shù)據(jù)。注:不影響標(biāo)志位,用于在兩個(gè)有符號(hào)字相除之前產(chǎn)生一個(gè)被除數(shù)?!纠?.30】將字?jǐn)?shù)據(jù)擴(kuò)展成雙字?jǐn)?shù)據(jù)。MOV DX,0 ;(DX)=0MOV AX,0FFABH ;(AX)=0FFABHCWD ;(DX)=0FFFFH(AX)=0FFABH70MOVAX,XIMULY;x*yMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIV
X;(v-(x*y+z-540))/x例:x,y,z,v均為16位帶符號(hào)數(shù),計(jì)算(v-(x*y+z-540))/x。返回本節(jié)首頁(yè)713.2.3位操作類指令一、邏輯運(yùn)算指令二、移位指令
返回本節(jié)首頁(yè)721.求反指令NOT2.邏輯乘指令A(yù)ND3.測(cè)試指令TEST4.邏輯加指令OR5.按位加指令XOR一、邏輯運(yùn)算指令→不影響標(biāo)志位CF=0OF=0PF:反映運(yùn)算結(jié)果ZF:反映運(yùn)算結(jié)果SF:反映運(yùn)算結(jié)果AF:未定義注意:邏輯運(yùn)算指令和邏輯運(yùn)算符的區(qū)別。731.求反指令NOT語(yǔ)句格式:NOTOPD功能:將目的地址中的內(nèi)容逐位取反后送入目的地址。【例】邏輯非運(yùn)算。MOV AX,878AH ;(AX)=878AHNOT AX ;(AX)=7875H742.邏輯乘指令A(yù)ND語(yǔ)句格式:ANDOPD,OPS 功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯乘運(yùn)算,結(jié)果存目的地址。應(yīng)用:1)用于將目的操作數(shù)中與源操作數(shù)置0的對(duì)應(yīng)位清零。【例】將AL中第3位和第7位清零。
MOV AL,0FFHAND AL,77H2)用于提取(或分離)出某些位?!纠縈OVAL,00111011BANDAL,00001111B;清除了高四位,保留低四位75【例】AND指令提供了一種將小寫字母轉(zhuǎn)換為大寫字母的簡(jiǎn)單方法。如字母‘a(chǎn)’=01100001B
‘A’=01000001B
實(shí)現(xiàn):MOVAL,’a’ANDAL,11011111B注意:AND指令與邏輯運(yùn)算符AND區(qū)分開來(lái).
例:ANDAL,0B6HAND0FDH763.測(cè)試指令TEST語(yǔ)句格式:TESTOPD,OPS功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯乘運(yùn)算,結(jié)果不送入目的地址。應(yīng)用:主要用于檢測(cè)與源操作數(shù)中為1的位相對(duì)應(yīng)的目的地址中的那幾位是否為0?!纠繙y(cè)試AX中的第12位是否為0,不為0則轉(zhuǎn)L。
TEST AX,1000HJNE L774.邏輯加指令OR語(yǔ)句格式:OROPD,OPS功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯加運(yùn)算,結(jié)果存目的地址。應(yīng)用:1)該指令用于將目的操作數(shù)中與源操作數(shù)對(duì)應(yīng)位置1?!纠繉L寄存器中第3位和第7位置1。
MOV AL,0FFHOR AL,88H782)將數(shù)字自身進(jìn)行“或”運(yùn)算以獲取關(guān)于其值的某些信息。同時(shí)影響標(biāo)志位以形成某種條件。【例】ORAL,AL則有ZFSF(AL)的值00(AL)>010(AL)=001(AL)<03)可以將數(shù)字0-9轉(zhuǎn)換為對(duì)應(yīng)的ASII碼?!纠縈OVDL,5ORDL,30H795.按位加指令XOR語(yǔ)句格式:XOROPD,OPS功能:目的操作數(shù)與源操作數(shù)做按位加運(yùn)算,結(jié)果送入目的地址。應(yīng)用:1)該指令用于將目的操作數(shù)中與源操作數(shù)置1的對(duì)應(yīng)位取反?!纠繉L的第0、4、5位取反。
MOV AL,45H ;(AL)=45HXOR AL,31H ;(AL)=74H2)進(jìn)行簡(jiǎn)單數(shù)據(jù)加密。(利用XOR操作的特性:如果某個(gè)操作數(shù)與同樣的操作數(shù)執(zhí)行兩次異或運(yùn)算后,其值保持不變。)
【例】KEY=239XORAL,KEY80思考題:給出下列各條指令執(zhí)行后的結(jié)果,以及狀態(tài)標(biāo)志CF、OF、SF、ZF、PF的狀態(tài)。MOVAX,1470H;ANDAX,AX;ORAX,AX;XORAX,AX;NOTAX;TESTAX,OFOFOH;返回本節(jié)首頁(yè)(AX)=1470H,標(biāo)志無(wú)影響(AX)=1470H,CF=OF=SF=ZF=PF=0(AX)=1470H,CF=OF=SF=ZF=PF=0(AX)=0H,CF=OF=SF=0,ZF=PF=1(AX)=0FFFFH,CF=OF=SF=0,ZF=PF=1(AX)=0FFFFH,CF=OF=ZF=0,SF=PF=181移位指令包括算術(shù)移位指令、邏輯移位指令和循環(huán)移位指令,分別進(jìn)行左移和右移操作。這些指令均有統(tǒng)一的語(yǔ)句格式:
[標(biāo)號(hào):]操作符OPD,1[標(biāo)號(hào):]操作符OPD,CL功能:為將目的操作數(shù)的所有位按操作符規(guī)定的方式移動(dòng)1位或按寄存器CL規(guī)定的次數(shù)(0~255)移動(dòng),結(jié)果送入目的地址。目的操作數(shù)是8位(或16位)的寄存器數(shù)據(jù)或存儲(chǔ)器數(shù)據(jù)。二、移位操作指令821.算術(shù)左移和邏輯左移指令SAL(SHL)語(yǔ)句格式:SALOPD,1或SHLOPD,1SALOPD,CL或SHLOPD,CL功能:將(OPD)向左移動(dòng)CL指定的次數(shù),最低位補(bǔ)入相應(yīng)的0,CF的內(nèi)容為最后移入位的值。<影響除AF外的所有條件標(biāo)志>
CF0【例】算術(shù)左移或邏輯左移指令
MOVAL,22HSALAL,1;(AL)=44H,(或SHLAL,1)說(shuō)明:該指令可以實(shí)現(xiàn)數(shù)的乘法運(yùn)算,假設(shè)運(yùn)算結(jié)果沒有溢出,每移動(dòng)一位相當(dāng)于乘以2;若有溢出,仍要使用乘法指令。832.算術(shù)右移指令SAR語(yǔ)句格式:SAROPD,1或SAROPD,CL功能:將(OPD)向右移動(dòng)CL指定的次數(shù)且最高位保持不變;CF的內(nèi)容為最后移入位的值。<影響除AF外的所有條件標(biāo)志>
CF【例】算術(shù)右移運(yùn)算。MOV BH,0F4H ;(BH)=0F4HMOV CL,2 ;(CL)=2SAR BH,CL ;(BH)=0FDH,CF=0,OF=0說(shuō)明:用SAR指令可以實(shí)現(xiàn)對(duì)有符號(hào)數(shù)除以2的n次方的運(yùn)算(n為移位次數(shù))。843.邏輯右移指令SHR語(yǔ)句格式:SHROPD,1或SHROPD,CL功能:將(OPD)向右移動(dòng)CL規(guī)定的次數(shù),最高位補(bǔ)入相應(yīng)個(gè)數(shù)的0,CF的內(nèi)容為最后移入位的值。<影響除AF外的所有條件標(biāo)志>
0CF【例】邏輯右移指令。
MOVAL,22HSHRAL,1;(AL)=11H,CF=0,OF=0說(shuō)明:該指令可以實(shí)現(xiàn)無(wú)符號(hào)數(shù)的除法運(yùn)算,每右移一位相當(dāng)于除以2,移動(dòng)n次可以實(shí)現(xiàn)除以2的n次方的運(yùn)算。思考題:如何將壓縮BCD碼(AL中內(nèi)容)的分解到字節(jié)變量A、B中(即變成非壓縮BCD碼)?854.循環(huán)左移指令ROL語(yǔ)句格式:ROLOPD,1或ROLOPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向左移動(dòng)CL規(guī)定的次數(shù)。CF的內(nèi)容為最后移入位的值。<只影響CF、OF標(biāo)志>
CF【例】循環(huán)左移指令。
MOVDL,0FAHMOVCL,4ROLDL,CL;(DL)=10101111B,CF=1說(shuō)明:可以使用ROL指令交換一個(gè)字節(jié)的高4位和低4位。865.循環(huán)右移指令ROR語(yǔ)句格式:ROROPD,1或ROROPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向右移動(dòng)CL規(guī)定的次數(shù),CF的內(nèi)容為最后移入位的值。<只影響CF、OF標(biāo)志>
CF【例】循環(huán)右移指令。
MOVDL,0FAHMOVCL,4RORDL,CL;(DL)=10101111B,CF=1說(shuō)明:可以使用ROL指令交換一個(gè)字節(jié)的高4位和低4位。876.帶進(jìn)位的循環(huán)左移指令RCL語(yǔ)句格式:RCLOPD,1或RCLOPD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動(dòng)CL規(guī)定的次數(shù)。<只影響CF、OF標(biāo)志>
CF【例】要求將AL中的高四位移至DL的低四位中。
MOVCX,4NEXT:SALAL,1RCLDL,1DECCXJNENEXT
思考:以下語(yǔ)句序列能夠?qū)崿F(xiàn)嗎?
MOVCL,4SALAL,CLRCLDL,CL887.帶進(jìn)位的循環(huán)右移指令RCR語(yǔ)句格式:RCROPD,1或RCROPD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動(dòng)所規(guī)定的次數(shù)。<只影響CF、OF標(biāo)志>
CF例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H。
MOVCL,8ROLAX,CLADDAX,BX89例:設(shè)(BX)=84F0H(1)(BX)為無(wú)符號(hào)數(shù),求(BX)/2
SHRBX,1
;(BX)=4278H(2)(BX)為帶符號(hào)數(shù),求(BX)/2
SARBX,1
;(BX)=0C278H(3)把(BX)中的16位數(shù)每4位壓入堆棧
MOVCH,4;循環(huán)次數(shù)
MOVCL,4;移位次數(shù)
NEXT:ROLBX,CLMOVAX,BXANDAX,000FHPUSHAXDECCHJNZNEXT00080004000F0000
(SP)返回本節(jié)首頁(yè)903.3偽指令偽指令-即告訴匯編程序如何進(jìn)行匯編工作的命令3.3.1數(shù)據(jù)定義偽指令3.3.2符號(hào)定義偽指令3.3.3段定義偽指令SEGMENT/ENDS3.3.4假定偽指令A(yù)SSUME3.3.5置匯編地址計(jì)數(shù)器偽指令ORG3.3.6源程序結(jié)束偽指令返回本章首頁(yè)913.3.1數(shù)據(jù)定義偽指令常用的數(shù)據(jù)定義偽指令有DB,DW,DD,DQ,DT。格式:[變量名]數(shù)據(jù)定義偽指令表達(dá)式[,…]功能:定義數(shù)據(jù)存儲(chǔ)區(qū),類型由數(shù)據(jù)定義偽指令確定,初值由表達(dá)式給定。返回本節(jié)923.3.2符號(hào)定義偽指令1.等價(jià)偽指令2.等號(hào)偽指令3.定義符號(hào)名偽指令返回本節(jié)931.等價(jià)偽指令格式:符號(hào)名EQU表達(dá)式功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,但它不申請(qǐng)存儲(chǔ)單元。用途:①用符號(hào)表示常量、數(shù)值表達(dá)式,即定義符號(hào)常量。②EQU與屬性運(yùn)算符PTR或THIS聯(lián)合使用,可以給變量或標(biāo)號(hào)定義新的類型屬性并重新命名,但保持其段偏移地址屬性不變。③利用EQU可以用一個(gè)符號(hào)名替代一個(gè)復(fù)雜的地址表達(dá)式和其他一些符號(hào),如指令助記符、變量名、標(biāo)號(hào)、段名、寄存器名、宏定義名等。注意:EQU定義的符號(hào)不得與本程序中的其它符號(hào)名同名。942.等號(hào)偽指令格式:符號(hào)名=表達(dá)式功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,并能對(duì)所定義的符號(hào)多次重復(fù)定義,且以最后一次定義的值為準(zhǔn)?!纠?.8】定義等價(jià)符號(hào)名。 ┆LOST=20LOST=LOST+10 ;30→LOST ┆953.定義符號(hào)名偽指令格式:變量名或標(biāo)號(hào)LABEL類型功能:定義與原有變量類型不同的新變量或?yàn)橹噶钫Z(yǔ)句定義有指定類型的標(biāo)號(hào)。通常與數(shù)據(jù)定義偽指令連用,其功能類似語(yǔ)句“變量名或標(biāo)號(hào)EQUTHIS類型”。【例3.9】定義新類型的變量。 ┆DDBUF LABELDWORDBUF DB 200DUP(0) ┆A LABEL FARB:LEA DX,BUF ┆思考:如何用EQU和THIS實(shí)現(xiàn)963.3.3段定義偽指令SEGMENT/ENDS格式:段名SEGMENT[定位類型][組合類型][‘類別’]...
段名ENDS功能:定義一個(gè)以SEGMENT偽指令開始,以ENDS偽指令結(jié)束,以段名命名的存儲(chǔ)段。段名:該段的名字,用來(lái)指出匯編程序?yàn)樵摱畏峙涞拇鎯?chǔ)區(qū)起始位置。注:當(dāng)段名作為符號(hào)被引用時(shí),表示對(duì)應(yīng)段的段值。97【例3.10】分析下面程序的內(nèi)存分布情況。┆DATASEGMENTAADW10H,-20HDATAENDS┆CODESEGMENT┆DATASEGMENTBUFDB‘ABC’DATAENDS┆CODEENDS┆10H00H0E0H0FFH41H42H43H………………………………AABUFDATACODE返回本節(jié)983.3.4假定偽指令A(yù)SSUME格式:ASSUME段寄存器:段名[,段寄存器:段名]功能:建立段寄存器與段之間的對(duì)應(yīng)關(guān)系。該偽指令一般出現(xiàn)在代碼段中。注意:1、ASSUME語(yǔ)句只是將當(dāng)前段的設(shè)置方案告訴了宏匯編程序如何翻譯成目標(biāo)程序,但并沒有將段首址置入對(duì)應(yīng)的段寄存器,cs和ss段寄存器運(yùn)行時(shí)由系統(tǒng)自動(dòng)設(shè)置,ds和es必須由用戶程序自行置入。2、如果程序中ASSUME重建了ds和es的對(duì)應(yīng)關(guān)系,也一定要緊跟著將這個(gè)新段首址送入ds和es中。3、不在當(dāng)前段的變量和存儲(chǔ)單元均是不可訪問的。99【例3.11】用ASSUME偽指令建立段與段寄存器之間的對(duì)應(yīng)關(guān)系。DATA1 SEGMENTA DB1,2,3DATA1 ENDSSTACK SEGMENTSTACKDB 200DUP(0)STACK ENDSDATA2 SGEMENTB DB‘123ABC’DATA2 ENDSDATA3 SEGMENTC DB?,?,?DATA3 ENDS100CODE SEGMENT ASSUME DS:DATA1,ES:DATA2,CS:CODE,SS:STACKSTART:MOV AX,DATA1 MOV DS,AX ;DATA1→DS MOV AX,DATA2 MOV ES,AX ;DATA2→ES …
ASSUMEES:DATA3MOV AX,DATA3 MOV ES,AX ;DATA3→ES…Q1:MOV AL,AQ2:MOV C,AL
ASSUMEDS:DATA2 ; MOV AX,DATA2 MOV DS,AX MOV AL,B MOV C,AL ┆CODE ENDS END START返回本節(jié)1013.3.5置匯編地址計(jì)數(shù)器偽指令ORG匯編地址計(jì)數(shù)器:用$符號(hào)表示,用來(lái)記錄正在被匯編程序翻譯的語(yǔ)句的地址,也就是說(shuō)其內(nèi)容標(biāo)出了匯編程序當(dāng)前的工作位置。例如:DATASEGMENTBUFDB‘123456789ABCDEFGHI’COUNTEQU$-BUF;DATAENDS102置匯編地址計(jì)數(shù)器偽指令格式:ORG數(shù)值表達(dá)式功能:將數(shù)值表達(dá)式的值賦給匯編地址計(jì)數(shù)器。數(shù)值表達(dá)式的值須為0~65535之間的非負(fù)整數(shù)?!纠?.12】給匯編地址計(jì)數(shù)器賦值。DATA SEGMENTORG 10 ;置$值為10VAR1 DW100H,200HORG $+5 ;置$的值為14+5,即為19VAR2 DB1,2,$+1,$+2N EQU$-VAR2 ;($)=23DATA ENDS返回本節(jié)1033.3.6源程序結(jié)束偽指令格式:END[表達(dá)式]功能:該語(yǔ)句標(biāo)志整個(gè)程序的結(jié)束,是源程序的最后一條語(yǔ)句。P72例2返回本節(jié)1043.4DOS系統(tǒng)功能調(diào)用一、系統(tǒng)功能調(diào)用方法二、常用的DOS系統(tǒng)功能調(diào)用返回本章首頁(yè)105一、系統(tǒng)功能調(diào)用方法DOS系統(tǒng)功能調(diào)用的方法一般可分為以下幾步:①設(shè)置所要調(diào)用功能的入口參數(shù)。②在AH寄存器中存入所要調(diào)用功能的功能號(hào)。③INT21H指令自動(dòng)轉(zhuǎn)入中斷子程序入口。④相應(yīng)中斷子程序運(yùn)行完畢,可按規(guī)定取得出口參數(shù)。(將出口參數(shù)放入AL中)當(dāng)調(diào)用成功返回時(shí)CF置0,否則CF置1,并自動(dòng)在寄存器AX中置錯(cuò)誤返回碼。106二、常用的DOS系統(tǒng)功能調(diào)用1.單字符輸入(1號(hào)調(diào)用)2.單字符顯示(2號(hào)調(diào)用)3.打印輸出(5號(hào)調(diào)用)4.結(jié)束調(diào)用(4CH號(hào)調(diào)用)5.控制臺(tái)輸入字符(8號(hào)調(diào)用)6.顯示字符串(9號(hào)調(diào)用)7.字符串輸入(10號(hào)調(diào)用)1071.單字符輸入(1號(hào)調(diào)用)格式:MOV AH,1
INT 21H功能:接受從鍵盤輸入字符的ASCII碼送入寄存器AL中,并送顯示器顯示。
2.單字符顯示(2號(hào)調(diào)用)格式:MOVDL,待顯示字符的ASCII碼
MOVAH,2
INT21H功能:將DL寄存器中的字符送顯示器顯示,如果DL中為〈CTRL〉+〈BREAK〉的ASCII碼,則退出。1083.打印輸出(5號(hào)調(diào)用)格式:MOV DL,待打印字符的ASCII碼
MOV AH,5
INT 21H功能:將DL寄存器中的字符送打印機(jī)打印。4.結(jié)束調(diào)用(4CH號(hào)調(diào)用)格式:
MOV AH,4CH
INT 21H功能:終止當(dāng)前程序并返回調(diào)用程序。1095.控制臺(tái)輸入字符(8號(hào)調(diào)用)格式:MOVAH,8INT21H功能:與1號(hào)調(diào)用相似,接受從鍵盤輸入字符的ASCII碼送入寄存器AL中,但不送顯示器顯示。6.顯示字符串(9號(hào)調(diào)用)格式:LEA DX,待顯示字符串首偏移地址
MOV AH,9
INT 21H功能:將當(dāng)前數(shù)據(jù)區(qū)中以‘$’結(jié)尾的字符串送顯示器顯示。1107、字符串輸入(10號(hào)調(diào)用)格式:LEA DX,緩沖區(qū)首偏移地址
MOV AH,10INT 21H功能:從鍵盤上輸入一字符串到用戶定義的輸入緩沖區(qū)中,并送顯示器顯示。10號(hào)系統(tǒng)功能調(diào)用的輸入緩沖存儲(chǔ)區(qū)的定義:緩沖區(qū)名DB緩沖區(qū)大小;規(guī)定輸入緩沖區(qū)的大小
DB0;實(shí)際輸入字符的個(gè)數(shù)
DB緩沖區(qū)大小DUP(0);鍵盤輸入的字符存放在該輸入緩沖區(qū)中例:BUFDB80DB0DB80DUP(0)111DATA SEGMENTSTR DB0DH,0AH,‘Exampleofstringdisplay!$’DATA ENDSSTACKSEGMENTSTACKDB 100DUP(0)STACKENDSCODE SEGMENTASSUMEDS:DATA,CS:CODE,SS:STACK【例3.13】若要在屏幕上顯示字符串“Exampleofstringdisplay!”,則程序如下:
112BEGIN: MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT 21H MOV AH,4CH INT 21HCODE ENDS END BEGIN113DATA SEGMENTINFO1 DB 0DH,0AH,‘INPUTSTRING:$’
INFO2 DB 0DH,0AH,‘OUTPUTSTRING:$’
BUFA DB 81 DB ?
DB 81DUP(0)
BUFB DB 81DUP(0)DATA ENDSSTACK SEGMENTSTACK DB 200DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE【例3.14】從鍵盤上輸入一串字符到輸入緩沖區(qū),然后將輸入的字符串在顯示器上以相反的順序顯示。114START:MOV AX,DATA MOV DS,AX
LEA DX,INFO1 MOV AH,9 ;9號(hào)調(diào)用,顯示輸入提示信息
INT 21H
LEA DX,BUFA MOV AH,10 ;10號(hào)調(diào)用,鍵盤輸入字符串到緩 沖區(qū)BUFA INT 21H
LEA SI,BUFA+1 MOV CH,0 ;取字符長(zhǎng)度→CX MOV CL,[SI]
ADD SI,CX ;SI指向字符串尾部
LEA DI,BUFB ;DI指向字符串變量BUFB115NEXT:MOV AL,[SI] MOV [DI],AL
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)蒙古烏蘭察布市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)統(tǒng)編版小升初真題(下學(xué)期)試卷及答案
- 塔式起重機(jī)與其他機(jī)械協(xié)同作業(yè)方案
- 機(jī)器人產(chǎn)業(yè)全過程工程咨詢實(shí)施方案
- 高層建筑消防安全制度探索
- 社區(qū)醫(yī)院后勤管理制度優(yōu)化方案
- 班級(jí)后進(jìn)生行為規(guī)范轉(zhuǎn)化方案
- 《保理合同法律問題研究》
- 邢臺(tái)學(xué)院《應(yīng)用翻譯》2022-2023學(xué)年第一學(xué)期期末試卷
- xx集團(tuán)辦公樓抗震改造工程方案
- 糖尿病口服降糖藥物分類
- 風(fēng)機(jī)安裝工程質(zhì)量通病及預(yù)防措施
- 三角形鋼管懸挑斜撐腳手架計(jì)算書
- 文件和文件夾的基本操作教案
- 剪紙教學(xué)課件53489.ppt
- 旅游業(yè)與公共關(guān)系PPT課件
- 施工單位資質(zhì)報(bào)審表(共4頁(yè))
- 勞動(dòng)法講解PPT-定稿..完整版
- 彩色的翅膀_《彩色的翅膀》課堂實(shí)錄
- 假如你愛我的正譜
- 中醫(yī)住院醫(yī)師規(guī)范化培訓(xùn)基地工作指南
- 人教PEP四年級(jí)上冊(cè)英語(yǔ)《Unit 5 A Let's talk 》PPT課件
評(píng)論
0/150
提交評(píng)論