匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法課件_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法課件_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法課件_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法課件_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法課件_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法匯編語(yǔ)言程序設(shè)計(jì)及上機(jī)指導(dǎo)匯編語(yǔ)言語(yǔ)法09 九月 20225.1.1 匯編語(yǔ)言程序的基本概念 指令與偽指令的集合構(gòu)成匯編語(yǔ)言語(yǔ)句.MODEL SMALL ;定義內(nèi)存工作模式為小模式 .386 ;定義指令系統(tǒng)為80386指令集 .STACK ;定義1K個(gè)字節(jié)的堆棧段 .DATA ;數(shù)據(jù)段開(kāi)始DATA1 DD 12340000H ;定義第一個(gè)32位數(shù)據(jù)的值為12340000H DATA2 DD 5678H ;定義第二個(gè)32位數(shù)據(jù)的值為5678H SUM DD ? ;定義用來(lái)存放前兩個(gè)數(shù)據(jù)之和的第三個(gè)數(shù)據(jù) .CODE ;代碼段開(kāi)始,數(shù)據(jù)段結(jié)束 .STARTUP

2、;程序開(kāi)始 MOV EAX,DATA1 ;取第一個(gè)數(shù)到EAX ADD EAX,DATA2 ;求和 MOV SUM,EAX ;保存結(jié)果(12345678H)至SUM .EXIT 0 ;程序結(jié)束,正常返回到操作系統(tǒng) END ;結(jié)束匯編04 九月 20225.1.1 匯編語(yǔ)言程序的基本概念 09 九月 20225.1.2 匯編語(yǔ)言的基本語(yǔ)法一、字符集英文字符:AZ z數(shù)字字符:09算術(shù)運(yùn)算符: /關(guān)系運(yùn)算符:分隔符:,(逗號(hào)) ;(分號(hào)) ( )(括號(hào)) (引號(hào))(空格) TAB(制表符)控制符:CR(回車(chē)) LF(換行)FF(換頁(yè))其它字符:$ & _(下劃線) ? % !二、標(biāo)識(shí)符1)標(biāo)識(shí)符的第

3、一個(gè)字符必須是字母、問(wèn)號(hào)“?”、“”符、或下劃線“_”;2)從第二個(gè)字符開(kāi)始可以是字母、數(shù)字、或“?”、“”、“_”;3)一個(gè)標(biāo)識(shí)符的長(zhǎng)短可以由131個(gè)字符組成。例如:X,GAM_31,?JACK5是正確的;而8P,DATA 8是不正確的。04 九月 20225.1.2 匯編語(yǔ)言的基本語(yǔ)法一、字符集09 九月 2022三、保留字寄存器名、指令助記符、偽操作命令、表達(dá)式運(yùn)算符,以及屬性操作符等都是系統(tǒng)專用的保留字。這些保留字是不能用作標(biāo)識(shí)符的。四、語(yǔ)句一條語(yǔ)句一般只占一行,超過(guò)一行時(shí)必須用續(xù)行符號(hào)“”指示兩條語(yǔ)句不能寫(xiě)在同一行。語(yǔ)句可以有注釋,一般寫(xiě)在語(yǔ)句之后或單獨(dú)占一行,是以“;”開(kāi)始的字符串

4、。04 九月 2022三、保留字09 九月 20225.2 匯編語(yǔ)言的數(shù)據(jù)和表達(dá)式匯編語(yǔ)言能識(shí)別的數(shù)據(jù)是常量、變量和標(biāo)號(hào)。5.2.1 常量常量是匯編時(shí)已經(jīng)確定的值,主要用于偽指令中給變量賦值,或作為指令語(yǔ)句中的立即數(shù)或存儲(chǔ)器操作數(shù)的組成部分。一常量的類(lèi)型數(shù)據(jù)形式格 式取值范圍舉例注 釋二進(jìn)制數(shù)B0110010011B二進(jìn)制數(shù)以B結(jié)尾八進(jìn)制數(shù)Q07123Q八進(jìn)制數(shù)以Q結(jié)尾十進(jìn)制數(shù)D09256D,3458十進(jìn)制數(shù)以D結(jié)尾或者缺省十六進(jìn)制數(shù)H09 AF0A3H,12345H十六進(jìn)制數(shù)以H結(jié)尾,最前面必須是09字符或字符串ASCII字符ABC兩端必須加或”04 九月 20225.2 匯編語(yǔ)言的數(shù)據(jù)和表

5、達(dá)式匯編語(yǔ)言09 九月 2022二符號(hào)定義偽指令 用于給程序中多次出現(xiàn)的同一個(gè)常量或表達(dá)式賦一個(gè)符號(hào)名,也可以為其它符號(hào)名取一個(gè)新名字,并賦給新的類(lèi)型屬性。(1) EQU偽指令例: FIRST EQU 1 ;定義常數(shù) SECOND EQU FIRST*3+8 ;定義數(shù)值表達(dá)式 ADDR1 EQU DS:EBP+4 ;定義地址表達(dá)式 DWORDS EQU THIS DWORD ;定義下面的字節(jié)變量為雙字類(lèi)型 BYTES DB 10 DUP (0) ADDR2 EQU WORD PTR BYTES ;重新定義變量BYTES的名字和屬性 START: MOV EAX,EBX GOON EQU FAR

6、 PTR START ;重新定義標(biāo)號(hào)START的名字和屬性 COUNT EQU ECX ;為ECX重新取名注意:該等值語(yǔ)句只作為符號(hào)定義用,不產(chǎn)生任何目標(biāo)代碼,也不占用存儲(chǔ)單元,并且不能是程序中曾經(jīng)定義過(guò)的符號(hào)名。04 九月 2022二符號(hào)定義偽指令09 九月 2022(2) “”偽指令“”偽操作命令與EQU具有相同的功能,但它定義的符號(hào)允許重新定義。例:PERSON=10 ;定義PERSON等于10 PERSON=PERSON+5 ;重新定義PERSON等于1504 九月 2022(2) “”偽指令09 九月 20225.2.2 變量變量的值可以在程序運(yùn)行過(guò)程中可隨時(shí)修改,變量名是存放數(shù)據(jù)的

