微機原理第4章匯編語言語法和DOS功能調用.ppt
《微機原理第4章匯編語言語法和DOS功能調用.ppt》由會員分享,可在線閱讀,更多相關《微機原理第4章匯編語言語法和DOS功能調用.ppt(74頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第4章 匯編語言語法和DOS功能調用 教學內容 4.1 數(shù)據(jù)類型及其存儲規(guī)則 4.2 匯編語言程序的格式 4.3 偽指令語句 4.4 匯編語言中的表達式 4.5 指令語句 4.7 DOS系統(tǒng)功能調用 教學目標 1 理解匯編語言中的基本數(shù)據(jù)。 2 掌握匯編語言中的常用偽指令。 3 理解DOS系統(tǒng)功能調用。,重點內容 1 匯編語言中的基本數(shù)據(jù)(標識符、常數(shù)、變量、標號)。 2 匯編語言中的常用偽指令。 3 匯編語言中的表達式(算術運算符、邏輯運算符、關系運算符、分析運算符、修改屬性運算符、其他運算符)。 4 DOS系統(tǒng)功能調用。 難點內容 1 匯編語言中的常用偽指令。 2 DOS系統(tǒng)功能調用。 學時數(shù) 4學時,計算機程序設計語言一般可分為三種:機器語言、匯編語言和高級語言。 機器語言:也稱機器碼,是CPU唯一能夠識別的語言,用不同數(shù)值的二進制數(shù)來表示要求CPU執(zhí)行的命令,不同的CPU語言也不同,難以記憶和閱讀。 匯編語言:為了解決機器語言難以記憶和閱讀的問題,用英文縮寫來表示各種指令而生成的一種語言,它與機器語言基本是一一對應的。因此,匯編語言具有很高的執(zhí)行效率。但也正因為這樣,匯編語言也仍然與CPU相關聯(lián),不同的CPU要使用不同的匯編語言。在執(zhí)行前要將其轉換成CPU能夠識別的機器碼,這種轉換稱為匯編,由于匯編語言與機器語言基本是一一對應的,所以這種轉換是唯一的。 高級語言:獨立于CPU之外,語句直觀簡練,編程效率高。在執(zhí)行前要將其轉換成CPU能夠識別的機器碼,這種轉換稱為編譯。不同的編譯軟件,編譯后獲得的機器碼是不同的,好的編譯軟件,得到的機器碼占用內存小、執(zhí)行效率高,但是與匯編語言相比都有較大的差距。,4.1 匯編語言程序的格式 例4.1 試求小于100的所有非零偶數(shù),并把結果存入以BUFF開始的內存區(qū). 1 MY_DATA SEGMENT 2 BUFF DB 50 DUP(?) 3 MY_DATA ENDS 4 MY_CODE SEGMENT 5 ASSUME CS:MY_CODE, DS:MY_DATA 6 START: MOV AX, MY_DATA 7 MOV DS, AX 8 MOV AL,2 9 LEA BX,BUFF 10 LLP: MOV [BX],AL 11 INC AL 12 INC AL 13 CMP AL,100 14 JNZ LLP 15 INC 20H 16 MY_CODE ENDS 17 END STRAT,匯編語言程序的格式可以歸結為以下幾點: (1) 段的結構 段名1 SEGMENT 語句1 …… 語句i 段名1 ENDS 段名2 SEGMENT 語句1 …… 語句j 段名2 ENDS ┋ 段名n SEGMENT 語句1 …… 語句k 段名n ENDS END 標號,(2)語句的結構 3種基本語句類型: 指令語句 偽指令語句 宏指令語句 語句一般有4個部分組成,即: 標號或名字 操作碼 操作數(shù) ;注釋 標號或名字:這是一個任選部分,在語句之首,當語句為指令性語句時,它是標號,必須以“:”結束。當語句為偽指令時,它是名字,沒有結束“:”。 注釋:對程序的說明,任選,對程序不產生影響。必須以“;”開始。 語句各組成部分之間至少有一個空格作為間隔。,4.2 匯編語言中的基本數(shù)據(jù) 1、標識符 標識符—由程序員自由建立起來的,有特定意義的字符序列。 標識符的組成規(guī)則如下: ①必須由字母、數(shù)字(0,…,9)及特殊符號(?, ,@,-,$)組成,且必須以字母打頭。 ②字符總數(shù)限制在31個以內。 ③不能使用屬于系統(tǒng)專用保留字(保留的字)。 2、常數(shù) 常數(shù)—語句中出現(xiàn)的那些固定值,除了自身的值以外,沒有其它任何屬性。 常數(shù)分為兩類 (1)數(shù)值常數(shù) (2)字符串常數(shù),3、變量 變量—存放在存儲器單元中的操作數(shù),它的值是可以改變的,在程序中出現(xiàn)的是存儲器單元地址的符號,即與某一數(shù)據(jù)項第一字節(jié)相對應的標識符。 變量的3個屬性: ①段地址(SEG):變量所在段的段地址。 ②偏移地址(OFFSET):變量所在段內的偏移地址。 ③類型(TYPE):所定義的每個變量所占據(jù)的字節(jié)數(shù)。 4、標號 標號—可執(zhí)行指令語句地址的符號表示,即用標識符來表示地址。 標號的3個屬性: ①段地址(SEG) :與標號對應的指令首字節(jié)所在的段地址。 ②偏移地址(OFFSET) :與標號對應的指令首字節(jié)所在的偏移地址。 ③類型(TYPE) :標號的類型屬性有兩種:NEAR和FAR類型。,4.3 偽指令語句 偽指令語句可分為以下幾種類型: ① 數(shù)據(jù)定義偽指令語句 ② 標識符賦值與解除偽指令語句 ③ 段定義偽指令語句 ④ 過程定義偽指令語句 ⑤ 程序開始與結束偽指令語句 ⑥ 方式定義偽指令語句 ⑦ 結構定義偽指令語句 ⑧ 分組偽指令語句 ⑨ 其它偽指令語句,1、數(shù)據(jù)定義偽指令語句 共有五條:DB、DW、DD、DQ和DT,分別用來定義字節(jié)、字、雙字、8字節(jié)和10字節(jié)。 指令格式: 變量名 助記符 操作數(shù)1,操作數(shù)2,……操作數(shù)n ;注釋 變量名 助記符 n DUP(操作數(shù)1,操作數(shù)2,……操作數(shù)n) ;注釋 功能:將操作數(shù)存入以變量名所指定的存儲單元為首地址的存儲區(qū)中,或者分配存儲單元。 n DUP( )表示將括號內的操作數(shù)重復n次,n必須為正數(shù)。,例4-2 操作數(shù)是常數(shù)、表達式、字符串數(shù)據(jù)的定義 DATA1 DB 10H,25H DATA2 DW 9988H,56H DATA3 DD 2*40H,0AABBH DATA4 DB ‘HELLO’,例4-3 操作數(shù)用“?”定義不確定值的變量,用DUP來定義重復變量,不確定值的變量一般用作保留存儲空間,以便存放運算結果。 DATA1 DB ? DATA2 DW 0D55H, ? DATA3 DB 5 DUP(0) DATA4 DW 10 DUP(?) DATA5 DB 4 DUP(1,2 DUP(20)),2、標識符賦值與解除偽指令語句 共有4條: 等值偽指令語句EQU 等號偽指令語句“=” 解除偽指令語句PURGE 別名定義偽指令語句LABEL (1)等值偽指令EQU語句 指令格式: 標識符 EQU 操作數(shù) 功能:為操作數(shù)定義一個標識符,以后就可以以標識符替代該操作數(shù)。一經(jīng)定義后就不能重新定義。 例4.5 DATA EQU 100 DATA1 EQU DATA+2 CI EQU ADD,(2)等號偽指令語句“=” 指令格式: 標識符=操作數(shù) 功能:與EQU具有相同的功能,但允許重新定義。 例4.6 DATA =100 DATA1 = DATA +10 SOURCE=BX+SI MOV AX,[SOURCE] SOURCE=BX MOV CX,[SOURCE] (3)解除偽指令語句PURGE 指令格式: PURGE 標識符1,標識符2,…標識符n 功能:將EQU定義過的標識符解除定義,以便可以再次用EQU定義。,(4)別名定義偽指令語句 格式:別名 LABEL 類型屬性 LABEL:偽指令助記符,不可缺省。 功能:為一個已經(jīng)定義過的標識符另取一個名稱,以獲得一個新的類型屬性。 例4.7 定義變量的別名 DATAB LABEL BYTE DATAW DW 1234H,5678H DISF LABEL FAR DISN MOV AX,[SI],3、段定義偽指令語句 (1)段結構定義偽指令語句 SEGMENT…ENDS 指令格式: 段名 SEGMENT 定位類型 組合類型 ‘分類名’ 邏輯段內容 段名 ENDS 功能:定義一個邏輯段。 (1)段名:不可缺少,是邏輯段的地址,放在SEGMENT和ENDS的前面。 (2)助記符:不可缺少,即SEGMENT和ENDS,分別表示段的開始和結束。 (3)參數(shù):可選,有定位類型、組合類型和分類名三個參數(shù)。,① 定位類型,表示本段起始地址,共有以下4種: ● PARA:缺省值,段的起始地址在節(jié)(16字節(jié))的邊界上。 ● BYTE:段的起始地址在任意字節(jié)邊界上。 ● WORD:段的起始地址在任意字邊界上。 ● PAGE:段的起始地址在頁(256字節(jié))邊界上。 ② 組合類型,表示同類別名的段的連接方式,共有以下6種: ● NONE:缺省值,不與其他段連接。 ● PUBLIC:與其他段連接時按LINK中的順序,由低地址到高地址。 ● COMMON:與其他段以覆蓋方式連接,段長度為最大段的長度。 ● AT 表達式:該段起始地址在表達式所指定的節(jié)的邊界上。 ● STACK:指定該段為堆棧段,在堆棧段中必須有該參數(shù),多個模塊只用設一個堆棧段,使用順序連接方式組合。 ● MEMORY:多個邏輯段連接時,本邏輯段定位在地址最高的存儲區(qū)。有多個MEMORY段時,除第一個MEMORY段外,其他段按照COMMON方式處理。,③ ‘類別名’,用來為該段取一個類別名,以便可以將同類別名的段進行組合??蛇x,不超過40個字符。,(2)段分配偽指令語句 指令格式: ASSUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定義當前有效的4個邏輯段,指明段和段寄存器的關系 注意點: 1)助記符ASSUME不可省略,一般放在代碼段的開始處。 2) ASSUME后面的指令參數(shù),由段寄存器名(CS、DS、ES、SS)、冒號及段名組成,各參數(shù)之間用逗號隔開,段名應是SEGMENT…ENDS中定義過的名字。 3)4個邏輯段不一定要全部定義,不使用的可以不定義。通常代碼段和數(shù)據(jù)段是必須的,若使用了串指令,還應定義附加段ES。 4)可以用ASSUME 段寄存器名:NOTHING取消定義。 5) ASSUME只將某個段分配給相應的段寄存器,只有代碼段的段基址自動裝入CS,其他段還須用指令裝入相應的段基址。,4、過程定義偽指令語句 指令格式: 過程名 PROC 屬性 過程內容 RET 過程名 ENDP 功能:定義一個由主程序可以用CALL指令調用的過程。 說明: 1)過程名是過程的名字,也是子程序的入口地址,不可缺少。如同標號一樣,也有三種屬性: 段地址:過程的段基址。 偏移地址:過程的第一個字節(jié)與段首址之間相距的字節(jié)數(shù)。 距離類型:NEAR和FAR類型。NEAR允許在段內調用,F(xiàn)AR允許在段間調用,若缺省則為NEAR。,5、 程序開始與結束偽指令語句 共有4條偽指令語句:NAME、TITLE、ORG和END。 (1)目標模塊命名偽指令語句 格式: NAME 程序名 在輸出列表文件時,每頁開頭打印這個程序名,若未用此指令則打印文件名。 TITLE 文本名 ; 將文本名賦給目標模塊作名字。,(2)定位偽指令語句 格式:ORG 表達式 功能:給出下一條語句的段內偏移量。 例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 ENDS CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ┋ CODE ENDS,(3)程序結束偽指令語句 格式: END 標號名 功能:在程序中不可缺省,標記匯編語言的源程序的結束。匯編程序在匯編時遇到END就停止匯編。程序執(zhí)行時從END后的標號名處開始。 例4.9 程序結束偽指令語句的應用 CODE SEGMENT START:MOV AX,BX MOV CX,12H ┋ CODE ENDS END START,6、 方式定義偽指令語句 格式: .8086 .386 7、 結構定義偽指令語句 有三條語句:結構定義偽指令,結構存儲分配和預置偽指令及結構使用偽指令。 (1)結構定義偽指令語句 格式:結構名 STRUC 數(shù)據(jù)變量序列 結構名 ENDS,(2) 結構存儲分配和預置偽指令語句 格式:結構變量名 結構名 <元素值,元素值…> 結構變量名 結構名 N DUP(<元素值,元素值…>) 例4.11 對例4.10中的TAB結構進行存儲空間分配和預置,形成4個結構變量。 DATA1 TAB <> DATA2 TAB <’1234’> DATA3 TAB <,34H,SEG PLT> DATA4 TAB 5 DUP(<‘WXYZ’,22H>),(3) 結構使用偽指令語句 格式:結構變量名字段變量 設當前數(shù)據(jù)段基址為1000H,結構變量DATA1的偏移地址為100H,則例4-1中的4個結構變量在存儲器中的地址分配如圖4-3所示。,8、 分組偽指令語句 格式:組名 GROUP 段1,段2,…… 例4.12 ┋ GROUP1 GROUP SEG1,SEG2,SEG3 ASSUME DS:GROUP1 MOV AX,GROUP1 MOV DS,AX MOV BX,GRPUP1:VAR1 ┋,9、 其它偽指令語句 (l)外部偽指令語句 格式: PUBLIC 名稱1,名稱2,… 將名稱1,名稱2,…為定義為全局使用。 EXTRN 名稱1:類型,名稱2:類型,… 說明名稱1,名稱2,… 是在其他模塊中定義過的標識符,并說明其類型。,例4-12 用EXTRN和PUBLIC語句實現(xiàn)模塊間標識符的交叉訪問 模塊1 EXTRN DATA2:BYTE, SUBTR1:NEAR PUBLIC TABLE, DATA1 DSEG SEGMENT TABLE DB 100 DUP(?) DATA1 DW ? CODE SEGMENT DSEG ENDS,CODE 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,模塊2 EXTRN TABLE:BYTE PUBLIC SUBTR1, DATA2 DSEG SEGMENT DATA2 DB ? ┇ DSEG ENDS CODE SEGMENT ┇ SUBTR1: ┇ ┇ CODE ENDS END,(2)對準偽指令語句 格式:EVEN 功能: EVEN使下一語句的地址調整為偶地址。 例4.14 EVEN直接放在某一語句前,匯編程序匯編時就會完成將地址調整在偶地址上。 DATA SEGMENT ORG 100H A1 DB 0DH EVEN A2 DW 100 DUP(?) DATA ENDS,(3)條件匯編偽指令語句 一般格式是: IF ;如果條件成立 [ELSE] ;[否則] END IF ;結束條件匯編語句 IF有多種形式,它們是: IF 操作數(shù) IFE 操作數(shù) IFDEF 標號或變量 IFNDEF 標號或變量 IFB IFNB IFIDN , IFDIF , IF1 IF2,4.4 匯編語言中的表達式 表達式------運算對象和運算符組成。 匯編語言中有6類運算符,即: ① 算術運算符; ② 邏輯運算符; ③ 關系運算符; ④ 分析運算符; ⑤ 修改屬性運算符; ⑥ 其它運算符 。,1、算術運算符 算術運算符有:加(+)、減(-)、乘(*)、除(/)、取模運算(MOD)、左移(SHL)和右移(SHR)。 取模運算是取兩數(shù)相除的余數(shù),對象必須為正整數(shù)。 例如 92 MOD 16 結果為12(相當于取低4位的值) 97H MOD 20H 結果為23(相當于取低5位的值) 33H MOD 7 結果為2,例4-14 包含乘法和減法算術運算符的表達式 DATA SEGMENT ARRAY DB 1,2,3,4,5,6 TRY DB 20 DATA ENDS CODE SEGMENT MOV BX, 30*5 MOV CX, (TRY-ARRAY) ┇ CODE ENDS,例4-15 源程序包含除法、減法、模運算和移位運算的表達式 DATA SEGMENT KA EQU 800 DATA ENDS CODE SEGMENT MOV BX, KA-80 MOV AX, KA MOD 100 MOV CX, KA/100 MOV DH, 01100100B SHR 2 ┇ CODE ENDS,2、邏輯運算符 邏輯運算符有:與(AND)、或(OR)、非(NOT)和異或(XOR)。 例 4-16 AND、OR、NOT、XOR邏輯運算的表達式 DATA SEGMENT PORT EQU 81H DATA ENDS CODE SEGMENT MOV AL,NOT 0FFH MOV BL,8CH AND 73H MOV AH,8CH OR 73H MOV CH,8CH XOR 73H ┇ IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX ┇ CODE ENDS,3、關系運算符 關系運算符有:相等 EQ、不等 NE、小于 LT、大于 GT、小于或等于 LE、大于或等于GE。 4、分析運算符 分析運算符有:OFFSET、SEG、TYPE、LENGTH、SIZE (1)OFFSET 格式:OFFSET 變量或標號 功能:返回變量或標號的偏移地址。 例4-17 用OFFSET返回標號或變量偏移地址值的表達式 DATA SEGMENT ┇ DAT1 DB 81H DATA ENDS CODE SEGMENT MOV SI,OFFSET LAB1 ┇ LAB1: MOV BX,OFFSET DAT1 ┇ CODE ENDS,(2)SEG 格式:SEG 變量或標號 功能:返回變量或標號的段基址。 (3)TYPE 格式:TYPE 變量或標號 功能:返回變量的類型屬性(在變量前),返回標號的距離屬性(在標號前)。,表4-1 TYPE運算符返回值,例 4-18 TYPE加在變量和標號前的表達式 DATA SEGMENT AA1 DB 20H, 30H AA2 DW 0438H AA3 DD ? DATA ENDS CODE SEGMENT LL1: MOV AH,TYPE AA1 MOV BH,TYPE AA2 ADD AL,TYPE AA3 MOV BL,TYPE LL1 CODE ENDS,(4) LENGTH 格式:LENGTH 變量 功能:返回其后第一個變量的項目數(shù)。 例 4-19 LENGTH加變量的表達式 DATA SEGMENT BB1 DW 100 DUP (?) BB2 DW 1,2,3 BB3 DB ‘A B C D’ DATA ENDS CODE SEGMENT MOV CX, LENGTH BB1 ;CX=100 MOV BL, LENGTH BB2 ;CX=1 MOV AL, LENGTH BB3 ;CX=1 CODE ENDS,(5) SIZE 格式:SIZE 變量 功能:返回變量的字節(jié)數(shù)。 把例4-19中含有LENGTH表達式改為SIZE表達式,即: MOV CX, SIZE BB1 ;CX=200 MOV BL, SIZE BB2 ;CX=2 MOV AL, SIZE BB3 ;CX=1,5、修改屬性運算符(綜合運算符) 修改屬性運算符有:段操作符、PTR、THIS、HIGH、LOW、SHORT (1) 段操作符 格式: 段前綴(CS、DS、ES、SS) : 變量或地址表達式 功能:使用段前綴作為變量或地址表達式的使用段。 (2) PTR 格式: 類型 PTR 變量 距離 PTR 標號 功能:將類型(BYTE、WORD等)賦給變量,或將距離(NEAR、FAR)賦給標號。,例 4-20 帶PTR表達式的變量 DATA SEGMENT CC1 DB 16H,36H CC2 DW 1122H,3344H DATA ENDS CODE SEGMENT LL1: 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,(3) THIS 格式: 變量 EQU THIS 類型 標號 EQU THIS 距離 功能:將類型(BYTE、WORD等)賦給變量,或將距離(NEAR、FAR)賦給標號。 例如: DATA1 EQU THIS BYTE TABLE DW 200 DUP(?) DATA1與TABLE地址相同,但DATA1是字節(jié)類型,而TABLE是字類型。 又如: LL1 EQU THIS FAR MOV AX,100 (4) SHORT 格式:SHORT 標號 功能:指明標號的距離為-128~+127。,(5) HIGH和 LOW 它們稱為字節(jié)分離運算符 格式: HIGH 變量或標號 LOW 變量或標號 功能:從變量或標號中分離出高位字節(jié)或低位字節(jié)。 例4-21 帶HIGH和 LOW表達式的變量 DATA SEGMENT BB1 EQU 1234H BB2 EQU 0A0B0H DATA ENDS CODE SEGMENT MOV AH, HIGH BB1 MOV BL, LOW BB2 CODE ENDS,6、其它運算符 7、注意點: (1)注意表達式中各運算符和操作符的優(yōu)先級 (2)注意數(shù)制統(tǒng)一,4.5 指令語句 指令語句的格式: 標號: 前綴指令 助記符 操作數(shù) ;(注釋) (1)立即尋址和直接尋址的表示形式 例4-22 立即尋址和直接尋址在表示形式上的區(qū)別 DATA SEGMENT BB1 EQU 1234H BB2 DW 0A0B0H DATA ENDS CODE SEGMENT MOV AX, BB1 ;立即尋址 MOV BX, BB2 ;直接尋址 MOV CX, [BB1] CODE ENDS,(2) 基址寄存器加變址寄存器尋址的表示形式 有兩種表示形式: MOV AX,[BX][SI] MOV AX,[BX+SI] (3) 相對寄存器尋址的表示形式 例4-23 相對寄存器尋址的兩種表示形式 DATA SEGMENT MYDAT DB 100 DUP(?) DATA ENDS CODE SEGMENT ┇ MOV AX, MYDAT[BX] MOV AX, [MYDAT+BX] MOV CX, MYDAT[BX][SI] MOV CX, [MYDAT+BX+SI] CODE ENDS,4.6 宏指令語句及其使用 1、宏定義 宏定義格式: 宏指令名 MACRO 形式參數(shù)1,形式參數(shù)2… 宏體 ENDM 2、宏調用 宏調用格式: 宏指令名 實際參數(shù)1,實際參數(shù)2… 3、宏展開,例4-24 無形式參數(shù)的宏定義、宏調用及宏展開 宏定義: PUSHAB MACRO PUSH AX PUSH BX ENDM 宏調用: PUSHAB 宏展開: + PUSH AX + PUSH BX,例4-25 帶形式參數(shù)的宏定義、宏調用及宏展開 宏定義: LDSF MACRO PR,VAR, N,REG,CC MOV PR,VAR MOV AX,[PR] MOV CL, N S&CC REG, CL ENDM 宏調用1: LDSF SI,WVAR1,4,AX,AR 宏調用2: LDSF DI,WVAR2,3,BX,AL 宏展開1: +MOV SI,WVAR1 +MOV AX,[SI] +MOV CL, 4 +SAR AX, CL 宏展開2: +MOV DI,WVAR2 +MOV AX,[DI] +MOV CL, 3 +SAL BX, CL,4、宏嵌套 (1)宏定義中使用宏調用 例2-26 設在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試計算X+Y→Z,并要求保護所有使用的寄存器。 宏定義: DBF MACRO P, Q MOV BX, P MOV AX,Q ADD AX, BX ENDM DBFS MACRO X1, X2, X3 PUSH AX PUSH BX DBF X1, X2 MOV X3, AX POP BX POP AX ENDM,宏調用: DBFS X,Y,Z 宏展開: +PUSH AX +PUSH BX +MOV BX, X +MOV AX,Y +ADD AX, BX +MOV Z, AX +POP BX +POP AX,(2)宏定義中包含宏定義 例2-27 設在程序的數(shù)據(jù)段已經(jīng)定義了變量X,Y,Z,試共用一個宏定義,計算X+Y→Z、X-Y→Z、X AND Y→Z,并要求保護所有使用的寄存器。 宏定義: DEFM MACRO MACN,OPEN MACN MACRO A,B,C PUSH AX MOV AX,A OPEN AX,B MOV C,AX POP AX ENDM ENDM,宏調用定義加法: DEFM ADDIT,ADD 宏展開:+ADDIT MACRO A,B,C PUSH AX MOV AX,A ADD AX,B MOV C,AX POP AX ENDM 宏調用定義減法: DEFM SUBT,SUB 宏展開: +SUBT MACRO A,B,C PUSH AX MOV AX,A SUB AX,B MOV C,AX POP AX ENDM,宏調用定義邏輯“與”: DEFM ANDT,AND 宏展開: +ANDT MACRO A,B,C PUSH AX MOV AX,A AND AX,B MOV C,AX POP AX ENDM 宏調用實現(xiàn)X+Y→Z: ADDIT X,Y,Z 宏展開: +PUSH AX +MOV AX,X +ADD AX,Y +MOV Z,AX +POP AX,宏調用實現(xiàn)X-Y→Z: SUBT X,Y,Z 宏展開:+PUSH AX +MOV AX,X +SUB AX,Y +MOV Z,AX +POP AX 宏調用實現(xiàn) X AND Y→Z: ANDT X,Y,Z 宏展開: +PUSH AX +MOV AX,X +AND AX,Y +MOV Z,AX +POP AX,5、宏定義中的標號與變量 定義局部標號的格式: LOCAL 參數(shù)1、參數(shù)2、……參數(shù)n 例4.29 延時宏指令語句 宏定義: 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,宏調用1: DELAY 1234H, 5678H 宏調用2: DELAY 9ABCH, 0DEF0H 宏展開1: DELAY 1234H, 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 + MOV CX,09ABCH +??0002: MOV AX,0DEF0H +??0003: DEC AX + JNZ ??0003 + LOOP ??0002 + POP CX + POP AX,6、其它宏指令語句 (1)取消宏指令語句 格式:PURGE 宏指令名1,宏指令名2……宏指令名n (2) 重復執(zhí)行宏指令語句 格式: REPT 表達式 宏體 ENDM,7、宏指令與子程序的區(qū)別 主要區(qū)別在以下幾個方面: (1)宏指令調用比子程序調用執(zhí)行速度快。 (2)過程調用使用CALL語句實現(xiàn),在CPU執(zhí)行時進行處理,而宏指令調用由宏匯編軟件MASM中的宏處理程序來處理。 (3)子程序比宏指令節(jié)省內存空間。 (4)宏指令比子程序靈活。,4.7 DOS系統(tǒng)功能調用 DOS是一種基本的操作系統(tǒng),它的一些功能可以用軟中斷的方法來獲得,這就是DOS系統(tǒng)功能調用和BIOS中斷調用。,表4-2 常用的DOS軟中斷,1、常用的DOS軟中斷,(1)程序結束軟中斷 ① INT 20H 調用格式舉例: INT 20H ② INT 21H 該軟中斷又有三種情況:無返回程序結束、程序結束并駐留和帶返回程序結束。 無返回程序結束的調用格式: MOV AH,0 INT 21H 程序結束并駐留的調用格式舉例: MOV AH,31H MOV AL,1 ;返回號 MOV DX,400H ;保留從程序段前綴開始的內存長度字節(jié) INT 21H,帶返回程序結束的調用格式舉例: MOV AH,4CH MOV AL,1 INT 21H ③ INT 27H 調用格式舉例: MOV DX,XX ;駐留程序長度 INT 27H,(2)磁盤扇區(qū)讀與寫 調用格式舉例: MOV AL,0 MOV CX,3 MOV DX,4 MOV BX,2000H INT 25H,2、DOS系統(tǒng)功能調用 DOS系統(tǒng)功能可分為三個方面:設備管理、文件管理和目錄管理。 設備管理包括:鍵盤輸入、顯示輸出、設置磁盤緩沖器、選擇當前盤等功能調用; 文件管理包括:建立文件、打開文件、讀/寫文件、刪除文件等功能調用; 目錄管理包括:查找目錄項、更改目錄項、建立子目錄、刪除子目錄等功能調用。,(1)顯示功能調用 ① 單字符顯示 調用格式舉例: MOV DL, ‘*’ MOV AH, 2 INT 21H,② 字符串顯示 調用格式舉例:在屏幕上顯示‘HOW ARE YOU?’字符串 DATA SEGMENT CR EQU 0DH LF EQU 0AH DAT1 DB ‘HOW ARE YOU?’,CR,LF,‘$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET DAT1 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,(2) 鍵盤功能調用,表4-3 DOS鍵盤功能調用,(1) 單字符鍵盤輸入 調用格式舉例:從鍵盤輸入字符并顯示 MOV AH,1 INT 21H (2)字符串鍵盤輸入 調用格式舉例:從鍵盤輸入一個字符串,將輸入的字符數(shù)送CL寄存器,并將指針指向字符串的第一個字符。,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 微機 原理 匯編語言 語法 DOS 功能 調用
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://kudomayuko.com/p-2934244.html