第四章匯編語言程序設(shè)計_第1頁
第四章匯編語言程序設(shè)計_第2頁
第四章匯編語言程序設(shè)計_第3頁
第四章匯編語言程序設(shè)計_第4頁
第四章匯編語言程序設(shè)計_第5頁
免費預(yù)覽已結(jié)束,剩余105頁可下載查看

下載本文檔

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

文檔簡介

微型計算機原理及應(yīng)用鄭猛北京理工大學(xué)光電學(xué)院

2023/1/1712023/1/172第四章匯編語言程序設(shè)計匯編語言程序設(shè)計是開發(fā)微機系統(tǒng)軟件的基本技術(shù),在程序設(shè)計中占有十分重要的地位。由于匯編語言具有執(zhí)行速度快和易于實現(xiàn)對硬件的控制等獨特的特點,至今仍得到廣泛應(yīng)用。特別是在對于程序的空間和時間要求很高的場合,以及需要直接控制設(shè)備的應(yīng)用場合,匯編語言更是必不可少。內(nèi)容提要程序設(shè)計語言概述8086/8088匯編語言的基本語法8086/8088匯編語言程序設(shè)計基本方法軟件調(diào)試技術(shù)第四章匯編語言程序設(shè)計2023/1/1732023/1/174

4.1程序設(shè)計語言概述▲機器語言(MachineLanguage)

由二進制代碼書寫和存儲的指令與數(shù)據(jù)。▲匯編語言(AssemblyLanguage)指令的助記符+符號地址+標(biāo)號是機器語言的符號表示,是較低級的語言。

源程序利用匯編語言編寫的程序,稱源程序。不能被機器識別。

源程序的運行匯編程序翻譯成二進制的浮動目標(biāo)程序連接程序?qū)⒛繕?biāo)文件與庫文件相連,形成可執(zhí)行程序可執(zhí)行的程序在機器上直接運行▲高級語言:脫離具體機器、面向用戶的通用語言,不依賴于計算機的結(jié)構(gòu)和指令系統(tǒng)。可讀性好,編程簡單;

匯編語言:實時性能好,程序效率高,節(jié)省內(nèi)存,運行速度快。2023/1/175

4.1程序設(shè)計語言概述例

編程實現(xiàn)c=a+b,并在屏幕上顯示結(jié)果

#include"stdio.h"intmain(intargc,char*argv[]){inta,b,c;a=1; b=2;c=a+b;printf(“c=%d\n",c);return0;}編譯后的目標(biāo)文件達到3.59KB解1:用C語言實現(xiàn)2023/1/176

4.1程序設(shè)計語言概述例

編程實現(xiàn)c=a+b,并在屏幕上顯示結(jié)果

解2:用匯編語言實現(xiàn)datasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:dataassumees:datastart:pushdssubax,axpushax

movax,datamovds,axmoves,ax

mova,1movb,2moval,aaddal,bmovc,alleadx,stringmovah,09int21haddc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart匯編后的目標(biāo)文件只有208字節(jié)2023/1/177

4.28086/8088匯編語言的基本語法各種機器的匯編語言其語法規(guī)則不盡相同,但基本語法結(jié)構(gòu)形式類似?,F(xiàn)以8086/8088匯編語言為例加以具體討論。4.2.18086/8088匯編源程序?qū)嵗诰唧w討論8086/8088匯編語言的語法規(guī)則之前,下面先舉一個具有完整段定義格式的匯編源程序(即MASM程序)實例,以便對匯編語言的有關(guān)規(guī)定和格式有個初步了解。

例:求從1開始連續(xù)50個奇數(shù)之和,并將結(jié)果存放在名字為SUM的字存儲單元中。2023/1/178

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗鼶ATASEGMENT;定義數(shù)據(jù)段,DATA為段名SUMDW0;由符號(叫變量名)SUM指定的內(nèi)存單元類型定義為一個字,初值為0DATAENDS;定義數(shù)據(jù)段結(jié)束STACKSEGMENTSTACK;定義堆棧段,這是組合類型偽指令,它規(guī)定在偽指令后須跟STACK類型名DB200DUP(0);定義堆棧段為200個字節(jié)的連續(xù)存儲區(qū),且每個字節(jié)的值為0STACKENDS;定義堆棧段結(jié)束CODESEGMENT;定義代碼段ASSUMEDS:DATA,SS:STACK,CS:CODE;由ASSUM偽指令定義各段寄存器的內(nèi)容。告訴匯編程序已定義的段地址要放在哪個對應(yīng)的段寄存器。2023/1/179

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗齋TART:MOVAX,DATA;數(shù)據(jù)段首址→DS

MOVDS,AX;

MOVCX,50;循環(huán)次數(shù)值→CX

MOVAX,0;清AX

MOVBX,1;BX置初值1NEXT:ADDAX,BX;累加奇數(shù)和,計50次

INCBX;求下一個奇數(shù)

INCBX

DECCX;循環(huán)計數(shù)器作減1計數(shù)

JNZNEXT;未計完50次時,轉(zhuǎn)至NEXT循環(huán)

MOVSUM,AX;累加和送存SUM單元

MOVAH,4CH;DOS功能調(diào)用語句,機器將結(jié)束本

INT21H程序的運行,并返回DOS狀態(tài)CODEENDS;代碼段結(jié)束

ENDSTART;整個程序匯編結(jié)束2023/1/1710

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗齾R編語言的格式

由匯編語言編寫的源程序是由許多語句(也可稱為匯編指令)組成的。每個語句由1~4個部分組成,其格式是:

[標(biāo)號]指令助記符[操作數(shù)][;注解]標(biāo)號:給指令或某一存儲單元地址所起的名字。指令助記符:表示不同操作的指令,可以是8086的指令助記符。操作數(shù):