7、存儲(chǔ)單元符號(hào)地址,變量的值為對(duì)應(yīng)存儲(chǔ)單元的內(nèi)容。一變量的屬性段屬性(SEG),指變量所在段的段基址。偏移地址屬性(OFFSET),指變量所在段中的偏移地址,即變量所在地址與段基址之間的字節(jié)距離。類(lèi)型屬性(TYPE),指變量占用存儲(chǔ)單元的字節(jié)數(shù)。若占用一個(gè)字節(jié),稱為字節(jié)變量,其類(lèi)型為BYTE;若占用兩個(gè)字節(jié),稱為字變量,其類(lèi)型為WORD;若占用四個(gè)字節(jié),稱為雙字變量,其類(lèi)型為DWORD;若占用六字節(jié),其類(lèi)型為FWORD;若占用八字節(jié),其類(lèi)型為QWORD;若占用十字節(jié),其類(lèi)型為T(mén)BYTE。04 九月 20225.2.2 變量變量的值可以在程序運(yùn)行過(guò)09 九月 2022二變量定義偽指令就是為數(shù)據(jù)分配

8、存儲(chǔ)單元,且對(duì)這個(gè)存儲(chǔ)單元取一個(gè)名字,即變量名。語(yǔ)句的格式如下:變量名 DB/DW/DD/DF/DQ/DT 表達(dá)式1,表達(dá)式2,變量名是可選的,DB/DW/DD/DF/DQ/DT是偽操作命令必須選用一種,表達(dá)式是賦給變量的初值,常見(jiàn)的有如下幾種:(1)數(shù)值變量定義語(yǔ)句例: D_BYTE DB 30H,40H DB 50HD_WORD DW 1234H,5678HD_DWORD DD D_DWORDD_TBYTE DT ?D_FWORD DF 1234567890ABHD_QWORD DQ 1122334455667788H04 九月 2022二變量定義偽指令09 九月 2022(2)字符串變量

9、定義語(yǔ)句可以用DB來(lái)實(shí)現(xiàn),即為串中的每一個(gè)字符分配一個(gè)字節(jié)存儲(chǔ)單元。字符串必須用引號(hào)括起來(lái),并且不超過(guò)256個(gè)字符,它們?cè)趦?nèi)存中自左至右把字符的ASCII碼按地址遞增順序依次存放。 例: STRING1 DB ABCDEFG用DW也可以定義字符串變量,即給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)存儲(chǔ)單元,它們?cè)趦?nèi)存中的順序是前一個(gè)字符為高字節(jié),存放在高地址,后一個(gè)字符為低字節(jié),存放在低地址。 例: STRING2 DW AB,CD,EF04 九月 2022(2)字符串變量定義語(yǔ)句09 九月 2022(3)?語(yǔ)句存儲(chǔ)單元中不預(yù)置確定的值,常用來(lái)預(yù)留存儲(chǔ)單元,存放程序的中間結(jié)果或最終結(jié)果。 例:FIRST

10、 DB ? ;分配一個(gè)字節(jié)單元 SECOND DD ?,?,? ;分配三個(gè)雙字單元(4)帶DUP的變量定義語(yǔ)句DUP 是重復(fù)數(shù)據(jù)定義操作符,可以為若干重復(fù)數(shù)據(jù)分配存儲(chǔ)單元,并賦給相應(yīng)的變量名。例:D1 DB 5 DUP (0) D2 DW 10H DUP (5678H) D3 DD 20H DUP (?)第一條語(yǔ)句為變量D1分配5個(gè)字節(jié)單元,每個(gè)單元初始值都為0;第二條語(yǔ)句為變量D2重復(fù)分配10H個(gè)字單元,每個(gè)單元初始值都為5678H,共占有20H個(gè)字節(jié);第三條語(yǔ)句為變量D3保留20H個(gè)雙字單元,沒(méi)有定義初始值。 D4 DB 200 DUP (4 DUP (6),8)表示為變量D4重復(fù)分配20

11、0個(gè)數(shù)據(jù)序列6,6,6,6,8,共占有1000個(gè)字節(jié)單元。04 九月 2022(3)?語(yǔ)句09 九月 2022三內(nèi)存定位和定義數(shù)制偽指令(1)ORG偽指令和當(dāng)前位置計(jì)數(shù)器匯編時(shí)將段名填入段表,同時(shí)為該段配備一個(gè)初值為0的位置計(jì)數(shù)器$。計(jì)數(shù)器依次累計(jì)段內(nèi)語(yǔ)句被匯編后生成的目標(biāo)代碼字節(jié)個(gè)數(shù)??捎肙RG偽指令把位置計(jì)數(shù)器的值設(shè)置成需要的值。在數(shù)據(jù)段中,ORG后面的數(shù)據(jù)定義偽指令就從指定位置進(jìn)行分配單元;在代碼段中,ORG后面的一條指令語(yǔ)句就從指定位置生成目標(biāo)代碼;表達(dá)式的值應(yīng)該是非負(fù)的整數(shù)。例: ORG 0F0H ;從0F0H開(kāi)始安排數(shù)據(jù) ORG $+10H ;跳過(guò)10H個(gè)字節(jié)后安排數(shù)據(jù) DW 1,

12、$+4,$+4 ;100H單元的字值為1,102H單元的字值 ;為106H,104H單元的字值為108H ARRAY DB 12,34,56,5 DUP (?) ;定義字節(jié)數(shù)組LEN EQU $-ARRAY ;LEN的值為ARRAY變量所占的字節(jié)數(shù)804 九月 2022三內(nèi)存定位和定義數(shù)制偽指令(1)ORG09 九月 2022(2)EVEN偽指令 用來(lái)把段內(nèi)位置計(jì)數(shù)器的值置為偶數(shù)地址邊界對(duì)齊,如果遇到EVEN時(shí)計(jì)數(shù)器$值非偶數(shù),則匯編程序自動(dòng)插入NOP指令(在代碼段中),使其為偶數(shù);或者將$的值加1(數(shù)據(jù)段中)。(3).RADIX偽指令 宏匯編默認(rèn)常量基數(shù)都是十進(jìn)制數(shù),可用.RADIX偽命令把

