




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、本章要點 匯編語言格式 偽指令 宏指令 系統(tǒng)功能調(diào)用 第四章第四章 匯編語言語法和匯編語言語法和DOS功能調(diào)用功能調(diào)用4.3 4.3 偽指令偽指令4.4 4.4 宏指令宏指令4.5 DOS4.5 DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用4.2 4.2 匯編語言基本語法匯編語言基本語法4.1 4.1 匯編語言程序基本格式匯編語言程序基本格式目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束14.1匯編語言程序的格式匯編語言程序的格式一、 匯編語言概述 機器語言機器語言是計算機能直接識別和執(zhí)行的語言,用一串“0”、“1”數(shù)字代碼表示。 匯編語言匯編語言是一種符號語言,它用某種容易記憶的英文縮寫去表示機器指令操作碼(指令助記符
2、),用人們熟悉的數(shù)碼及數(shù)學(xué)符號等表示操作數(shù)、地址。二、 匯編語言源程序和匯編程序 用匯編語言編寫的程序稱為匯編語言源程序匯編語言源程序,或簡稱為源程序源程序。對程序員來講,符號語言簡單直觀、便于記憶,比二進制數(shù)表示的機器語言方便了許多。但計算機只“認識”機器語言而不認識這些文字、數(shù)字、符號,為此人們創(chuàng)造了一種程序,叫匯編程序。如同英漢之間對話需要“翻譯”一樣,匯編程序的作用相當于一個“翻譯員”,自動地把匯編語言源程序翻譯成機器語言。該過程稱為匯編匯編,完成匯編任務(wù)的程序稱為匯編程序匯編程序,相應(yīng)形成的機器語言程序稱為目標程序目標程序。匯編后形成的目標程序雖然是二進制代碼,但還不能直接上機運行,
3、必須經(jīng)過連接程序(LINK)連接,將庫文件或其它目標文件連接到一起形成可執(zhí)行文件后,才能送入計算機執(zhí)行。匯編語言程序從建立到匯編、連接形成可執(zhí)行程序的整個過程如圖所示。 MyProg.ASM匯編程序編輯程序MyProg.OBJ連接程序MyProg.EXE目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束2例4.1試求小于100的所有非零偶數(shù),并把結(jié)果存入以BUFF開始的內(nèi)存區(qū)1 MY_DATA SEGMENT ;定義數(shù)據(jù)段2 BUFF DB 50 DUP (?) ;設(shè)置緩沖區(qū)3 MY_DATA ENDS ;定義數(shù)據(jù)段結(jié)束4 MY_CODE SEGMENT ;定義代碼段5 ASSUME CS:MY_CODE,DS
4、:MY_DATA;規(guī)定CS和DS的內(nèi)容6 START: MOV AX, MY_DATA ;DS初始化為MY_DATA7 MOV DS,AX 8 MOV AL,2 ;置循環(huán)初始值99 LEA BX,BUFF 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束310 LLP: MOV BX,AL ;循環(huán)體11 INC AL12 INC AL 13 CMP AL,100 ;循環(huán)控制14 JNZ LLP15 INT 20H ;返回DOS16 MY_CODE ENDS ;代碼段結(jié)束17 END START ;整個程序結(jié)束 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束4三、三、 匯編語言的特點匯編語言的特點1. 執(zhí)行速度快2. 程序短
5、小3. 可以直接控制硬件4. 可以方便地編譯5. 輔助計算機工作者掌握計算機體系結(jié)構(gòu)(1)段的結(jié)構(gòu)段的結(jié)構(gòu) NAME1SEGMENT;段的起始;段的起始 語句語句1 ; 語句語句2 ; n條語句序列構(gòu)成的語句體條語句序列構(gòu)成的語句體 語句語句n ; NAME1ENDS ;段的結(jié)束;段的結(jié)束 NAME2SEGMENT ;段的起始;段的起始 語句語句1 ; 語句語句2 ; m條語句序列構(gòu)成的語句體條語句序列構(gòu)成的語句體 語句語句m ; NAME2ENDS ;段的結(jié)束;段的結(jié)束END ;源程序結(jié)束;源程序結(jié)束目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束5(2)語句的結(jié)構(gòu)3種基本語句類型: 指令語句 偽指令語句
6、宏指令語句語句一般有4個部分組成,即:標號或名字 操作碼 操作數(shù) ;注釋標號或名字:這是一個任選部分,在語句之首 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束64.2 匯編語言中的基本數(shù)據(jù)匯編語言中的基本數(shù)據(jù) 4.2.1常量、變量與標號常量、變量與標號 1. 常量常量 數(shù)值常量 匯編語言中的數(shù)值常量可以是二進制、八進制、十進制或十六進制數(shù),書寫時用加后綴的方式標明即可,對于十進制數(shù)可以省掉后綴。對于十六進制數(shù),當以AF開頭時,前面加數(shù)字0,以避免和名字混淆。 字符串常量 包含在單引號中的若干個字符形成字符串常量,字符串在計算機中存儲的是相應(yīng)字符的ASCII碼。如A的值是41H,AB的值是4142H等。 符
7、號常量 常量用符號名來代替就是符號常量。 用COUNT EQU 3或COUNT=3定義后COUNT就是一個符號常量,與數(shù)值常量3等價。 2. 變量變量 變量在數(shù)據(jù)段、附加數(shù)據(jù)段或堆棧段中定義,后面不跟冒號。它也可以用LABEL或EQU偽操作來定義。變量經(jīng)常在操作數(shù)字段出現(xiàn)。它也有段、偏移及類型三種屬性。 段屬性段屬性:定義變量的段起始地址,此值必須在一個段寄存器中。 偏移屬性偏移屬性:變量的偏移地址是從段的起始地址到定義變量的位置之間的字節(jié)數(shù)。 類型屬性類型屬性:變量的類型屬性定義該變量所保留的字節(jié)數(shù)。如BYTE(DB,1個字節(jié)長)、WORD(DW,2個字節(jié)長)、DWORD(DD,4個字節(jié)長)
8、、FWORD(DF,6個字節(jié)長)、QWORD(DQ,8個字節(jié)長)、TBYTE(DT,10個字節(jié)長),這一點在數(shù)據(jù)定義偽操作中已作了說明。 在同一個程序中,同樣的標號或變量的定義只允許出現(xiàn)一次,否則匯編程序會指示出錯。目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束73. 標號標號 標號在代碼段中定義,后面跟著冒號:,它也可以用LABEL或EQU偽操作來定義。此外,它還可以作為過程名定義。標號經(jīng)常在轉(zhuǎn)移指令或CALL指令的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)向地址。標號有3種屬性:段、偏移及類型。 段屬性:段屬性:定義標號的段起始地址,此值必須在一個段寄存器中,而標號的段則總是在CS寄存器中。 偏移屬性偏移屬性:標號的偏
9、移地址是從段起始地址到定義標號的位置之間的字節(jié)數(shù)。對于16位段是16位無符號數(shù);對于32位段則是32位無符號數(shù)。 類類型屬性型屬性:用來指出該標號是在本段內(nèi)引用還是在其他段中引用的。如是在段內(nèi)引用的,則稱為NEAR。對于16位段,指針長度為2字節(jié);對于32位段,指針長度為4字節(jié)。如在段外引用,則稱為FAR。對于16位段,指針長度為4字節(jié)(段地址2字節(jié),偏移地址2字節(jié));目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束84.2.2運算符與表達式運算符與表達式1. 算術(shù)運算符算術(shù)運算符 算術(shù)運算符有:(加)、(減)、*(乘)、/(除)、MOD(取余除)。 MOV AL,4*85 ;數(shù)值表達式 MOV SI,OFF
10、SETBUF12 ;地址表達式2. 邏輯運算符邏輯運算符 邏輯運算符有:AND(與)、OR(或)、XOR(異或)、NOT(非)。 邏輯運算符只能用于數(shù)值表達式中,不能用于地址表達式中。邏輯運算符和邏輯運算指令是有區(qū)別的。邏輯運算符的功能在匯編階段完成,邏輯運算指令的功能在程序執(zhí)行階段完成。 在匯編階段,指令A(yù)ND AL,78H AND 0FH等價于指令A(yù)ND AL,08H。3. 關(guān)系運算符關(guān)系運算符 關(guān)系運算符有:EQ(相等)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)NE(不等于)。 關(guān)系運算符要有兩個運算對象。兩個運算對象要么都是數(shù)值、要么都是同一個段內(nèi)的地址。運算結(jié)果
11、為真時,表示為0FFFFH,運算結(jié)果為假時,表示為0000H。 指令 MOV BX,32 EQ 45 等價于 MOV BX,0 指令 MOV BX,56 GT 30 等價于 MOV BX,0FFFFH 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束94. 取值運算符取值運算符 變量和標號具有段屬性、偏移屬性和類型屬性等,要從變量和標號中析出它們的段地址、偏移地址,變量的類型、元素的個數(shù)和占用內(nèi)存的大小等,就要使用取值運算符(又稱分析運算符)。這些運算符是SEG、OFFSET、TYPE、LENGTH、SIZE。 例如:例如:SCORE DW 30 DUPSCORE DW 30 DUP(0 0) 定義了一個變量
12、,定義了一個變量,TYPE SCORETYPE SCORE為為2 2,LENGTH SCORELENGTH SCORE是是3030,而,而SIZE SCORESIZE SCORE是是6060。目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束105. 合成運算符合成運算符 也稱為修改屬性運算符,它能修改變量或標號的原有的類型屬性并賦予新的類型。這類運算符是PTR和THIS。 PTR的格式:的格式: 類型 PTR 表達式 其中類型可以是BYTE、WORD、DWORD、NEAR、FAR,表達式是被修改的變量或標號。 例如NUM語句 NUM DB 1,3,5 , 7 定義為字節(jié)類型,若要將NUM開始兩個字節(jié)的數(shù)據(jù)裝入
13、AX,指令應(yīng)為 MOV AX,WORD PTR NUM THIS的格式:的格式: 新符號名 EQU THIS 類型 原符號名 類型 參數(shù), THIS的功能與PTR相同,只是格式不同。THIS語句中建立一個新的符號名并指定它有THIS后的類型,而新符號名指向下一語句的原符號名的內(nèi)存地址。例如前面用PTR修改NUM類型可用下面的THIS語句代替。 DNUM EQU THIS WORD NUM DB 1,3,5,7 其中DNUM是字型并指向NUM所指的內(nèi)存單元,DNUM的存取以字為單位,而NUM仍是字節(jié)類型。目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束111. 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 格式格式: 變量 助
14、記符 操作數(shù),操作數(shù) ;注釋 助記符字段說明所用偽指令的助記符,也即偽指令,說明所定義的數(shù)據(jù)類型。常用的有以下幾種: DBDB偽指令用來定義字節(jié),其后的每個操作數(shù)都占有一個字節(jié)(8位)。 DWDW偽指令用來定義字,其后的每個操作數(shù)占有一個字(16位,其低位字節(jié)在第一個字節(jié)地址中,高位字節(jié)在第二個字節(jié)地址中)。 DDDD偽指令用來定義雙字,其后的每個操作數(shù)占有兩個字(32位)。 DFDF偽指令用來定義6個字節(jié)的字,其后的每個操作數(shù)占有48位,可用來存放遠地址。這一偽指令只能用于386及其后繼機型中。 DQDQ偽指令用來定義4字,其后的每個操作數(shù)占有4個字(64位),可用來存放雙精度浮點數(shù)。 DT
15、DT偽指令用來定義10個字節(jié),其后的每個操作數(shù)占有10個字節(jié),形成壓縮的BCD碼。4.3 偽指令語句偽指令語句目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束12例4.2 操作數(shù)是常數(shù)、表達式、字符串數(shù)據(jù)的定義 DATA1 DB 10H,52H DATA2 DW 1122H,34H DATA3 DD 5*20H,0FFEEH DATA4 DB HELLO例4.3 操作數(shù)用“?”定義不確定值的變量,用DUP來定義重復(fù)變量,不確定值的變量一般用作保留存儲空間,以便存放運算結(jié)果。 DATA1 DB ? DATA2 DW 0D55H, ? DATA3DB 5 DUP(0) DATA4 DW 10 DUP(?) DAT
16、A5 DB 4 DUP(1,2 DUP(20) 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束1310H10H52H52H22H22H11H11H34H34H00H00HA0HA0H00H00H00H00H00H00HEEHEEHFFHFFH00H00H00H00H48H48H45H45H4CH4CH4CH4CH4FH4FHDATA1DATA1DATA2DATA2DATA3DATA3DATA4DATA4圖圖4.1 4.1 例例4.24.2的匯編結(jié)果的匯編結(jié)果圖圖4.2 4.2 例例4.34.3的匯編結(jié)果的匯編結(jié)果?55H55H0DH0DH00H00H00H00H00H00H00H00H00H00H?01H0
17、1H14H14H14H14HDATA1DATA1DATA2DATA2DATA3DATA3DATA4DATA4DATA5DATA5重復(fù)重復(fù)4 4次,次,共共1212個字節(jié)個字節(jié)共共2020個字節(jié)個字節(jié)?圖圖4.3 4.3 例例4.44.4的匯編結(jié)果的匯編結(jié)果00H00H01H01H00H00H02H02H00H00H03H03H00H00H30H30HDATA1DATA1DATA2DATA2DATA3DATA3ONEONE的偏移地址的偏移地址TWOTWO的偏移地址的偏移地址THREETHREE的偏移地址的偏移地址THREETHREE的段地址的段地址目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束14例4.4 當
18、前已有變量ONE,標號TWO和THREE,用這些地址表達式定義新變量 DATA1 DW ONE DATA2 DW TWO DATA3 DD THREE 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束152. 標識符賦值與解除偽指令標識符賦值與解除偽指令 等值偽指令等值偽指令EQUEQU 格式:EQU 例如: CONSTANTEQU256 ;將數(shù)256賦以符號名 BEQUBP+8 ;變址引用賦以符號名B 等號偽指令等號偽指令 = = (與EQU類似,但允許重復(fù)定義) 例如: EMP=6 或 EMP EQU 6 定義符號名偽指令定義符號名偽指令LABELLABEL: LABEL偽指令可以定義變量或標號的類型。
19、格式: LABEL ; 解除定義偽指令解除定義偽指令PURGEPURGE:解除指定符號的定義。 格式:PURGE 解除符號定義后,可用EQU重新定義。 例如: Y1EQU7;定義Y1的值為7 PURGEY1;解除Y1的定義 Y1EQU36;重新定義Y1的值為36目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束163. 段定義偽指令段定義偽指令 SEGMENT和ENDS 段定義偽指令。該指令能對程序分段。其格式為: 段名 SEGMENT 定位類型組合類型類別 段名 ENDS ASSUME 段寄存器指派偽指令。格式為: ASSUME 段寄存器:段名,段寄存器:段名 例如:ASSUME CS:CODE,DS:DAT
20、A,ES:DATA,SS:STACK ORG 移動地址指針的偽指令。其格式為: ORG 常量表達式 例如:ORG 2000H4. 過程定義偽指令過程定義偽指令PROC和和ENDP 過程名 PROC NEAR/FAR RET 過程名 ENDP 功能:定義一個由主程序可以用CALL指令調(diào)用的過程。目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束175、 程序開始與結(jié)束偽指令語句共有4條偽指令語句:NAME、TITLE、ORG和END。1)目標模塊命名偽指令語句 格式:NAME 程序名 TITLE 文本名 功能:為源程序目標模塊賦一個程序名目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束182)定位偽指令語句 格式:ORG 表達式
21、 例4.8 用ORG指定數(shù)據(jù)段和代碼段地址。 DATA SEGMENT X1 DW 20H,60H, ORG 100H X2 DB 10H,20H,30H ORG 200H X3 DW 1234H, 4321H DATA ENDSCODE SEGMENT ORG 100H ASSUME CS:CODE,DS:DATA START: MOV AX,DATA CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束193)程序結(jié)束偽指令語句格式: END 標號名例4.9 程序結(jié)束偽指令語句的應(yīng)用 CODE SEGMENT START:MOV AX,BX MOV CX,12H CODE ENDS END
22、START目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束206、 方式定義偽指令語句格式: .8086 .3867、 結(jié)構(gòu)定義偽指令語句有三條語句:結(jié)構(gòu)定義偽指令,結(jié)構(gòu)存儲分配和預(yù)置偽指令及 結(jié)構(gòu)使用偽指令。 1)結(jié)構(gòu)定義偽指令語句格式:結(jié)構(gòu)名 STRUC 數(shù)據(jù)變量序列 結(jié)構(gòu)名 ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束21例4.10 定義一個數(shù)據(jù)表格TAB的結(jié)構(gòu) TAB STRUC DA1 DB ABCD DA2 DW ? DA3 DW SEG LIS DA4 DW 2 DUP(0) DA5 DW 1234H, 4321H TAB ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束222) 結(jié)構(gòu)存儲分配和預(yù)置偽指令語
23、句格式:結(jié)構(gòu)變量名 結(jié)構(gòu)名 元素值,元素值 結(jié)構(gòu)變量名 結(jié)構(gòu)名 N DUP(元素值,元素值)例4.11 對例4.10中的TAB結(jié)構(gòu)進行存儲空間分配和預(yù)置,形成4個結(jié)構(gòu)變量。DATA1 TAB DATA2 TAB 1234DATA3 TAB ,34H,SEG PLTDATA4 TAB 5 DUP(WXYZ,22H) 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束233) 結(jié)構(gòu)使用偽指令語句 格式:結(jié)構(gòu)變量名字段變量 設(shè)當前數(shù)據(jù)段基址為1000H,結(jié)構(gòu)變量DATA1的偏移地址為100H,則例4.11中的4個結(jié)構(gòu)變量在存儲器中的地址分配如圖4-4所示。 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束24(a a)DATA1 T
24、AB DATA1 TAB (c c)DATA3 TAB DATA3 TAB SEG PLT(b b) DATA2 TAB DATA2 TAB (d d)DATA4 TAB 5 DUP(WXYZDATA4 TAB 5 DUP()22H)AABBCCDD? ? ?SEG LISSEG LIS低低SEG LISSEG LIS高高00H00H00H00H00H00H00H00H34H34H12H12H21H21H43H43H10100H10100H(a a)11223344? ? ?SEG LISSEG LIS低低SEG LISSEG LIS高高00H00H00H00H00H00H00H00H34H3
25、4H12H12H21H21H43H43H10110H10110H(b b)AABBCCDD34H34H00H00HSEG PLTSEG PLT低低SEG PLTSEG PLT高高00H00H00H00H00H00H00H00H34H34H12H12H21H21H43H43H10120H10120H(c c)WWXXYYZZ22H22H00H00HSEG LISSEG LIS低低SEG LISSEG LIS高高00H00H00H00H00H00H00H00H34H34H12H12H21H21H43H43H10130H10130H(d d)重重復(fù)復(fù)5 5次次圖圖4.4 4.4 例例4.104.10
26、中的中的4 4個結(jié)構(gòu)變量的存儲分配和預(yù)置個結(jié)構(gòu)變量的存儲分配和預(yù)置目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束258、 分組偽指令語句格式:組名 GROUP 段1,段2,例4.12 GROUP1 GROUP SEG1,SEG2,SEG3ASSUME DS:GROUP1MOV AX,GROUP1MOV DS,AXMOV BX,GRPUP1:VAR1 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束269、 其它偽指令語句(l)外部偽指令語句格式: PUBLIC 名稱1,名稱2,EXTRN 名稱1:類型,名稱2:類型, 例4.13 用EXTRN和PUBLIC語句實現(xiàn)模塊間標識符的交叉訪問模塊1 EXTRN DATA2:BYT
27、E, SUBTR1:NEAR PUBLIC TABLE, DATA1 DSEG SEGMENT TABLE DB 100 DUP(?) DATA1 DW ? CODE SEGMENTCODE SEGMENT 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束27DSEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DSEG MOV AX, DSEG MOV DS, AX MOV AL, DATA1 CALL SUBTR1 MOV AX, SEG DATA2 MOV ES, AX MOV BX, ES:DATA2 CODE ENDS END目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束28模塊2 E
28、XTRN TABLE:BYTE PUBLIC SUBTR1, DATA2 DSEG SEGMENT DATA2 DB ? DSEG ENDS CODE SEGMENT SUBTR1: CODE ENDS END目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束29(2)對準偽指令語句格式:EVEN 例4.14 EVEN直接放在某一語句前,匯編程序匯編時就會完成將地址調(diào)整在偶地址上。DATA SEGMENT ORG 100H A1 DB 0DH EVEN A2 DW 100 DUP(?)DATA ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束30(3)條件匯編偽指令語句一般格式是: IF ;如果條件成立 ELSE ;
29、否則 END IF ;結(jié)束條件匯編語句 IF有多種形式,它們是:IF 操作數(shù) IFE 操作數(shù)IFDEF 標號或變量 IFNDEF 標號或變量IFB IFNB IFIDN , IFDIF ,IF1 IF2目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束314.4 4.4 匯編語言中的表達式匯編語言中的表達式表達式-運算對象和運算符組成。匯編語言中有類運算符,即:算術(shù)運算符;邏輯運算符;關(guān)系運算符;分析運算符;修改屬性運算符;其它運算符 。 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束32、算術(shù)運算符算術(shù)運算符有:加()、減()、乘(*)、除()、取模運算(MOD)、左移(SHL)和右移(SHR)。取模運算是取兩數(shù)相除的余數(shù)
30、,對象必須為正整數(shù)。例如 92 MOD 16 結(jié)果為12(相當于取低4位的值) 97H MOD 20H 結(jié)果為23(相當于取低5位的值)目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束33例4.15 包含乘法和減法算術(shù)運算符的表達式 DATA SEGMENT ARRAY DB 1,2,3,4,5,6 TRY DB 20 DATA ENDS CODE SEGMENT MOVBX, 30*5 MOVCX, (TRY-ARRAY) CODE ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束34例4.16 源程序包含除法、減法、模運算和移位運算的表達式DATA SEGMENTKA EQU800DATA ENDSCODE S
31、EGMENT MOVBX, KA-80 MOVAX, KA MOD 100 MOVCX, KA/100 MOVDH, 01100100B SHR 2 CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束352、邏輯運算符邏輯運算符有:與(AND)、或(OR)、非(NOT)和異或(XOR) 例 4.17 AND、OR、NOT、XOR邏輯運算的表達式DATA SEGMENTPORT EQU 81HDATA ENDSCODE SEGMENT MOV AL,NOT 0FFH MOV BL,8CH AND 73H MOV AH,8CH OR 73H MOV CH,8CH XOR 73H 目錄目錄上頁上頁下
32、頁下頁結(jié)束結(jié)束36 IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束373、關(guān)系運算符關(guān)系運算符有:相等 EQ、不等 NE、小于 LT、大于 GT、小于 或等于 LE、大于或等于。 4、分析運算符分析運算符有:OFFSET、SEG、TYPE、LENGTH、SIZE(1)OFFSET 格式:OFFSET 變量或標號 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束38例4.18 用OFFSET返回標號或變量偏移地址值的表達式DATA SEGMENT DAT1 DB 81H DATA ENDSCODE SEGMENT MOV S
33、I,OFFSET LAB1 LAB1: MOV BX,OFFSET DAT1 CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束39(2)SEG 格式:SEG 變量或標號(3)TYPE 格式:TYPE 變量或標號 表4-1 TYPE運算符返回值 變 量標 號類型DBDWDDDQDTNEARFAR返回值124810-1-2目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束40例 4.19 TYPE加在變量和標號前的表達式DATA SEGMENTAA1 DB 20H, 30HAA2 DW 0438HAA3 DD ?DATA ENDSCODE SEGMENTLL1: MOV AH,TYPE AA1 MOV BH,TY
34、PE AA2 ADD AL,TYPE AA3 MOV BL,TYPE LL1CODE ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束41(4) LENGTH格式:LENGTH 變量例 4.20 LENGTH加變量的表達式DATA SEGMENTBB1 DW 100 DUP (?)BB2 DW 1,2,3BB3 DB A B C DDATA ENDSCODE SEGMENT MOV CX, LENGTH BB1 MOV BL, LENGTH BB2 MOV AL, LENGTH BB3CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束42(5) SIZE格式:SIZE 變量把例4.20中含有LENG
35、TH表達式改為SIZE表達式,即: MOV CX, SIZE BB1 MOV BL, SIZE BB2 MOV AL, SIZE BB3目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束435、修改屬性運算符(綜合運算符)修改屬性運算符有:段操作符、PTR、THIS、HIGH、LOW、 SHORT (1) 段操作符 格式: 段前綴 : 變量或地址表達式(2) PTR 格式: 類型 PTR 變量 距離 PTR 標號目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束44例 4.21 帶PTR表達式的變量DATA SEGMENTCC1 DB 16H,36HCC2 DW 1122H,3344HDATA ENDSCODE SEGMENTL
36、L1: MOV AX,WORD PTR CC1 MOV BL,BYTE PTR CC2 MOV BYTE PTR BX, 10H MOV WORD PTR BX, 10H JMP FAR PTR LL1 CODE ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束45(3) THIS格式: 變量 EQU THIS 類型 標號 EQU THIS 距離 例如: DATA1 EQU THIS BYTE TABLE DW 200 DUP(?)又如: LL1 EQU THIS FAR MOV AX,100 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束46(4) SHORT 格式:SHORT 標號(5) HIGH和 LOW它
37、們稱為字節(jié)分離運算符 格式: HIGH 變量或標號 LOW 變量或標號目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束47 例4.22 帶HIGH和 LOW表達式的變量DATA SEGMENTBB1 EQU 1234HBB2 EQU 0A0B0HDATA ENDSCODE SEGMENT MOV AH, HIGH BB1 MOV BL, LOW BB2CODE ENDS目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束486、其它運算符 7、注意點: (1)注意表達式中各運算符和操作符的優(yōu)先級 (2)注意數(shù)制統(tǒng)一 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束494. 5 指令語句指令語句的格式: 標號: 前綴指令 助記符 操作數(shù) ;(注釋
38、)(1)立即尋址和直接尋址的表示形式例4.23 立即尋址和直接尋址在表示形式上的區(qū)別DATA SEGMENTBB1 EQU 1234HBB2 DW 0A0B0HDATA ENDSCODE SEGMENT MOV AX, BB1 MOV BX, BB2 MOV CX, BB1CODE ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束50(2) 基址寄存器加變址寄存器尋址的表示形式有兩種表示形式: MOV AX,BXSI MOV AX,BX+SI(3) 相對寄存器尋址的表示形式目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束51例4.24 相對寄存器尋址的兩種表示形式DATA SEGMENTMYDAT DB 100 D
39、UP(?)DATA ENDSCODE SEGMENT MOV AX, MYDATBX MOV AX, MYDAT+BX MOV CX, MYDATBXSI MOV CX, MYDAT+BX+SI CODE ENDS 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束524 4.6 宏指令語句及其使用宏指令宏指令將源程序中多次重復(fù)使用的程序段用宏指令來代替將源程序中多次重復(fù)使用的程序段用宏指令來代替1. 宏指令定義宏指令定義 宏指令名 MACRO 形式參數(shù)1,形式參數(shù)2, 形式參數(shù)N ;宏指令體(宏體) ENDM2. 宏調(diào)用宏調(diào)用 宏指令名 實際參數(shù)1,實際參數(shù)2, 實際參數(shù)N 3. 宏展開宏展開 目錄目錄上頁上
40、頁下頁下頁結(jié)束結(jié)束53例4.25 無形式參數(shù)的宏定義、宏調(diào)用及宏展開宏定義:PUSHAB MACRO PUSH AX PUSH BX ENDM宏調(diào)用: PUSHAB宏展開: + PUSH AX + PUSH BX 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束54例4.26 帶形式參數(shù)的宏定義、宏調(diào)用及宏展開宏定義: LDSF MACRO PR,VAR, N,REG,CC MOV PR,VAR MOV AX,PR MOV CL, N S&CC REG, CL ENDM宏調(diào)用1: LDSF SI,WVAR1,4,AX,AR宏調(diào)用2: LDSF DI,WVAR2,3,BX,AL宏展開1: +MOV SI,WVA
41、R1 +MOV AX,SI+MOV CL, 4+SAR AX, CL宏展開2: +MOV DI,WVAR2 +MOV AX,DI+MOV CL, 3 +SAL BX, CL 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束554、宏嵌套(1)宏定義中使用宏調(diào)用例2.27 設(shè)在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試計算X+YZ,并要求保護所有使用的寄存器。 宏定義:DBF MACRO P, Q MOV BX, P MOV AX,Q ADD AX, BX ENDMDBFS MACRO X1, X2, X3 PUSH AX目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束56 PUSH BX DBF X1, X2 MOV X3,
42、AX POP BX POP AX ENDM宏調(diào)用: DBFS X,Y,Z宏展開: +PUSH AX +PUSH BX +MOV BX, X +MOV AX,Y +ADD AX, BX +MOV Z, AX +POP BX +POP AX 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束57(2)宏定義中包含宏定義 例2.28 設(shè)在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試共用一個宏定義,計算X+YZ、X-YZ、X AND YZ,并要求保護所有使用的寄存器。宏定義:DEFM MACRO MACN,OPENMACN MACRO A,B,C PUSH AX MOV AX,A OPEN AX,B MOV C,AX PO
43、P AX ENDM ENDM目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束58宏調(diào)用定義加法: DEFM ADDIT,ADD宏展開:+ADDIT MACRO A,B,C PUSH AX MOV AX,A ADD AX,B MOV C,AX POP AX ENDM宏調(diào)用定義減法: DEFM SUBT,SUB宏展開: +SUBT MACRO A,B,C PUSH AX MOV AX,A SUB AX,B 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束59 MOV C,AX POP AX ENDM宏調(diào)用定義邏輯“與”: DEFM ANDT,AND宏展開: +ANDT MACRO A,B,C PUSH AX MOV AX,A A
44、ND AX,B MOV C,AX POP AX ENDM宏調(diào)用實現(xiàn)X+YZ: ADDIT X,Y,Z宏展開: +PUSH AX目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束60 +MOV AX,X +ADD AX,Y +MOV Z,AX +POP AX宏調(diào)用實現(xiàn)X-YZ: SUBT X,Y,Z宏展開:+PUSH AX +MOV AX,X +SUB AX,Y +MOV Z,AX +POP AX宏調(diào)用實現(xiàn) X AND YZ: ANDT X,Y,Z目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束61宏展開: +PUSH AX +MOV AX,X +AND AX,Y +MOV Z,AX +POP AX5、宏定義中的標號與變量 定義
45、局部標號的格式: LOCAL 參數(shù)1、參數(shù)2、參數(shù)n 例4.29 延時宏指令語句 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束62宏定義: DELAY MACRO VALUE1,VALUE2 LOCAL AGAIN1,AGAIN2 PUSH AX PUSH CX MOV CX,VALUE1 AGAIN1: MOV AX,VALUE2 AGAIN2: DEC AX JNZ AGAIN2 LOOP AGAIN1 POP CX POP AX ENDM宏調(diào)用1: DELAY 1234H, 5678H目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束63宏調(diào)用2: DELAY 9ABCH, 0DEF0H宏展開1: DELAY 123
46、4H, 5678H PUSH AX PUSH CX MOV CX,1234H ?0000: MOV AX,5678H ?0001: DEC AX JNZ ?0001 LOOP ?0000 POP CX POP AX宏展開2: DELAY 9ABCH, 0DEF0H PUSH AX PUSH CX目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束64 MOV CX,09ABCH ?0002: MOV AX,0DEF0H ?0003: DEC AX JNZ ?0003 LOOP ?0002 POP CX POP AX 6、其它宏指令語句 (1)取消宏指令語句格式:PURGE 宏指令名1,宏指令名2宏指令名n目錄目錄
47、上頁上頁下頁下頁結(jié)束結(jié)束65(2) 重復(fù)執(zhí)行宏指令語句 格式: REPT 表達式 宏體 ENDM例4.30 將1到10分配給連續(xù)的10個存儲單元, X=0 REPT 10X=X+1 DB X ENDM宏展開后: +DB 1 +DB 2 +DB 10目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束66(3)帶參數(shù)的重復(fù)執(zhí)行宏指令格式: LRP 形式參數(shù) 參數(shù)表宏體ENDM 例如:LRP REGAX,BX,CX,DXPUSHREGENDM宏展開后:+PUSHAX +PUSHBX +PUSHCX+PUSHDX 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束67(4)帶字符串重復(fù)執(zhí)行宏指令格式: LRPC 形式參數(shù) 字符串宏體EN
48、DM例如:LRPCX,HELLO DBXENDM宏展開后:+DB48H+DB45H+DB4CH +DB4CH +DB4FH 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束687、宏指令與子程序的區(qū)別主要區(qū)別在以下幾個方面:(1)宏指令調(diào)用比子程序調(diào)用執(zhí)行速度快。(2)過程調(diào)用使用CALL語句實現(xiàn),在CPU執(zhí)行時進行處理,而宏指令調(diào)用由宏匯編軟件MASM中的宏處理程序來處理。(3)子程序比宏指令節(jié)省內(nèi)存空間。(4)宏指令比子程序靈活。目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束694.7 DOS系統(tǒng)功能調(diào)用1、常用的DOS軟中斷(1)程序結(jié)束軟中斷 INT 20H調(diào)用格式舉例: INT 20H INT 21H該軟中斷又有
49、三種情況:無返回程序結(jié)束、程序結(jié)束并駐留和帶 返回程序結(jié)束。無返回程序結(jié)束的調(diào)用格式:MOV AH,0INT 21H目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束70程序結(jié)束并駐留的調(diào)用格式舉例:MOV AH,31HMOV AL,1MOV DX,400HINT 21H 帶返回程序結(jié)束的調(diào)用格式舉例:MOV AH,4CHMOV AL,1INT 21H 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束71 INT 27H調(diào)用格式舉例:MOV DX,XXINT 27H(2)磁盤扇區(qū)讀與寫 調(diào)用格式舉例:MOV AL,0 MOV CX,3 MOV DX,4 MOV BX,2000H INT 25H目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束7
50、22、 DOS系統(tǒng)功能調(diào)用DOS系統(tǒng)功能可分為三個方面:設(shè)備管理、文件管理和目錄管理設(shè)備管理包括:鍵盤輸入、顯示輸出、設(shè)置磁盤緩沖器、選擇當 前盤等功能調(diào)用;文件管理包括:建立文件、打開文件、讀寫文件、刪除文件等 功能調(diào)用;目錄管理包括:查找目錄項、更改目錄項、建立子目錄、刪除子 目錄等功能調(diào)用。 目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束73表4-2 常用的DOS軟中斷 軟中斷指令功能入口參數(shù)出口參數(shù)INT21H程序正常退出無無INT21H系統(tǒng)功能調(diào)用AH功能號,相應(yīng)入口號相應(yīng)出口號INT22H結(jié)束退出INT23HCtrl+Break處理INT24H出錯退出INT25H讀磁盤AL驅(qū)動器號CX讀入扇區(qū)數(shù)DX起始邏輯扇區(qū)號DS:BX內(nèi)存緩沖區(qū)地址CF0成功CF1出錯INT26H寫磁盤AL驅(qū)動器號CX寫入扇區(qū)數(shù)DX起始邏輯扇區(qū)號DS:BX內(nèi)存緩沖區(qū)地址CF0成功CF1出錯INT27H駐留下退出DS:BX程序長度目錄目錄上頁上頁下頁下頁結(jié)束結(jié)束74(1)顯示功能調(diào)用 單字符顯示調(diào)用格式舉例:
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論