指令執(zhí)行的對象。依指令的要求,可能有一個、兩個或者沒有。注解:該項可有可無,是為源程序所加的注解,用于提高程序的可讀性。2023/1/1711

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗味x語句匯編源程序一般由若干段組成,每個段都有一個名字(叫段名),以SEGMENT作為段的開始,以ENDS作為段的結(jié)束,這兩者(偽指令)前面都要冠以相同的名字。段從性質(zhì)上可分為代碼段、堆棧段、數(shù)據(jù)段和附加段4種,但代碼段與堆棧段是不可少的(堆棧段可缺省,匯編程序會自動設(shè)置堆棧段),數(shù)據(jù)段與附加段可根據(jù)需要設(shè)置。(在上面這個例子中,一共定義了3個段:1個數(shù)據(jù)段,1個堆棧段,1個代碼段) 段定義格式:

段名SEGMENT . .

段名ENDS例:

DATA

SEGMENT

SUM

DW0

DATAENDS2023/1/1712

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗?/p>

ASSUME是段定義偽指令,它用來定義源程序中的各個邏輯段,告訴匯編程序已定義的段地址將要放到哪個對應(yīng)的段寄存器中。格式:ASSUME段寄存器名:段名

[,段寄存器名:段名]例 :ASSUMECS:CODE,DS:DATA,SS:NOTHING注意:CS不用賦值,由匯編程序賦值;

DS和ES要在程序中用指令賦值。ASSUME偽指令例:DATA SEGMENTSUM DW0DATA ENDSSTACK SEGMENTSTACKDB 200DUP(0)STACK ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODE START:MOVAX,DATA;

MOV DS,AX;2023/1/1713

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗齻沃噶睿菏且环N說明性語句,它在匯編時只為匯編程序提供進行匯編所需要的有關(guān)信息,如定義符號、分配存儲單元、初始化存儲器等,而本身并不產(chǎn)生目標(biāo)代碼。

2000D0FFDATASEGMENTAADW20H,-30HDATAENDS3條偽指令定義了一個數(shù)據(jù)段,匯編時,將變量AA定義為一個字類型數(shù)據(jù)區(qū)的首地址20H-30H2023/1/1714

4.28086/8088匯編語言的基本語法4.2.18086/8088匯編源程序?qū)嵗袷剑?/p>

入口地址標(biāo)號: (第一條要運行的指令) (主程序) (子程序)

... END 入口地址標(biāo)號

編譯程序根據(jù)開始和結(jié)束處的入口地址標(biāo)號確定起始和結(jié)尾的地址,故兩處的標(biāo)號要求一致。程序起始地址例:START: MOV AX,DATA;

MOV DS,AX;

……CODE ENDS END START

2023/1/1715

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式指令語句:是一種執(zhí)行性語句,它在匯編時,匯編程序?qū)橹a(chǎn)生一一對應(yīng)的機器目標(biāo)代碼。偽指令語句:說明性語句,它在匯編時只為匯編程序提供進行匯編所需要的有關(guān)信息,本身并不生成目標(biāo)代碼。宏指令語句:是以某個宏名字定義的一段指令序列,在匯編時,凡有宏指令出現(xiàn)的地方都將用相應(yīng)的指令序列的目標(biāo)代碼插入。宏指令語句是一般性指令語句的擴展。匯編指令機器碼MOVDS,AX8ED8ADDAX,BX03C3

DATASEGMENTAADW20H,-30HDATAENDS1語句的種類在8086/8088匯編語言中,有3種基本語句:2023/1/1716

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式2語句的格式指令語句格式:

[標(biāo)號:]

[前綴]指令助記符[操作數(shù)表][;注釋]標(biāo)號:指令語句的符號地址,后面必須緊跟冒號“:”。標(biāo)號可使用的字符為字母(A~Z,a~z)、數(shù)字(0~9)或某些特殊字符(@、一、?)等。第一個字符必須為字母或某些特殊字符,最大有效字符長度為31個字符(匯編程序僅識別前面31個字符)。標(biāo)號可以省略,它經(jīng)常作為表示轉(zhuǎn)移的地址。特別注意:標(biāo)號不能與機器保留字相同2023/1/1717

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式2語句的格式指令語句格式:

[標(biāo)號:]

[前綴]指令助記符[操作數(shù)表][;注釋]前綴:8086/8088中有些特殊指令常作為前綴同其他指令配合使用,如和“串操作指令”(MOVS、CMPS、SCAS、LODS與STOS)連用的5條“重復(fù)指令”(REP、REPE/REPZ、REPNE/REPNZ),以及總線封鎖指令LOCK等都是前綴。2023/1/1718

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式2語句的格式指令語句格式:

[標(biāo)號:]

[前綴]指令助記符[操作數(shù)表][;注釋]指令助記符:

指令名稱的代表符號,指出指令的操作類型。可譯成機器碼;不可省略,是關(guān)鍵字。操作數(shù)表:(由逗號分隔開的多個操作數(shù))參與指令運算的數(shù)據(jù)??梢杂幸粋€、多個操作數(shù)或無操作數(shù);操作數(shù)與指令助記符之間用“空格”隔開。操作數(shù)可以是常數(shù)、變量、標(biāo)號、寄存器名或表達式。2023/1/1719

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式2語句的格式偽指令語句格式:

[名字]偽指令助記符[參數(shù)表][;注釋]名字:用符號地址表示,名字后不允許帶冒“:”。通常是變量名、段名、過程名、符號名等。偽指令助記符:

常用的有變量定義語句(DB、DW)符號定義語句(EQU、=),段定義語句(SEGMENT…END),段分配語句(ASSUME),過程定義語句(PROC…ENDP)等。2023/1/1720

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句匯編語言語句的種類和格式2語句的格式偽指令語句格式:

[名字]偽指令助記符[參數(shù)表][;注釋]操作數(shù):不同偽指令有不同要求。操作數(shù)可以是常數(shù)、變量、字符串、表達式等注釋:

功能和使用與指令性語句相同。接下來介紹各種匯編語言語句的有關(guān)語法規(guī)則2023/1/1721

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句

1.標(biāo)號標(biāo)號是可執(zhí)行指令語句的地址的符號表示,可作為程序轉(zhuǎn)向的目標(biāo)地址。具有三個屬性

(1)段地值:標(biāo)號所在段的段基址。

(2)段內(nèi)偏移量:標(biāo)號所在地址與所在段的段首址之間的偏移地址字節(jié)數(shù)。

(3)類型:指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離,也稱距離屬性。類型NEAR,表示此標(biāo)號為近標(biāo)號,只能實現(xiàn)段內(nèi)轉(zhuǎn)移或調(diào)用;類型FAR,表示此標(biāo)號為遠標(biāo)號,可以實現(xiàn)段間轉(zhuǎn)移或調(diào)用。

注意:若標(biāo)號后面緊跟冒號,表示隱含此標(biāo)號距離屬性為NEAR,也可用偽指令將此屬性改為FAR。2023/1/1722

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句

2.操作數(shù)匯編語言中的操作數(shù),可以是常量、寄存器、存儲器、變量、標(biāo)號或表達式。

常量——可作指令的立即數(shù)或偽指令的參數(shù)變量——主要作為存儲器操作數(shù)匯編語言語句中的名字和標(biāo)號具有邏輯地址和類型屬性,主要用做地址操作數(shù),也可以作為立即數(shù)和存儲器操作數(shù)2023/1/1723

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句

2.操作數(shù)匯編語言中的操作數(shù),可以是常量、寄存器、存儲器、變量、標(biāo)號或表達式。

常量——可作指令的立即數(shù)或偽指令的參數(shù)變量——主要作為存儲器操作數(shù)匯編語言語句中的名字和標(biāo)號具有邏輯地址和類型屬性,主要用做地址操作數(shù),也可以作為立即數(shù)和存儲器操作數(shù)2023/1/1724

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式表達式是運算符將常量、變量和標(biāo)號這3個基本形式的數(shù)據(jù)連接起來的運算式,它的求值是由匯編程序完成的。(3.1)

常量與數(shù)值表達式①數(shù)值常量A)16進制數(shù)(H)例:12H;0FAH(注意:A—F打頭時前面加0)B)10進制數(shù)(D或缺省)C)2進制數(shù)(B)例:10010001B2023/1/1725

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式①數(shù)值常量D)當(dāng)前指令地址($)例:

DATA SEGMENT

BUFFERDB32H,0AFH,10H,45H,00H,0FEH N1EQU$-BUFFER DATA ENDS START:…….……. MOVCX,N1;(N1的數(shù)編譯后為6,用于循環(huán)次數(shù))注:N1地址-BUFFER地址,計算出BUFFER數(shù)據(jù)區(qū)的大小,該值以符號賦值形式存入N1,編譯后以立即數(shù)形式賦值。

2023/1/1726

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式②

字符串常量用單引號‘’括起來,匯編程序自動編譯成ASCⅡ碼。例:‘4AB’

→譯成34H,41H,42H③符號常量預(yù)先給常量定義一個“名字”,在匯編語句中用該“名字”表示該常量。它的定義需用偽指令EQU或“=”例:ONEEQU1DATA1=2*12HMOVAX,DATA1+ONE把25H送AX2023/1/1727

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式④數(shù)值表達式分為算數(shù)運算符、邏輯運算符、關(guān)系運算符算術(shù)運算符包括:+,-,*,/,MOD(取余),SHL,SHR特點:①所有的算術(shù)運算符均可以對數(shù)據(jù)進行運算,運算對象與運算結(jié)果都是整數(shù)②若對地址運算,通常是在標(biāo)號上加/減某一個數(shù)字量。2023/1/1728

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式④數(shù)值表達式例

數(shù)組ARRAY定義如下ARRAYDB1,2,3,4,5,6,7,8TRY DB 20指令為:MOVAX,30*5 MOVCX,(TRY-ARRAY)匯編時,計算表達式形成如下指令:

MOVAX,150 MOVCX,82023/1/1729

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式④數(shù)值表達式例匯編程序指令格式如下:

DA EQU 300 MOV AX,DA-80 MOV BX,DAMOD100 MOV CX,DA/100 MOV DH,01100100BSHR2匯編時,計算表達式形成指令為:

DA EQU 300 MOV AX,220 MOV BX,0 MOV CX,3 MOV DH,19H(00011001B)2023/1/1730

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式④數(shù)值表達式邏輯運算符AND(與)、OR(或)、NOT(非)、XOR(異或)注意:按位運算的,只能對常數(shù)進行運算,得到結(jié)果也是常數(shù)。例 MOV AL,NOT0FFH MOV BL,8CHAND73H(10001100BAND01110011B)

MOV AH,8CHOR73H(10001100BOR01110011B)匯編時,計算表達式形成指令為:

MOV AL,0 MOV BL,0 MOV AH,0FFH 2023/1/1731

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.1)常量與數(shù)值表達式④數(shù)值表達式關(guān)系運算符包括6種:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。注意:關(guān)系運算符的兩個操作數(shù)必須是數(shù)據(jù),或是同一段內(nèi)的兩個存儲單元的地址;若結(jié)果為真,輸出全是1,即0FFH或0FFFFH;若結(jié)果為假,輸出全是0。例MOVAX,10HGT16ADDBL,6EQ0110BMOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200)匯編時,計算表達式形成指令為:

MOVAX,0ADDBL,0FFHMOVCX,100 ;當(dāng)端口<5時2023/1/1732

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式①變量及其屬性

匯編語言中,“變量”是內(nèi)存中的一個數(shù)據(jù)區(qū)的名字,即數(shù)據(jù)所存放地址的符號。變量通常在數(shù)據(jù)段中定義,這樣在程序中可多次使用。規(guī)定:變量由字母打頭,最多31個字符。

變量定義語句作用:為變量分配內(nèi)存和賦初值。格式:變量名助記符操作數(shù),…,操作數(shù);注釋注意:變量的實際地址為存儲該變量內(nèi)存的第一個字節(jié)的地 址,編譯鏈接后給出。2023/1/1733

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式②變量的定義

變量名——用符號表示,后面不跟冒號。匯編時將變量助記符后的第一個字節(jié)的偏移地址作為它的符號地址。助記符——所用偽指令助記符主要有:DB:用來定義字節(jié); DW:用來定義字;DD:用來定義雙字; DQ:用來定義四個字;DT:用來定義五個字(十個字節(jié));格式:[變量名]數(shù)據(jù)區(qū)定義偽指令表達式功能:指定存儲單元,以分配存儲空間或存入操作數(shù)。2023/1/1734

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式②變量的定義

例:DA1DB10H,52H

;變量DA1中裝入10H和52H例:DA2DW1122H,34H

;變量DA2中裝入22H,11H,34H,00H例:DA3DD5*20H,0FFEE

;變量DA3中裝入A0H,00H,00H,00H,EEH,F(xiàn)FH,00H,00H2023/1/1735

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式②變量的定義

例:操作數(shù)是字符串

DA1DB‘HELLO’(字符串‘HELLO’的ASCII碼裝入FIRST開始的存儲單元)DA2DB‘OK’DA3DW‘OK’字節(jié)數(shù):DA15BDA22BDA32BDW定義字符串只允許包含兩個字符,否則必須用DB指令定義字符串,個數(shù)不超過255個2023/1/1736

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式②變量的定義

例操作數(shù)用?定義不確定值的變量,用作保留存儲空間。

M1 DB? ;定義變量M1為不確定字節(jié),保留1個字節(jié)空間

M2 DW0D55H,? ;定義變量M2第二個字為不確定,保留兩個字節(jié)空間2023/1/1737

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式②變量的定義

操作數(shù)用DUP來定義重復(fù)變量

ONEDB5DUP(0);重復(fù)5個0存入ONE起始的存儲單元

TWODW10DUP(?);重復(fù)10次,保留10個字的存儲單元

THREEDB4DUP(1,2DUP(20H));DUP嵌套2023/1/1738

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式③地址表達式

例用地址表達式定義變量。已知變量PAR1,標(biāo)號ADR2和ADR3,有定義為:

ONEDWPAR1 ;PAR1的偏移地址賦給字變量ONETWODWADR2 ;ADR2的偏移地址賦給字變量TWOTHREEDDADR3;ADR3的偏移地址和段基址賦給雙字變量THREE設(shè):PAR1,ADR2,ADR3在同一代碼段CS=2000H中,其偏移地址分別為0100H,0200H,0300H。存儲器中變量存放格式?2023/1/1739

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.2)變量與地址表達式③地址表達式例變量的類型屬性可以通過屬性操作符PTR來指定。

PTR用來說明某個變量、標(biāo)號或地址表達式的類型屬性。只在本語句有效,不永久改變變量屬性。STR1DW? ;STR1定義為字類型 MOVAX,STR1;合法

MOVAL,STR1;非法MOVAL,BYTEPTRSTR1;合法例

N1DB15H,36HN2DW1122H,3344HLO:MOVAX,WORDPTRN1;使N1轉(zhuǎn)換成字類型

MOVBL,BYTEPTRN2;使N2轉(zhuǎn)換成字節(jié)類型也可用PTR來改變距離屬性JMPFARPTRLOP在JMP語句中將標(biāo)號LOP改為FAR,實現(xiàn)段間轉(zhuǎn)移。2023/1/1740

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述宏匯編中有5中運算符,算數(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符、合成運算符。下面介紹后兩種①分析運算符分析運算符又叫取值運算符,用來把變量或標(biāo)號分解為其組成部分(段地址、偏移值、類型、數(shù)據(jù)字節(jié)總數(shù)、數(shù)據(jù)項總數(shù)等),并以數(shù)值形式回送給變量或標(biāo)號。2023/1/1741

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符包括:SEG、OFFSET、TYPE、SIZE、LENGTH、HIGH、LOW。功能:加在變量或標(biāo)號前,返回運算對象的某個參數(shù)值。例如偏移地址值、段地址值、類型屬性、變量包含的單元數(shù)等。2023/1/1742

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符SEG

格式:SEG變量或標(biāo)號功能:匯編結(jié)果將回送變量或標(biāo)號的段地值。例 MOV AX,SEGM1 MOV DS,AX設(shè):M1是段名為DATA的數(shù)據(jù)段中的一個變量名;如DATA段從0500H開始,匯編后指令變?yōu)椋?/p>

MOV AX,0500H MOV DS,AX2023/1/1743

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符OFFSET

格式:OFFSET變量或標(biāo)號功能:返回標(biāo)號或變量的偏移地址值。

例若DA1為數(shù)據(jù)段中一個變量名

MOVBX,OFFSETDA1;等價于LEABX,DA12023/1/1744

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符TYPE