13、缺省基數(shù)改為216范圍內(nèi)的任意基數(shù): .RADIX 其中,表達(dá)式與當(dāng)前基數(shù)無(wú)關(guān),一定是十進(jìn)制數(shù)。例: MOV AX,0FFH MOV BX,20 .RADIX 16 MOV CX,0FF MOV DX,20D其中AX和CX寄存器的內(nèi)容相同,BX和DX寄存器內(nèi)容相同。04 九月 2022(2)EVEN偽指令 09 九月 20225.2.3 標(biāo)號(hào)標(biāo)號(hào)之后必須有一個(gè)冒號(hào)(:),標(biāo)號(hào)也可以單占一行。一標(biāo)號(hào)的屬性 段屬性(SEG),指標(biāo)號(hào)所在段的段基址。 偏移地址屬性(OFFSET),指標(biāo)號(hào)所在段中的偏移地址,即標(biāo)號(hào)所在地址與段基址之間的字節(jié)距離。 距離屬性或類(lèi)型屬性(TYPE),標(biāo)號(hào)可作為轉(zhuǎn)移和調(diào)用指

14、令的目標(biāo)地址,也可作為過(guò)程定義偽指令的過(guò)程名。當(dāng)標(biāo)號(hào)只允許作為段內(nèi)轉(zhuǎn)移或調(diào)用指令的目標(biāo)地址時(shí),距離屬性為NEAR;當(dāng)標(biāo)號(hào)作為段間轉(zhuǎn)移或調(diào)用指令的目標(biāo)地址時(shí),距離屬性為FAR。例如:JMP LABEL1 ;程序跳轉(zhuǎn)到標(biāo)號(hào)LABEL1的位置CALL FAR PTR SUBPROGRAM ;調(diào)用SUBPROGRAM過(guò)程(FAR)LABEL1: ;LABEL1為段內(nèi)轉(zhuǎn)移標(biāo)號(hào)(距離屬性缺省為NEAR) LABEL2: ;LABEL2為段內(nèi)轉(zhuǎn)移標(biāo)號(hào),單獨(dú)占一行 SUBPROGRAM PROC FAR ;SUBPROGRAM是屬性為FAR的過(guò)程 RET 標(biāo)號(hào)的距離屬性可用LABEL偽指令加以改變。04 九月

15、 20225.2.3 標(biāo)號(hào)09 九月 2022二LABEL偽指令(1)與變量連用用來(lái)給相連的變量取一個(gè)新的名字,并指定新的類(lèi)型屬性。例:B_VAR1 LABEL BYTE W_VAR1 DW 3456H W_VAR2 LABEL WORD D_VAR2 DD 87654321H給字變量W_VAR1一個(gè)新名字B_VAR1,類(lèi)型屬性BYTE。如果以字類(lèi)型訪問(wèn)該變量,應(yīng)使用變量名W_VAR1;而以字節(jié)類(lèi)型訪問(wèn)該變量時(shí),應(yīng)使用B_VAR1。如果想按字訪問(wèn)D_VAR2變量,則可以用W_VAR2。注意:B_VAR1和W_VAR2都是給變量增加類(lèi)型屬性,并不另外占用存儲(chǔ)單元(2)與標(biāo)號(hào)連用用來(lái)給相連的指令地

16、址(即標(biāo)號(hào))定義一個(gè)新的標(biāo)號(hào),并指定新的距離屬性。例: DISTFAR LABEL FAR DISTNEAR: MOV EAX,EBX給近標(biāo)號(hào)DISTNEAR取一個(gè)新的標(biāo)號(hào)名DISTFAR,距離屬性修改為FAR。當(dāng)其它代碼段中的轉(zhuǎn)移或調(diào)用指令引用時(shí),可使用標(biāo)號(hào)DISTFAR,而在本段引用時(shí),只要使用標(biāo)號(hào)DISTNEAR即可,但它們實(shí)際上是指向同一條指令。用LABEL偽指令的定義,實(shí)現(xiàn)了按不同的標(biāo)號(hào)名和不同的轉(zhuǎn)移方式而轉(zhuǎn)移到同一個(gè)標(biāo)號(hào)的目的。04 九月 2022二LABEL偽指令09 九月 20225.2.4 表達(dá)式和運(yùn)算符一、算術(shù)運(yùn)算符包括+、-、*、/、MOD、 SHL和SHR共七種;+、-

17、、*、/參加運(yùn)算的數(shù)和運(yùn)算結(jié)果均為整數(shù);除法運(yùn)算為整除,而模除的運(yùn)算結(jié)果為余數(shù);左移或右移運(yùn)算符可使二進(jìn)制數(shù)左移或右移若干位,相當(dāng)于二進(jìn)制數(shù)進(jìn)行乘法或除法運(yùn)算。例:TEMP=10+5 ;TEMP=15 TEMP=TEMP-3 ;TEMP=12 TEMP=TEMP*5 ;TEMP=60 TEMP=TEMP/9 ;TEMP=6 TEMP=TEMP MOD 4 ;TEMP=2 TEMP=-TEMP ;TEMP=-2 MOV AL, 11B SHL 5 ;(AL)=01100000B注意:除了加和減運(yùn)算符可以使用變量或標(biāo)號(hào)外,其它算術(shù)運(yùn)算符只適用于常量的數(shù)值運(yùn)算。04 九月 20225.2.4 表達(dá)式

18、和運(yùn)算符一、算術(shù)運(yùn)算符09 九月 2022二、邏輯運(yùn)算符有AND、OR、XOR、NOT共四種;只適用于對(duì)常量進(jìn)行邏輯運(yùn)算,運(yùn)算是按位進(jìn)行的;運(yùn)算符與邏輯運(yùn)算指令助記符相同,但在語(yǔ)句中的位置不一樣,表達(dá)式中的邏輯運(yùn)算符是在匯編時(shí)完成運(yùn)算的;而邏輯運(yùn)算指令運(yùn)算在執(zhí)行指令時(shí)進(jìn)行。例: MOV AL,NOT 10100101B ;(AL)=01011010B MOV AL,11011011B AND 00001111B ;(AL)=00001011B MOV AL,11100001B OR 10000101B ;(AL)=11100101B MOV AL,10111011B XOR 00100100B

19、 ;(AL)=10011111B04 九月 2022二、邏輯運(yùn)算符09 九月 2022三、關(guān)系運(yùn)算符 包括EQ、NE、LT、GT、LE、GE共六種;可對(duì)常量或同一段內(nèi)的存儲(chǔ)器地址進(jìn)行比較運(yùn)算;若條件滿足,運(yùn)算結(jié)果為真,輸出結(jié)果為全“1”;若不滿足條件,運(yùn)算結(jié)果為假,輸出結(jié)果為全“0”。 例: MOV BX,10 EQ 1010B ; 10等于1010B為真,(BX)=0FFFFH MOV DX,20H GT 32 ;20H大于32為假,(DX)=004 九月 2022三、關(guān)系運(yùn)算符09 九月 2022四、數(shù)值返回運(yùn)算符運(yùn)算對(duì)象必須是存儲(chǔ)器操作數(shù),即變量或標(biāo)號(hào)。(1)SEG運(yùn)算符:返回該變量或標(biāo)

20、號(hào)所在段的段基址。 例如: MOV AX, SEG VAR 如果變量VAR所在段的段基址為1000H,則該指令執(zhí)行的結(jié)果 等效于 MOV AX,1000H(2)OFFSET運(yùn)算符:返回該變量或標(biāo)號(hào)所在段內(nèi)的偏移地址。 例如:MOV DI, OFFSET VAR 如果變量VAR在1000H段內(nèi)的偏移地址是100H,則該指令執(zhí)行 的結(jié)果等效于: MOV DI,100H(3)TYPE運(yùn)算符:返回該變量的類(lèi)型屬性或者標(biāo)號(hào)的距離屬性。例:V1 DB 1,2,3V2 DW 1020H,3040HV3 DD 12345678HPF LABEL FARPN: MOV AH,TYPE V1 ;等效于MOV AH

21、,1 MOV AL,TYPE V2 ;等效于MOV AL,2 MOV DL,TYPE V3 ;等效于MOV BL,4 MOV DH,TYPE PF ;等效于MOV BH,-204 九月 2022四、數(shù)值返回運(yùn)算符09 九月 2022屬性與返回?cái)?shù)值的關(guān)系 變量/標(biāo)號(hào)屬性返回?cái)?shù)值字節(jié)變量 BYTE字變量 WORD雙字變量 DWORD三字變量 FWORD四字變量 QWORD十字節(jié)變量 TBYTE1246810標(biāo)號(hào)NEAR標(biāo)號(hào)FAR1FFH2FEH04 九月 2022屬性與返回?cái)?shù)值的關(guān)系 變量/標(biāo)號(hào)屬性返回09 九月 20224LENGTHOF運(yùn)算符 該運(yùn)算符加在變量名之前,返回的數(shù)值是變量中所定義的

22、元素個(gè)數(shù)。 D1 DW 10H DUP (0),1234H D2 DB 20H DUP (2 DUP(0),1) D3 DQ 1234H, 5678H D4 DB ABCDEFGH D5 DD 12H,34H, ;加一個(gè)續(xù)行符,表示一條偽指令占兩行 56H,78H D6 DD 12H,34H ;未加續(xù)行符,則表示這兩行是兩條偽指令 DD 56H,78H MOV AL,LENGTHOF D1 ;(AL)= 11H MOV AL,LENGTHOF D2 ;(AL)= 60H MOV AL,LENGTHOF D3 ;(AL)= 2H MOV AL,LENGTHOF D4 ;(AL)= 8H MOV

23、AL,LENGTHOF D5 ;(AL)= 4H MOV AL,LENGTHOF D6 ;(AL)= 2H04 九月 20224LENGTHOF運(yùn)算符 該運(yùn)算09 九月 20225SIZEOF運(yùn)算符該運(yùn)算符加在變量名之前,返回的數(shù)值是變量所占的總字節(jié)數(shù),且等于LENGTHOF和TYPE兩個(gè)運(yùn)算符返回值的乘積。例如,對(duì)于上例中的變量,SIZEOF的返回值如下所示:MOV AL,SIZEOF D1 ;(AL)= 22H,即20H*2HMOV AL,SIZEOF D2 ;(AL)= 60H,即60H*1HMOV AL,SIZEOF D3 ;(AL)= 10H,即8H*2HMOV AL,SIZEOF

24、D4 ;(AL)= 8H,即8H*1HMOV AL,SIZEOF D5 ;(AL)= 10H,即4H*4HMOV AL,SIZEOF D6 ;(AL)= 8H,即2H*4H04 九月 20225SIZEOF運(yùn)算符該運(yùn)算符加在變量名09 九月 2022LENGTH運(yùn)算符 返回變量中所定義的元素個(gè)數(shù),如果變量是用重復(fù)數(shù)據(jù)操作符DUP說(shuō)明的,則返回DUP前面的數(shù)值;如果沒(méi)有DUP說(shuō)明,則返回的值總是1。例: D1 DW 10H DUP (0) D2 DB 20H DUP (0) D3 DW 1234H,5678H D4 DB ABCDEFGH MOV AL,LENGTH D1 ;(AL)=10H M

25、OV AL,LENGTH D2 ;(AL)=20H MOV AL,LENGTH D3 ;(AL)=1H MOV AL,LENGTH D4 ;(AL)=1HSIZE運(yùn)算符 返回變量所占的總字節(jié)數(shù),且等于LENGTH和TYPE兩個(gè)運(yùn)算符返回值的乘積。例如,對(duì)于上例中的變量D1、D2、D3、D4,SIZE的返回值如下所示:MOV AL,SIZE D1 ;(AL)=20HMOV AL,SIZE D2 ;(AL)=20HMOV AL,SIZE D3 ;(AL)=2HMOV AL,SIZE D4 ;(AL)=1H04 九月 2022LENGTH運(yùn)算符09 九月 2022五、修改屬性運(yùn)算符(1)PTR運(yùn)算符