格式:TYPE變量或標(biāo)號功能:加在變量前,返回變量的類型屬性;加在標(biāo)號前,返回標(biāo)號的距離屬性。-1[FFH]-2[FEH]NEARFAR標(biāo)號DBDWDDDQ類型1248返回值

變量例

A1 DB20H,30H A2 DW0438H A3 DD?L1: MOV AH,TYPEA1 MOV BH,TYPEA2 ADD AL,TYPEA3 MOV BL,TYPEL1匯編時,計算表達式形成指令為:

MOV AH,1 MOV BH,2 ADD AL,4 MOV BL,0FFH2023/1/1745

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符LENGTH

格式:LENGTH變量或標(biāo)號功能:當(dāng)變量中使用DUP時,LENGTH返回此變量所包含的單元數(shù),對其它變量則返回1。例M1 DW100DUP(?)M2 DW1,2,3MOVCX,LENGTHM1MOVBL,LENGTHM2匯編時,計算表達式形成指令為:

MOV CX,100 ;返回變量所包含的100個字單元

MOV BL,12023/1/1746

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符SIZE

格式:SIZE變量或標(biāo)號功能:加在變量前,返回該變量包含的總字節(jié)數(shù)。SIZE=LENGTH*TYPE。例對上例定義的M1,M2,M3 MOV CX,SIZEM1(M1 DW100DUP(?)) MOV BL,SIZEM2(M2DW1,2,3)匯編時,計算表達式形成指令為:

MOV CX,200;返回變量所包含的200個字節(jié)單元

MOV BL,2

2023/1/1747

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述①分析運算符例:設(shè)DS=0200H,從偏移量為0000H定義以下變量:DA1DW1234H,5678HDA2DD5DUP(1,2)

……….MOVAX,OFFSETDA1MOVAX,OFFSETDA2MOVAX,SEGDA1L1:MOVAX,TYPEDA2MOVAX,TYPEL1MOVAX,LENGTHDA1MOVAX,SIZEDA2MOVAX,4MOVAX,0FFFFHMOVAX,1MOVAX,20匯編時MOVAX,0000HMOVAX,0004HMOVAX,0200H匯編時2023/1/1748

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述②合成運算符PTR格式:類型/距離PTR變量或標(biāo)號功能:將PTR左邊的類型屬性賦給右邊的變量或標(biāo)號。注意:PTR本身不分配存儲單元,僅對已分配的存儲單元賦予新的屬性;常與類BYTE、WORD、NEAR、FAR等連用。例:在數(shù)據(jù)段中已定義了變量VA1DW?;

在程序中使用變量VA1時,MOVVA1,AX;合法

而MOVVA1,AL;非法(出現(xiàn)類型不匹配錯誤)

可以通過PTR指明是存入字節(jié)單元還是字單元。

MOVBYTEPTR[BX],10H;[BX]10HMOVWORDPTR[BX],10H;[BX],[BX+1]0010HMOVBYTEPTRVA1,AL;合法(用類型說明符修改了數(shù)據(jù)類型)2023/1/1749

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句指令語句3.表達式→(3.3)運算符綜述②合成運算符THIS格式:變量/標(biāo)號EQUTHIS類型/距離功能:將EQUTHIS右邊的類型/距離屬性,賦給左邊的變量/標(biāo)號,該變量或標(biāo)號的段地址和偏移地址與下一個存儲單元的地址相同。例 FIRST EQUTHISBYTE TABLEDW200DUP(?)FIRST的偏移地址值與TABLE的偏移地址值相同,區(qū)別在于FIRST變量為字節(jié)類型,TABLE為字類型。2023/1/1750

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句在匯編時進行處理,主要完成變量定義,段定義,段分配,指示程序開始和結(jié)束等功能。常用:數(shù)據(jù)定義(變量定義)語句:DB,DW,DD,DQ,DT符號定義語句:EQU,=,LABLE段定義語句:SEGMENT…ENDS段分配語句:ASSUME過程定義語句:PROC…ENDP程序開始、結(jié)束語句:ORG,END2023/1/1751

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令作用:對重復(fù)使用的數(shù)據(jù)、地址值、表達式可一次賦值,重復(fù)使用。格式:符號名EQU數(shù)或表達式 符號名=數(shù)或表達式例: A1EQU123 B1=246 C1EQUDS:[0005]EQU,“=”語句均不占內(nèi)存EQU左邊的符號不能重復(fù)定義EQU右若為標(biāo)號或變量,必須先定義例:

LP1DB20DUP(?)LP2EQULP1+3;給LP2賦地址指針(LP1的第一個地址+3)注意:EQU賦值后,不能重新賦值;

=賦值后,可以重新賦值。例:X1=10

… X1=20(結(jié)果X1=20)2023/1/1752

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令例:若從數(shù)據(jù)段偏移地址為0000H開始定義如下語句:X1DB12H,34HX2EQU20X3DB56H,78H則:MOVAX,OFFSETX1;MOVAX,X2;MOVAX,OFFSETX3;MOVAX,OFFSETX2;問:AX的值分別是多少?

AX=0000HAX=14HAX=0002H(×)2023/1/1753

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令LABLE

功能:為當(dāng)前存儲單元定義一個指定類型的變量或標(biāo)號。格式:變量名或標(biāo)號名LABLE類型⑴LABEL與變量連用給下一個變量起一個別名,類型屬性可修改成BYTE,WORD等。例DATB LABLEBYTE;DATB為DATW的別名,類型為字節(jié)DATWDW3031H,3233H ;DATW變量類型為字