26、格式: PTR 根據(jù)地址表達(dá)式的不同,所賦給的新類(lèi)型可以是BYTE、WORD、DWORD、FWORD、QWORD、TBTYE、NEAR、FAR等,它們只在所在的指令內(nèi)有效。例: TABLE DB 1,2,3,4,5,6,7,8 ADD WORD PTR DI,100 ;指明目的操作數(shù)為字類(lèi)型 JMP DWORD PTR BX ;指明為段間轉(zhuǎn)移 MOV EAX, DWORD PTR TABLE ;臨時(shí)修改TABLE為雙字類(lèi) ;型,(EAX)=04030201H(2)THIS運(yùn)算符把它后面指定的類(lèi)型或距離屬性賦給當(dāng)前的變量、標(biāo)號(hào)或地址表達(dá)式,但不分配新的存儲(chǔ)單元,往往與偽指令EQU或連用,為當(dāng)前存

27、儲(chǔ)單元定義一個(gè)指定類(lèi)型的變量或標(biāo)號(hào),類(lèi)型屬性也可以是BYTE、WORD、DWORD、FWORD、QWORD、TBTYE、NEAR、FAR等。例: DAT EQU THIS WORD POINT EQU THIS FAR第一條語(yǔ)句將變量DAT的類(lèi)型屬性定義為字,不管DAT原來(lái)的類(lèi)型是什么,從本語(yǔ)句開(kāi)始,DAT成為字節(jié)變量;第二條語(yǔ)句將標(biāo)號(hào)POINT的距離屬性定義為FAR,不管POINT原來(lái)的距離屬性是什么,從本語(yǔ)句開(kāi)始,POINT成為遠(yuǎn)標(biāo)號(hào)。04 九月 2022五、修改屬性運(yùn)算符09 九月 2022六、其它運(yùn)算符(1)高低分離運(yùn)算符HIGH運(yùn)算符和LOW運(yùn)算符分別用于從16位運(yùn)算對(duì)象中分離出高字

28、節(jié)和低字節(jié)。從MASM6.0開(kāi)始引入了HIGHWORD運(yùn)算符和LOWWORD運(yùn)算符分別用于從32位符號(hào)常量中分離出高字和低字部分。例: MOV AH,HIGH 5678H ;(AL)=56H DATA16 EQU 1234H MOV AL,LOW DATA16 ;(AL)=34H DATA32 EQU 1234FFFFH MOV AX,LOWWROD DATA32 ;(AX)=0FFFFH(2)方括號(hào)運(yùn)算符:運(yùn)算符中可以是數(shù)組變量的下標(biāo)或地址表達(dá)式,以區(qū)別操作數(shù)和操作數(shù)地址。例:ARRAY DB 1,2,3,4,5 ;ARRAY為數(shù)組變量 MOV AL, ARRAY4 ;”4”為下標(biāo),(AL)

29、=5 MOV BX,OFFSET ARRAY ;(BX)=ARRAY的偏移地址 MOV AH,BX ;(AH)=1 MOV DX,WORD PTR ARRAY1 ;(DX)=302H(3)運(yùn)算符的優(yōu)先級(jí):一般可以用括號(hào)來(lái)改變運(yùn)算符的優(yōu)先級(jí)別。例: MOV AL,18 OR 5 AND 10 ;AL=18(12H) MOV AL,(18 OR 5) AND 10 ;AL=204 九月 2022六、其它運(yùn)算符09 九月 2022運(yùn)算符的優(yōu)先級(jí)04 九月 2022運(yùn)算符的優(yōu)先級(jí)09 九月 20225.3 宏匯編語(yǔ)言的偽指令符號(hào)定義、變量定義、程序分段定義、過(guò)程定義、模塊定義、宏定義、條件匯編、以及格

30、式和列表控制等。5.3.1 段定義和程序說(shuō)明偽指令具體來(lái)說(shuō)規(guī)定段的起始和結(jié)束指定屬性開(kāi)始地址邊界段類(lèi)型 同名段如何結(jié)合在一起有兩種段定義簡(jiǎn)化段定義:對(duì)MASM5.0以上版本完整段定義:對(duì)所有版本04 九月 20225.3 宏匯編語(yǔ)言的偽指令符號(hào)定義、變09 九月 2022一、完整分段定義偽指令 1. 段定義偽指令 SEGMENT/ENDS 將程序分成段:代碼段,數(shù)據(jù)段,堆棧段,附加段。 格式: 段名 SEGMENT 定位類(lèi)型組合屬性類(lèi)別名 (段體) 段名 ENDS 功能:指出段名和段的各種屬性, 并表示段的開(kāi)始和結(jié)束位置。段定義由偽操作SEGMENT開(kāi)始、ENDS結(jié)束。其中: SEGMENT

31、和ENDS 必須成對(duì)出現(xiàn), 且語(yǔ)句前必須有段名,段名必須相同。 SEGMENT和ENDS語(yǔ)句之間可以有指令和其他偽指令, 表示存放在該段內(nèi)存的變量、指令或其他偽指令對(duì)該段內(nèi)存的處理 程序中可以定義多個(gè)段。 程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。合法標(biāo)識(shí)符,有段基地址和段內(nèi)偏移量?jī)蓚€(gè)屬性,與某個(gè)存儲(chǔ)單元相聯(lián)系。04 九月 2022一、完整分段定義偽指令功能:指出段名和段09 九月 2022 (1)定位類(lèi)型用于告訴鏈接程序,鏈接時(shí)(各模塊.obj) 本段首地址的邊界定位方式,常有四種: PARA:段的起始地址必須是16的倍數(shù)(XXXX0H), 這是一種默認(rèn)方式。 PAGE:段的起始地址

32、必須是256的倍數(shù)(XXX00H), 256字節(jié)為一頁(yè),在頁(yè)的起點(diǎn)上。 WORD:段的起始地址必須是偶數(shù)(XX0B)。 BYTE:段的起始地址可以是任何地址。(2) 組合類(lèi)型 在多模塊(每個(gè)模塊有自己的代碼段、數(shù) 據(jù)段、堆棧段)組合時(shí),告訴Link程序本 段與其他模塊中同名段的組合鏈接關(guān)系。04 九月 2022 (1)定位類(lèi)型 PARA:段的起09 九月 2022 NONE: 本段與其他同名段無(wú)組合關(guān)系,并有自己的段起始 地址,這是一種默認(rèn)方式。 PUBLIC:在滿足定位類(lèi)型的前提下,LINK程序?qū)⑵渑c其他 模塊中的同名段鄰接在一起,共用一個(gè)段地址。 STACK: 同PUBLIC 。鏈接以后作

33、為堆棧段,并自動(dòng)初始化 SS、SP。若程序中不說(shuō)明STACK,則必須由用戶 在程序的開(kāi)始處,自己通過(guò)語(yǔ)句設(shè)置SS、SP。 COMMON:各模塊中同名段重疊覆蓋,有著相同的起始地 址。段的長(zhǎng)度取決于最長(zhǎng)的COMMON段。段的 內(nèi)容為所鏈接的最后一個(gè)模塊中COMMON段的 內(nèi)容。 MEMERY:鏈接在其他所有段的后面(高端存儲(chǔ)區(qū) )。若有 多個(gè)MEMERY段,則只認(rèn)第一個(gè),其余按 COMMON處理。04 九月 2022 NONE: 本段與其他同名段無(wú)組合09 九月 2022(3)段字屬性在32位80X86微處理器中,新增加了USE屬性說(shuō)明。對(duì)于16位CPU默認(rèn)的是16位段,即USE 16。而對(duì)于匯

34、編32位80X86CPU指令時(shí),它默認(rèn)采用32位段,即USE 32。但可以使用USE 16指定標(biāo)準(zhǔn)的16位段。若在程序開(kāi)頭使用了.386偽指令(見(jiàn)簡(jiǎn)化段定義偽指令),缺省類(lèi)型為32位段字長(zhǎng)。注意,在禁止用80386的情況下,使用USE選擇項(xiàng)將導(dǎo)致出錯(cuò)。(4)段類(lèi)別名屬性類(lèi)別名可以是任何合法的名字,必須用單引號(hào)括起來(lái)。在連接處理時(shí),鏈接程序把類(lèi)別名相同的所有段存放在連續(xù)的存儲(chǔ)區(qū)內(nèi)。典型的類(lèi)別名如:DATA,STACK,CODE。以上是定位類(lèi)型、組合類(lèi)型、段字和類(lèi)別名四個(gè)參數(shù)的說(shuō)明,各參數(shù)之間用空格分隔。在選用時(shí),可以只選其中一個(gè)或兩個(gè)參數(shù)項(xiàng),但不能交換它們之間的順序。04 九月 2022(3)段

35、字屬性09 九月 20222 . 段寄存器說(shuō)明偽指令 格式:ASSUME 段寄存器:段名,段寄存器:段名, 設(shè)定特定的Sreg指向特點(diǎn)的段,說(shuō)明源程序中定義的段應(yīng)由 哪一個(gè)Sreg去尋址。不如此,匯編程序無(wú)法生成目標(biāo)代碼程序。 ASSUME 并未真正的將段地址裝入相應(yīng)的Sreg。 Sreg的初值還必須由用戶在程序的開(kāi)始處用MOV指令來(lái)設(shè)置(CS除外)。(1)DS和ES的裝入DS和ES的裝入可以通過(guò)給寄存器賦初值的指令來(lái)完成。但是應(yīng)注意到,由于段寄存器不能用立即數(shù)尋址方式直接傳送,因此裝入段基址必須借助于通用寄存器進(jìn)行間接傳送。例:CODES SEGMENT ASSUME CS:CODES,DS