MOV AL,DATB[0] ;31HAL MOVBX,DATW[1] ;3233HBX例:ARRAY_BYTELABLEBYTE;為變量ARRAY_BYTE定義一個字節(jié)類型的數(shù)據(jù)區(qū)ARRAY_WORDLABLEWORD;為變量ARRAY_BYTE定義一個字類型的數(shù)據(jù)區(qū)⑵LABEL與標(biāo)號連用給下一語句定義的標(biāo)號取一個別名,可改變距離屬性為FAR或NEAR。例 DISF LABELFAR DISN:MOV AX,[SI]DISF與DISN指向同一條指令,DISF是DISN的別名,但距離屬性改為FAR,當(dāng)其它代碼段對它調(diào)用時,可以使用。2023/1/1754

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令格式:段名SEGMENT[定位類型]

[組合類型]

[‘類別’]

…;一系列匯編指令段名ENDS功能:將一個邏輯段定義成一個整體。段名——是邏輯段的標(biāo)識符,不可省略。它確定了邏輯段在存儲器中的地址,SEGMENT和ENDS前的段名必須相同。SEGMENT…ENDS——是段定義的偽指令助記符,任何一個邏輯段必須以SEGMENT開始,ENDS結(jié)束,不可省略,并且必須成對出現(xiàn),兩者之間是本邏輯段的內(nèi)容。SEGMENT……ENDS2023/1/1755

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令⑴定位類型(AlignType)定位該段起始地址。定位類型參數(shù)主要有下面4種。①BYTE——指定該段起始地址定位在存儲單元的任何字節(jié)地址。②WORD——指定該段起始地址定位在字的邊界,即段的首地址必須是偶數(shù)。③PARA——指定定位段的起始地址必須在節(jié)(16的整數(shù)倍)的整數(shù)邊界,參數(shù)缺省時,就當(dāng)成PARA。④PAGE——指定該段起始地址定位在頁的邊界,即段的首地址必須是256的整數(shù)倍。SEGMENT……ENDS2023/1/1756

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令SEGMENT……ENDS⑵組合類型(CombineType)指示連接程序如何將某段與其他段組合起來的關(guān)系,主要參數(shù)有6種。①NONE——該段與其它段不連接,各段獨立,作為缺省參數(shù)。②PUBLIC——該段與其它段中用PUBLIC說明的同名段連接時,由低地址到高地址連接,組成一個邏輯段,運算時裝入同一物理段中,使用同一段地址。③STACK——連接時,將具有STACK類型的同名段連接成一個大的堆棧,由各模塊共享。運行時,SS和SP指向堆棧段的開始位置。容量為各個模塊中所設(shè)置的最大堆棧段容量。2023/1/1757

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令SEGMENT……ENDS⑵組合類型(CombineType)④COMMON——該段在連接時與其它模塊中的同名段有相同的起始地址,采用覆蓋的方式在存儲器中存放,連接長度為各分段中最大長度。⑤

MEMORY——表示由MEMORY說明的段在連接時被放在所有的段的最后(高地址端),若有幾個段都指出了MEMORY組合類型,其他段被認(rèn)為是COMMON類型。⑥AT表達式——表達式的值即該段的段地址,連接程序?qū)言摱窝b在由此段地址所指定的存儲區(qū)。

2023/1/1758

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令A(yù)SSUME用來定義源程序中的各個邏輯段,告訴匯編程序已定義的段地址將要放到哪個對應(yīng)的存儲器中。將邏輯段定義成代碼段、數(shù)據(jù)段、堆棧段、附加段。用戶可以設(shè)置多個邏輯段,但只允許4個邏輯段同時有效。ASSUMENOTHING取消前面由ASSUME所指定的段寄存器。例:ASSUMEES:NOTHING

2023/1/1759

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令A(yù)SSUME注意:代碼段和數(shù)據(jù)段是必須分配,附加段可以省略。對串指令,必須設(shè)置附加段作目標(biāo)串基址用,附加段也可用來存放數(shù)據(jù),增大數(shù)據(jù)段容量。ASSUME偽指令只將代碼段的段地址自動裝入CS寄存器中,而不能自動把其它段地址裝入相應(yīng)的段寄存器中,所以在代碼段的開始要有一段初始化程序完成這一工作。堆棧段:將段地址送入SS寄存器外,還要將棧頂偏移地址置入堆棧指針寄存器SP中。ASSUME偽指令只是告知匯編程序有關(guān)段寄存器與段的關(guān)系,并沒有給段寄存器賦予實際的初值,所以需要初始化段寄存器(即賦值)。2023/1/1760

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句段定義偽指令ORG格式:ORG表達式功能:給匯編程序設(shè)置位置指針,指定下面語句的起始偏移地址。表達式——給定的偏移地址值,表達式的計算結(jié)果必須是正整數(shù)。一般情況下段定義語句指出了段的起點,偏移地址為0,段內(nèi)各語句或數(shù)據(jù)的地址由段地址開始依次類推可確定。當(dāng)用戶要求指定某條指令或數(shù)據(jù)為指定地址時,可用ORG語句來改變,ORG語句可放在程序的任何位置。例用ORG指定代碼段地址

CODE SEGMENT

ORG 100H ASSUMECS:CODE,DS:DATA,……START: MOV AX,DATA ┇CODE ENDS2023/1/1761

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句例

ORG$+6;表示從當(dāng)前地址跳過6個字節(jié)

ABCDW1,2,$+4,0AH,0DH,$+3設(shè):ABC的偏移地址為1000H則:相當(dāng)于ABCDW1,2,0AHDW0DH,偽指令語句段定義偽指令ORG1008H(1004H+4),100DH(100AH+3)ABC在內(nèi)存中的存放結(jié)果如右圖。2023/1/1762

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令過程也稱作子程序。節(jié)省內(nèi)存空間,便于進行模塊化程序設(shè)計。格式:過程名PROC[類型];指令序列

RETN

過程名ENDP

功能:定義一個過程,主程序可以用CALL指令調(diào)用它。