36、:DATAS,SS:STACKS,ES:EXTRS START:MOV AX,DATAS MOV DS,AX MOV AX,EXTRS MOV ES,AX CSEG ENDS04 九月 20222 . 段寄存器說(shuō)明偽指令09 九月 2022(2)SS的裝入一種方法是在SEGMENT語(yǔ)句中,組合類(lèi)型選用STACK,并在ASSUME語(yǔ)句中,把堆棧用的段指派給段寄存器SS。 STACKS SEGMENT PARA STACK DB 100H DUP (?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,SS:STACKS 另一種方法是在SEGMENT語(yǔ)句中,組合

37、類(lèi)型未選用STACK參數(shù),或者在程序中使用另一個(gè)堆棧段時(shí),可采用類(lèi)似于DS和ES的裝入方法,用傳送指令實(shí)現(xiàn)對(duì)SS的裝入操作。(3)CS和IP的裝入CS和IP的裝入通常是按照結(jié)束偽指令指定的地址來(lái)自動(dòng)完成的。結(jié)束偽指令的格式是: END 起始地址是一個(gè)標(biāo)號(hào)或地址表達(dá)式,這個(gè)地址是程序裝入內(nèi)存后的起始點(diǎn),它的段基址和偏移量就是CS和IP的內(nèi)容。04 九月 2022(2)SS的裝入09 九月 20223. 組定義偽指令GROUP格式:組名 GROUP 段名,段名將程序中若干不同名的段集合成一個(gè)組,并賦予一個(gè)組名,使它們都裝在一個(gè)64KB的物理段中, 這時(shí)組內(nèi)不同類(lèi)型的段運(yùn)行時(shí)共用一個(gè) Sreg,組內(nèi)

38、各段間的跳轉(zhuǎn)都可以看作段內(nèi)跳轉(zhuǎn)。例:STACKSEG SEGMENT STACK ;定義堆棧段 DB 256 DUP (?) STACKSEG ENDSDATA1 SEGMENT WORD PUBLIC CONST CONS1 DW 100 ;定義數(shù)據(jù)段1DATA1 ENDSDATA2 SEGMENT WORD PUBLIC VARS VAR1 DW ? ;定義數(shù)據(jù)段2DATA2 ENDS04 九月 20223. 組定義偽指令GROUP09 九月 2022DATAGROUP GROUP DATA1,DATA2 ;組合兩個(gè)數(shù)據(jù)段,以DATAGROUP為段組名CODESEG SEGMENT PAR

39、A PUBLIC CODE ;定義代碼段 ASSUME CS:CODESEG,DS:DATAGROUP,SS:STACKSEGSTART: MOV AX,DATAGROUP MOV DS,AX ;DS賦初值對(duì)該組尋址 MOV AX,CONS1 ;AX=100 MOV VAR1,AX ;VAR=100 MOV AX,OFFSET VAR1 ;AX=2 MOV AX,OFFSET DATA1 ;AX=2 (已分配2個(gè)字節(jié)內(nèi)存單元) MOV AX,OFFSET DATA2 ;AX=4 (已分配4個(gè)字節(jié)內(nèi)存單元) MOV AX,4C00H INT 21H ;DOS功能調(diào)用,可正常返回到操作系統(tǒng)CODE

40、SEG ENDS END START ;程序結(jié)束04 九月 2022DATAGROUP GROUP DATA09 九月 2022二、簡(jiǎn)化分段定義偽指令在MASM 5.0版本以上的宏匯編語(yǔ)言中段的定義可以非常簡(jiǎn)單。.MODEL ;定義程序的存儲(chǔ)模式.STACK ;定義堆棧段, 長(zhǎng)度缺省為1K字節(jié).CODE ;定義代碼段.DATA ;定義數(shù)據(jù)段.DATA? ;定義數(shù)據(jù)段,但初值不確定.FARDARA ;定義遠(yuǎn)調(diào)用數(shù)據(jù)段.FARDARA? ;定義遠(yuǎn)調(diào)用數(shù)據(jù)段,但初值不確定.CONST ;定義只讀常數(shù)數(shù)據(jù)段.STARTUP ;程序起始點(diǎn),并初始化DS、SS.EXIT 0 ;程序結(jié)束點(diǎn),返回到操作系統(tǒng)0

41、4 九月 2022二、簡(jiǎn)化分段定義偽指令09 九月 2022例: .MODEL SMALL ;定義小型內(nèi)存模式.386 ;可以匯編386指令.STACK 100 ;定義堆棧段,長(zhǎng)度為100字節(jié).DATA ;數(shù)據(jù)段開(kāi)始X DD 12345678HY DD 87654321HZ DD ?,?.CODE ;代碼段開(kāi)始.STARTUP ;程序開(kāi)始MOV EAX,XMUL YMOV Z,EAXMOV Z+4,EDX.EXIT 0 ;程序結(jié)束,返回, ;相當(dāng)于MOV AX,4C00H和INT 21H兩條指令END ;匯編結(jié)束04 九月 2022例:09 九月 20221定義內(nèi)存模式偽指令 .MODEL 存

42、儲(chǔ)模式 ,語(yǔ)言類(lèi)型 ,操作系統(tǒng)類(lèi)型 ,堆棧類(lèi)型(1)存儲(chǔ)模式: TINY:微型模式,程序中的數(shù)據(jù)和代碼放在同一64K段內(nèi),這也就是后綴為.COM的程序。這種模式是MASM6才引入的。SMALL:小型模式,程序中的代碼放在64KB的數(shù)據(jù)段內(nèi), 數(shù)據(jù)放在64KB代碼的段內(nèi)(包括數(shù)據(jù)段、堆棧段和附加段公用一個(gè)段),因而對(duì)代碼和數(shù)據(jù)的訪問(wèn)可通過(guò)近程(NEAR)調(diào)用來(lái)實(shí)現(xiàn)。一般程序默認(rèn)的都是該模式。MEDIUM:中型模式,程序中的數(shù)據(jù)放在64KB的數(shù)據(jù)段內(nèi),代碼量大于64KB,因而可安排在不同段內(nèi)。這樣,數(shù)據(jù)是近程的,而代碼是遠(yuǎn)程的。COMPACT:壓縮模式,程序中的所有代碼放在一個(gè)64KB的代碼段內(nèi),

43、而數(shù)據(jù)區(qū)可以大于64KB。這樣,對(duì)代碼的訪問(wèn)是近程的,而數(shù)據(jù)是遠(yuǎn)程的。LARGE:大型模式,程序中的數(shù)據(jù)和代碼均大于64KB,但靜態(tài)(常數(shù))數(shù)據(jù)限制在64KB之內(nèi)。對(duì)程序和數(shù)據(jù)的訪問(wèn)默認(rèn)都是遠(yuǎn)程的。HUGE:巨型模式,程序中的數(shù)據(jù)和代碼均大于64KB,靜態(tài)數(shù)據(jù)也可以大于64KB。這樣,對(duì)代碼、數(shù)據(jù)和數(shù)組的訪問(wèn)都是遠(yuǎn)程的。FLAT:平展模式,用于創(chuàng)建一個(gè)32位的程序,它只能運(yùn)行在32位80X86CPU上。DOS下不能使用FLAT模式,而編寫(xiě)32位Windows程序時(shí),必須采用FLAT模式。04 九月 20221定義內(nèi)存模式偽指令TINY:微型模09 九月 2022(2)語(yǔ)言類(lèi)型:由它來(lái)告訴匯編程

44、序?qū)⑹褂檬裁礃拥臉?biāo)識(shí)符的命名風(fēng)格、子程序的調(diào)用和返回約定等??墒箙R編語(yǔ)言程序與其它語(yǔ)言程序達(dá)到共享的目的。有效的語(yǔ)言類(lèi)型為:C(C語(yǔ)言)、SYSCALL(系統(tǒng)調(diào)用)、STDCALL(標(biāo)準(zhǔn)調(diào)用)、 Basic(Basic語(yǔ)言)、 Fortran(Fortran語(yǔ)言) 、Pascal(Pascal語(yǔ)言)等。(3)操作系統(tǒng)類(lèi)型:OS_DOS是當(dāng)前唯一支持的選項(xiàng)值,也是該選項(xiàng)的缺省值。(4)堆棧類(lèi)型:堆棧類(lèi)型的值主要影響偽指令.STARTUP所生成的指令序列。該選項(xiàng)有二個(gè)可選值:NEARSTACK和FARSTACK。其中:NEARSTACK是該選項(xiàng)的缺省堆棧類(lèi)型。NEARSTACK堆棧段和數(shù)據(jù)段是同一

45、段;FARSTACK堆棧段和數(shù)據(jù)段是不同的段,且堆棧不在段組DGROUP中。例:.MODEL SMALL, C, OS_DOS, FARSTACK 04 九月 2022(2)語(yǔ)言類(lèi)型:09 九月 20222處理器選擇偽指令.8086和.8087 可用來(lái)匯編8086/8088處理器和8087協(xié)處理器的指令,這是缺省模式。.286、.286C、.286P、.287可用來(lái)匯編286系列微處理器的指令。.386、.386C、.386P、.387可用來(lái)匯編386系列微處理器的指令。.NO87取消使用協(xié)處理器指令。.486、.486C、.486P可用來(lái)匯編486系列微處理器的指令。.586、.586C、.

46、586P可用來(lái)匯編Pentium系列微處理器的指令。. 686、.686P可用來(lái)匯編Pentium Pro系列微處理器的指令。.MMX可用來(lái)匯編MMX指令。 .MMX和.686、.686P是MASM6.12引入的。.K3D可用來(lái)匯編AMD處理器的3D指令,是MASM6.13引入的。.XMM可用來(lái)匯編SSE指令和SSE2指令,是MASM6.15引入的。注意:80386以上處理器中,如果處理器選擇偽指令放在.MODEL偽指令前面,那么段將定義成32位的段。如果希望處理器使用16位的段,則應(yīng)在.MODEL偽指令后面使用處理器選擇偽指令。04 九月 20222處理器選擇偽指令09 九月 20223段名

47、的缺省名使用簡(jiǎn)化的段定義偽指令時(shí),每個(gè)段都有一個(gè)缺省名。在中內(nèi)存模式和大內(nèi)存模式時(shí),.CODE偽指令表示的缺省段名為name_TEXT,即name是這個(gè)段名的可變部分,當(dāng)程序模塊有一個(gè)具體名字時(shí),name就表示這個(gè)名字。.DATA、.CONST、.DATA?、.STACK定義的段內(nèi)數(shù)據(jù)存放在一個(gè)叫DGROUP的段組中,各個(gè)段內(nèi)的偏移地址均以這個(gè)起始地址為起點(diǎn),而不依本段內(nèi)的段地址為起點(diǎn)。.FARDATA或.FARDATA?偽指令使用的缺省名在各種模式下可以替換,它們定義的段內(nèi)數(shù)據(jù)不放在任何段中,屬于遠(yuǎn)程數(shù)據(jù)。內(nèi)存模式段定義偽指令段名定位組合類(lèi)別組名Small.CODE.DATA.CONST.D

48、ATA?.STACK_TEXT_DATACONST_BSSSTACKWORDWORDWORDWORDPARAPUBLICPUBLICPUBLICPUBLICSTACKCODEDATACONSTBSSSTACKDGROUPDGROUPDGROUPDGROUP04 九月 20223段名的缺省名內(nèi)存段定義段名定位組合類(lèi)09 九月 20224.等價(jià)名的使用MASM 5.0中規(guī)定了幾個(gè)等價(jià)名代替真實(shí)名??梢杂么婧?jiǎn)化段定義偽指令前面的小數(shù)點(diǎn)。CODE代表.CODE定義的段名;FARDATA代表.FARDATA定義的段名;DATA代表.DATA、.DATA?、.CONST和.STACK共享的組段名。例:

49、ASSUME ES:FARDATA ;ES為遠(yuǎn)程數(shù)據(jù)段地址 MOV AX,DATA MOV DS,AX ;DS為DGROUP段組段地址 MOV AX,FARDATA MOV ES,AX5.段序定義偽指令MASM可以按照源程序中各個(gè)段出現(xiàn)的次序來(lái)排列目標(biāo)文件中各段的先后次序,也可以按照段名的字母順序來(lái)排列次序。缺省情況是按照段出現(xiàn)的次序來(lái)排列,可以定義段序: .ALHPA:按照字母順序?qū)Χ闻判颉?.SEG:按照段出現(xiàn)的順序?qū)Χ闻判颉M暾味x格式中,默認(rèn)按此順序。 .DOSSEG:按照DOS定義的標(biāo)準(zhǔn)段序?qū)Χ闻判颍樞驗(yàn)?代碼段、數(shù)據(jù)段、堆棧段。采用.MODEL偽指令的簡(jiǎn)化段定義格式默認(rèn)按此順序

50、。04 九月 20224.等價(jià)名的使用09 九月 2022三、使用簡(jiǎn)化段定義的程序框架(1)EXE標(biāo)準(zhǔn)程序框架匯編語(yǔ)言源程序經(jīng)過(guò)匯編和連接后生成可執(zhí)行文件(.exe)。操作系統(tǒng)為程序建立了一個(gè)程序段前綴區(qū)PSP,其長(zhǎng)度為256個(gè)字節(jié),主要用于存放用戶程序的有關(guān)信息,如文件名、文件長(zhǎng)度等。而在偏移100H處才裝入程序本身。EXE程序加載要重新定位:1)DS和ES指向PSP段地址,而不是程序的數(shù)據(jù)段和附加段,所以需在程序中根據(jù)實(shí)際數(shù)據(jù)段改變DS和ES;2)CS:IP和SS:SP是由連接程序確定的值,指向程序的代碼段和堆棧段。如果不指定堆棧段,則SS=PSP段地址,SP=100H,堆棧段占用PSP中

51、的部分區(qū)域。04 九月 2022三、使用簡(jiǎn)化段定義的程序框架09 九月 2022例 .MODEL SMALL ;小內(nèi)存模式 .586 ;可匯編并運(yùn)行586指令 .STACK 100H ;256字節(jié)堆棧 .DATA MSG DB Welcome$ ;要寫(xiě)的信息 .CODE .STARTUP MOV DX,OFFSET MSG ;信息存儲(chǔ)區(qū)首地址送DX MOV AH,9H INT 21H ;DOS寫(xiě)功能調(diào)用,在屏幕顯示變量MSG內(nèi)容 Welcome .EXIT 0 ;返回 END04 九月 2022例 09 九月 2022(2).COM格式的程序框架.COM程序是一種將代碼、數(shù)據(jù)和堆棧段合一的結(jié)構(gòu)緊湊的程序,所有的段都在一個(gè)邏輯段內(nèi),不超過(guò)64KB。在程序中采用.MODEL TINY模式定義語(yǔ)句即可生成COM結(jié)構(gòu)的程序。COM文件存儲(chǔ)在磁盤(pán)上是主存的完全影像,不包含重新定位的加載信息,加載速度更快,占用的磁盤(pán)空間更少。COM程序加載后:1)所有段地址都指向PSP的段地址;2)程序執(zhí)行起點(diǎn)是PSP后的第一條指令,既IP=100H;也就是說(shuō),COM程序的第一條指令必須是可執(zhí)行指令,即程序的起始執(zhí)行處是程序頭。

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論