過程名——過程的名字,不可缺省。類型——為NEAR或FAR。NEAR允許過程在段內(nèi)調(diào)用;FAR允許過程在段間調(diào)用,NEAR為缺省使用。PROC…ENDP2023/1/1763

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDPRETN——為過程內(nèi)部的返回指令。過程內(nèi)部至少有一條RET指令,可以在過程的任何位置,使過程返回到主程序。過程內(nèi)部可以有多個RET,表示此過程具有多個返回出口(在不同條件下,從不同出口返回)。N為彈出值,N必須為正偶數(shù),可以缺省。過程調(diào)用允許嵌套和遞歸調(diào)用。嵌套與遞歸的深度由堆棧段的容量決定。2023/1/1764

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDP參數(shù)→主﹑子程序互相傳遞的信息(可以是信息本身或信息的地址),分兩類:

入口參數(shù)→主程序提供給子程序以便加工處理的信息→原始數(shù)據(jù).

出口參數(shù)→經(jīng)子程序加工處理后送回給主程序的信息→處理結(jié)果.傳遞方式→為了傳遞參數(shù),約定一種主子雙方都能接受的參數(shù)傳遞方式(例如堆棧)主程序與子程序間的參數(shù)傳遞2023/1/1765

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDP主程序與子程序間的參數(shù)傳遞(通過堆棧)

入口和出口參數(shù)都放在堆棧中—傳遞單元在SS段.調(diào)用前,入口參數(shù)由主程序送入堆棧,子程序從堆棧中取得這些參數(shù)進行處理,處理后的結(jié)果又送到堆棧中.返回主程序后,主程序從堆棧取得結(jié)果.

這種方法不占用公共寄存器,也無需另外開辟單元,但因為子程序的返回地址也在堆棧中,所以一定要小心計算參數(shù)與地址,否則出錯.2023/1/1766

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDP主程序與子程序間的參數(shù)傳遞(通過堆棧)子程序要進行計算處理,自然要使用一些寄存器。子程序執(zhí)行后,某些寄存器的內(nèi)容會發(fā)生變化。如果主程序在這些寄存器中已經(jīng)存放了有用信息,則子程序返回后,主程序的運行勢必因原存放信息被破壞而出錯,所以要保護寄存器中內(nèi)容不被破壞→保護現(xiàn)場;在子程序處理后,恢復(fù)寄存器的內(nèi)容→恢復(fù)現(xiàn)場。保護現(xiàn)場﹑恢復(fù)現(xiàn)場的工作可以在主程序中完成,也可以在子程序中完成:2023/1/1767

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDP(1)子程序中保護(一般用此法)→在子程序開始,將子程序用到的所有寄存器的內(nèi)容保護起來,在返回之前恢復(fù)這些寄存器的內(nèi)容。如:某子程序要用到AX﹑BX﹑CX,可用進棧﹑出棧實現(xiàn)保護與恢復(fù)現(xiàn)場.

PUSHAXPUSHBX保護現(xiàn)場

PUSHCX﹕子程序工作部分

POPCXPOPBX恢復(fù)現(xiàn)場(注:先進后出)

POPAXRET2023/1/1768

4.28086/8088匯編語言的基本語法4.2.28086/8088匯編語言語句偽指令語句符號定義偽指令PROC…ENDP(2)在主程序中保護與恢復(fù)→在調(diào)用前保護某些寄存器的內(nèi)容,返回后再恢復(fù)。如:調(diào)用DEF子程序,主、子程序中均要使用AX,可用以下方法保護:

PUSHAX;保護現(xiàn)場

CALLDEFPOPAX;恢復(fù)現(xiàn)場子程序結(jié)構(gòu):保護現(xiàn)場→取入口參數(shù)進行加工處理→存結(jié)果至指定單元(作出口準(zhǔn)備)→恢復(fù)現(xiàn)場→返回2023/1/1769

4.38086/8088匯編語言程序設(shè)計基本方法

與高級語言編程相似,編寫匯編語言源程序也應(yīng)當(dāng)首先理解和分析題意與要求,選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)和算法,然后,再著手用匯編語言來實現(xiàn)。一個好的程序應(yīng)該具備的特點:⑴程序結(jié)構(gòu)模塊化,程序易讀,易調(diào)試及維護。⑵執(zhí)行速度快。⑶占用內(nèi)存空間小。接下來介紹8086/8088匯編語言程序設(shè)計基本方法2023/1/1770

4.38086/8088匯編語言程序設(shè)計基本方法常用四種程序結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),子程序結(jié)構(gòu)。設(shè)計匯編語言源程序的基本步驟:⑴分析問題:抽象數(shù)學(xué)模型,確定實現(xiàn)算法。⑵繪制程序流程圖。⑶分配存儲空間、工作單元:分配數(shù)據(jù)段、堆棧段、程序段的位置,確定寄存器主要作用。⑷編寫程序。⑸程序檢查,上機調(diào)試。⑹程序運行,結(jié)果分析。

在DOS環(huán)境下的8086/8088匯編語言程序結(jié)束時,通常用DOS的4CH號中斷調(diào)用,以便使程序控制返回DOS操作系統(tǒng)。

MOVAH,4CH INT21H2023/1/1771

4.38086/8088匯編語言程序設(shè)計基本方法基本程序設(shè)計順序結(jié)構(gòu)指令指針I(yè)P值線性增加,IP=IP+1分支結(jié)構(gòu)指令指針I(yè)P值受標(biāo)志位的影響而跳變影響標(biāo)志位的指令CMP、TEST、JXX循環(huán)結(jié)構(gòu)IP值受計數(shù)器CX中的值不為零而循環(huán)影響標(biāo)志的指令DEC2023/1/1772

4.38086/8088匯編語言程序設(shè)計基本方法程序的層次模塊結(jié)構(gòu)源程序堆棧段代碼段數(shù)據(jù)段初始化輸入運算處理輸出返回DOS數(shù)值運算非數(shù)值運算附加段2023/1/1773

4.38086/8088匯編語言程序設(shè)計基本方法4.3.1一個實例例:編程計算W=X+Y+24-Z,其中變量X、Y、Z均為32位數(shù)DATASEGMENTXDW19,86YDW3,25ZDW1987,325WDW2DUP(?)DATAENDSCODESEGMENT

ASSUMECS:CODEDS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XMOVDX,X+2

ADDAX,YADCDX,Y+2ADDAX,24

ADCDX,0

SUBAX,ZSBBDX,Z+2MOVW,AXMOVW+2,DX

MOVAH,4CHINT21HCODEENDS

END

START

2023/1/1774

4.38086/8088匯編語言程序設(shè)計基本方法

為了節(jié)省系統(tǒng)程序員的編程工作量與優(yōu)化程序結(jié)構(gòu),在DOS及BIOS中預(yù)先設(shè)計好了一系列的通用子程序,以便供DOS及BIOS調(diào)用。由于這種調(diào)用采用的是以中斷指令I(lǐng)NTn的內(nèi)部中斷方式(軟件中斷方式)進行的,所以常稱為DOS及BIOS中斷調(diào)用;又因為在一個中斷服務(wù)程序中往往包含有多個功能相對獨立的子程序,所以也將中斷調(diào)用稱為系統(tǒng)功能調(diào)用或中斷功能調(diào)用。4.3.2DOS及BIOS中斷調(diào)用2023/1/1775

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用DOS(DiskOperationSystem)是磁盤操作系統(tǒng),它包括4個核心程序:引導(dǎo)程序:負(fù)責(zé)將DOS內(nèi)的程序裝入內(nèi)存程序:負(fù)責(zé)對I/O設(shè)備管理程序:負(fù)責(zé)對文件管理與若干服務(wù)功能程序:負(fù)責(zé)命令處理ROMBIOS(BasicInputandOutSystem)是基本I/O系統(tǒng),它實際上是被固化在ROM芯片內(nèi)的一組程序,為計算機提供最低級、最直接的硬件控制,是硬件與軟件之間的一個接口,負(fù)責(zé)解決硬件的即時需求。2023/1/1776

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用一、中斷調(diào)用及中斷服務(wù)子程序返回DOS及BIOS中斷調(diào)用是為了節(jié)省編程工作量和優(yōu)化程序結(jié)構(gòu),在DOS及BIOS中預(yù)先設(shè)計好了一系列的通用子程序,供DOS及BIOS調(diào)用。中斷調(diào)用是一種內(nèi)部中斷方式,通過執(zhí)行INTn指令,使CPU根據(jù)中斷類型號(或向量號)“n”找中斷向量表中第n項作為此服務(wù)程序的入口。INTn指令的功能:當(dāng)前標(biāo)志寄存器的內(nèi)容壓棧,保存TF(跟蹤標(biāo)志);TF←0,IF←0;當(dāng)前斷點的CS值壓棧,當(dāng)前IP值壓棧;IP,CS←中斷向量第n項的4字節(jié)內(nèi)容。8086CPU,TF=1處于單步工作方式;否則,正常執(zhí)行程序2023/1/1777

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用一、中斷調(diào)用及中斷服務(wù)子程序返回

0~1FH,80H~F0H是ROMBIOS的中斷向量號;

20H~3FH是DOS的中斷向量號;

40H~7FH供用戶備用。通常,一個中斷服務(wù)程序有多種功能,對每一種功能用一個相應(yīng)的編號表示,稱為功能號。對應(yīng)某一中斷向量的某一功能,往往要指出其規(guī)定的輸入?yún)?shù),中斷服務(wù)完畢后,服務(wù)程序會有相應(yīng)的輸出。中斷向量分配2023/1/1778

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用一、中斷調(diào)用及中斷服務(wù)子程序返回中斷調(diào)用的步驟

①準(zhǔn)備入口參數(shù); ②功能號送AH; ③執(zhí)行INTn命令。當(dāng)中斷服務(wù)子程序返回時,要執(zhí)行IRET指令,其功能:

①棧頂彈出1個字到IP; ②棧頂彈出1個字到CS; ③棧頂彈出1個字到標(biāo)志寄存器F。2023/1/1779

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用二、DOS常用功能調(diào)用DOS的功能調(diào)用:指DOS為系統(tǒng)程序員和用戶提供的一組常用子程序如何使用的問題;DOS規(guī)定用中斷指令I(lǐng)NT21H

作為進入各功能調(diào)用子程序的總?cè)肟冢贋槊總€功能調(diào)用規(guī)定一個功能號以便進入相應(yīng)各子程序的入口。(子程序的入口參數(shù)及出口參數(shù)在每個功能調(diào)用的說明中可以查到)所有DOS提供給用戶的功能調(diào)用格式(包括ROMBIOS調(diào)用)都是一樣的,一般分為4個步驟:在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號;在指定的寄存器中設(shè)置入口參數(shù);用INT21H(或ROM-BIOS的中斷向量號)指令執(zhí)行功能調(diào)用;根據(jù)出口參數(shù)分析功能調(diào)用的執(zhí)行情況。2023/1/1780

4.38086/8088匯編語言程序設(shè)計基本方法4.3.2DOS及BIOS中斷調(diào)用1.返回DOS

向量號:21H功能號:4CH功能:使系統(tǒng)結(jié)束程序運行后返回DOS狀態(tài)。

例 MOVAH,4CH;(

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論