![匯編語言程序格式課件_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/fdde7ace-70c1-44ce-95b0-c232dce99321/fdde7ace-70c1-44ce-95b0-c232dce993211.gif)
![匯編語言程序格式課件_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/fdde7ace-70c1-44ce-95b0-c232dce99321/fdde7ace-70c1-44ce-95b0-c232dce993212.gif)
![匯編語言程序格式課件_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/fdde7ace-70c1-44ce-95b0-c232dce99321/fdde7ace-70c1-44ce-95b0-c232dce993213.gif)
![匯編語言程序格式課件_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/fdde7ace-70c1-44ce-95b0-c232dce99321/fdde7ace-70c1-44ce-95b0-c232dce993214.gif)
![匯編語言程序格式課件_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/26/fdde7ace-70c1-44ce-95b0-c232dce99321/fdde7ace-70c1-44ce-95b0-c232dce993215.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、匯編語言程序格式第四章 匯編語言程序格式4.1 匯編語言程序功能1、匯編語言程序的建立及匯編過程、匯編語言程序的建立及匯編過程 用編輯程序建立ASM源程序 用ASM程序把ASM文件轉(zhuǎn)換為OBJ文件 用LINK程序把OBJ文件轉(zhuǎn)換為EXE文件 用DOS命令直接鍵入文件名就可以執(zhí)行該程序匯編語言程序格式2、匯編程序的主要功能、匯編程序的主要功能 檢查源程序 策出源程序中的語法錯誤,并給出出錯信息 產(chǎn)生源程序的目標程序,并可給出列表文件(同時列出匯編語言和機器語言的文件,稱為LST文件) 展開宏命令匯編語言程序格式4.2 4.2 偽偽 操操 作作 匯編語句由指令、偽指令、宏指令構(gòu)成 指令:每條指令語
2、句都生成機器代碼,各對應(yīng)一種CPU操作,在程序運行時執(zhí)行。 偽指令:在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作,可以完成如數(shù)據(jù)定義、分配存儲區(qū)、指示程序結(jié)束等功能,不生成目標代碼。 宏指令:用戶按照宏定義格式編寫的一段程序,可以包含指令、偽指令、甚至其他宏指令。偽指令與機器無關(guān),取決于匯編程序的版本,版?zhèn)沃噶钆c機器無關(guān),取決于匯編程序的版本,版本越高,提供的偽指令數(shù)目增加,功能增強;如本越高,提供的偽指令數(shù)目增加,功能增強;如MASM6.0提供了提供了.IF/.ENDIF等語句,使匯編語言等語句,使匯編語言程序設(shè)計類似高級語言的形式。程序設(shè)計類似高級語言的形式。匯編語言程序格式4.2.2
3、段定義偽操作段定義偽操作存儲器的物理地址是由段地址和偏移地址組合而成的,匯編程序在把源程序轉(zhuǎn)換為目標程序時,必須確定標號和變量的偏移地址,并且需要把有關(guān)信息通過目標模塊傳送給連接程序,以便連接程序把不同的段和模塊連接在一起形成一個可執(zhí)行程序。為此,需要用段定義偽操作。匯編語言程序格式 段定義偽操作格式格式為:段名 SEGMENT 定位 組合 段字 類別 段名 ENDS 說明說明:段名由用戶自己起,要符合匯編語句對名字的要求。SEGMENT定義一個段的開始,ENDS定義該段的結(jié)束。刪節(jié)部分,對于數(shù)據(jù)段、附加段和堆棧段來說,一般是存儲單元的定義、分配等偽操作;對于代碼段則是指令及偽操作定位屬性:指
4、定邏輯段的起始地址定位屬性:指定邏輯段的起始地址BYTE:為下一個可用的字節(jié)地址:為下一個可用的字節(jié)地址(xxxx xxxxB)WORD:為下一個可用的偶數(shù)地址:為下一個可用的偶數(shù)地址(xxxx xxx0B)DWORD:下一個可被:下一個可被4整除的地址整除的地址(xxxx xx00B)PARA:下一個可被:下一個可被16整除的地址整除的地址(xxxx 0000B)PAGE:下一個可被:下一個可被256整除的地址整除的地址(0000 0000B)默認的定位屬性為默認的定位屬性為PARA。簡化段定義中,代碼段和。簡化段定義中,代碼段和數(shù)據(jù)段默認的定位屬性為數(shù)據(jù)段默認的定位屬性為WORD,堆棧段為
5、,堆棧段為PARA。組合屬性:指定段與段之間的關(guān)系。組合屬性:指定段與段之間的關(guān)系。 通常在多模塊設(shè)計時使用,單模塊下,除堆棧段必須通常在多模塊設(shè)計時使用,單模塊下,除堆棧段必須使用組合屬性使用組合屬性 STACK 外,其它段使用默認值即可。完整外,其它段使用默認值即可。完整段定義時,默認的組合屬性為段定義時,默認的組合屬性為PRIVATE,意思是各段相互,意思是各段相互獨立,不與其它段合并,各段都有自己的段地址;簡化段獨立,不與其它段合并,各段都有自己的段地址;簡化段定義時,默認的組合屬性為定義時,默認的組合屬性為PUBLIC,意思是告訴連接程,意思是告訴連接程序把本段與所有同名的其它段相鄰
6、地連接在一起,并合并序把本段與所有同名的其它段相鄰地連接在一起,并合并為同一個段,共用一個段地址。為同一個段,共用一個段地址。段字屬性段字屬性(use16use32): MASM5.0以后版本增加。對以后版本增加。對8086使用默認值(使用默認值(16位段),對位段),對32位位CPU默認采用默認采用32位段,當然,也可以設(shè)置成位段,當然,也可以設(shè)置成16位段。位段。類別屬性:類別屬性:類別名類別名。類別名相同的段相鄰連接但各。類別名相同的段相鄰連接但各有各的段地址。通常使用有各的段地址。通常使用code,date和和stack等類等類別名,以保持所有代碼和數(shù)據(jù)的連續(xù)。別名,以保持所有代碼和數(shù)
7、據(jù)的連續(xù)。1. 完整的段定義偽操作完整的段定義偽操作匯編語言程序格式2. 存儲模式與簡化段定義偽操作存儲模式與簡化段定義偽操作 存儲模式偽指令存儲模式偽指令.model 存儲模式,語言類型,系統(tǒng)類型,堆棧選項使用簡化段定義格式時,必須使用。必須位于所有段定義語句之前。7種不同的存儲模式:tiny,small.medium,compact,large,huge,flat匯編語言程序格式簡化段定義標準格式:簡化段定義標準格式:.model small.stack.data.code.startup.exit 0end存儲模式偽指令存儲模式偽指令;子程序代碼;子程序代碼;程序代碼;程序代碼;數(shù)據(jù)定義
8、;數(shù)據(jù)定義程序開始偽指令程序開始偽指令程序結(jié)束偽指令程序結(jié)束偽指令匯編結(jié)束偽指令匯編結(jié)束偽指令.stack 大小大?。簞?chuàng)建堆棧段,段名:創(chuàng)建堆棧段,段名:STACK.STACK 512;創(chuàng)建;創(chuàng)建512字節(jié)的堆棧段。字節(jié)的堆棧段。 .STACK ;創(chuàng)建;創(chuàng)建1024字節(jié)(默認)的堆棧段。字節(jié)(默認)的堆棧段。.DATA ;創(chuàng)建數(shù)據(jù)段,段名:;創(chuàng)建數(shù)據(jù)段,段名:_DATA.DATA ? ;數(shù)據(jù)段,無初值變量專用(;數(shù)據(jù)段,無初值變量專用(_BSS).CONST ;只讀的常量數(shù)據(jù)段(;只讀的常量數(shù)據(jù)段(CONST).CODE 段名段名;創(chuàng)建代碼段,在;創(chuàng)建代碼段,在SMALL模模式下,默認的段名為
9、:式下,默認的段名為:_TEXT沒有段定義結(jié)束語句,下一個段的開始,就沒有段定義結(jié)束語句,下一個段的開始,就是本段的結(jié)束。是本段的結(jié)束。匯編語言程序格式3、段組定義偽指令、段組定義偽指令組名 GROUP 段名,段名將多個同類但不同名的段合并為一個不超過64KB的物理段,并使用組名統(tǒng)一訪問它。可理解為組合屬性PUBLIC的補充。匯編語言程序格式4.2.3 程序開始和結(jié)束偽操作程序開始和結(jié)束偽操作 程序的開始可用NAME或TITLE為模塊取名字。格式為:NAMEmodule-nameTITLEtext 程序的結(jié)束可以用END來表示。格式為:ENDlabel匯編語言程序格式4.2.4 數(shù)據(jù)定義及存儲
10、器分配偽操作數(shù)據(jù)定義及存儲器分配偽操作 格式格式:變量名 助記符 操作數(shù) ;注釋 功能功能:為變量分配單元,并為其初始化或者只預(yù)留空間。 說明說明:變量名是可有可無的,需要時由用戶自己起。變量名用符號地址表示,作用與語句前的標號相同,但它的后邊不需要冒號,它也是其中第一個數(shù)據(jù)項的偏移量。程序通過變量名引用其中的數(shù)據(jù)。匯編語言程序的語句格式匯編語言程序的語句格式 兩類語句:兩類語句:1)執(zhí)行性語句)執(zhí)行性語句 2)說明性語句)說明性語句1)執(zhí)行性語句(硬指令、代碼段)執(zhí)行性語句(硬指令、代碼段)標號:標號:硬指令助記符硬指令助記符 操作數(shù)操作數(shù),操作數(shù),操作數(shù) ;注釋;注釋2)說明性語句(偽指令
11、、可位于任何段)說明性語句(偽指令、可位于任何段) 名字名字 偽指令助記符偽指令助記符 參數(shù),參數(shù)參數(shù),參數(shù);注釋;注釋匯編語言程序格式助記符是數(shù)據(jù)類型的符號表示。助記符數(shù)據(jù)類型 一個數(shù)據(jù)項字節(jié)數(shù)DB(BYTE)字節(jié)型1DW(WORD)字型2DD(DWORD)雙字型4DQ(QWORD)四字型8DF(FWORD)六字節(jié)型(386以上機型有效) 6DT(TBYTE)10字節(jié)型10匯編語言程序格式v操作數(shù)可以是數(shù)字常量、數(shù)值表達式、字符串常量、地址表達式、?、 DUP(操作數(shù),)形式。數(shù)字常量及數(shù)值表達式:數(shù)字常量及數(shù)值表達式:操作數(shù)可以是常數(shù)、表達式。數(shù)字中若出現(xiàn)字母形式,不區(qū)分大小寫。如下所示:
12、二進制數(shù):以B結(jié)尾,有效數(shù)字是0、1。 八進制數(shù):以Q或O(字母)結(jié)尾,有效數(shù)字是07。十進制數(shù):以D結(jié)尾,匯編語言中缺省值是十進制數(shù),所以D可以省略不寫。有效數(shù)字是09。十六進制數(shù):以H結(jié)尾,有效數(shù)字是09和A(a)F(f)。若第一位數(shù)字是字母形式,則必須在前邊加上0(數(shù)字)。匯編語言程序格式字符串常量字符串常量在匯編語言中字符需要用單引號括起來,其值為字符的ASCII值。因為每個字符占用一個字節(jié),所以最好用DB助記符定義字符串。地址表達式地址表達式操作數(shù)可以是地址符號。若只定義符號的偏移量部分,則使用DW助記符。若要定義它的雙字長地址指針(既含16位偏移量又含段基址),則使用DD助記符,其
13、中低字中存放偏移量,高字中存放段基址。若要定義它的全地址指針(既含32位偏移量又含段基址),則使用DF助記符,其中低32位存放偏移量,高16位存放段基址。例如,“VAR DW LAB”語句在匯編后VAR中含有LAB的偏移量。匯編語言程序格式 ?在程序中使用操作數(shù)?為變量預(yù)留空間而不賦初值。n DUPn DUP(操作數(shù),(操作數(shù),)DUP是復(fù)制操作符,若要對某些數(shù)據(jù)重復(fù)多次,可以使用這種格式。其功能是把( )中的內(nèi)容復(fù)制n次。DUP操作可以嵌套使用。匯編語言程序格式 例例1. 1. M1M1 DB DB 15,67H,11110000B,15,67H,11110000B,?M2M2 DB DB
14、15,AB$15,AB$M3M3 DW DW 4 4* *5 5M4M4 DD DD 1234H1234HM5M5 DB DB 2 DUP(5,A)2 DUP(5,A)M6M6 DW DW M2M2;M2;M2的偏移量的偏移量M7M7 DD DD M2M2;M2;M2的偏移量、段基址的偏移量、段基址 M8 DB M8 DB ABAB M9 DW M9 DW ABAB設(shè)以上數(shù)據(jù)自設(shè)以上數(shù)據(jù)自1470:00001470:0000開始存放,則為:開始存放,則為: 0F0F 67 F0 0067 F0 00 31 35 41 42 2431 35 41 42 24 14 0014 00 34 12 3
15、4 12 00 0000 00 05 41 05 4105 41 05 41 04 0004 00 04 00 70 1404 00 70 14匯編語言程序格式例2可直接通過變量名引用變量,但要注意類型匹配。例如以下程序片段:MOV AL,M1;(AL) 15MOV BX,M3;(BX) 20ADD M3,6;(M3) 26MOV AL,M2;(AL)131HMOV BL,M2+2;(BL)A41HMOV M1+3,BL;(M13) 41H匯編語言程序格式 PTR屬性操作符屬性操作符格式:格式:類型名 PTR 變量|標號給變量或標號指定類型屬性BYTE、WORD、WORD、 ; NEAR、 F
16、AR;STRUCT、RECORD等類型的定義。例:OPER1 DB 1,2OPER2 DW 1234HMOV AX,WORD PTR OPER1MOV AL,BYTE PTR OPER2匯編語言程序格式 LABELLABEL偽指令偽指令格式格式:名字 LABEL 類型功能:功能:為下一個存儲單元起一個名字并定義它的類型說明說明:對于變量,類型可以是BYTE、WORD、DWORD等。對于標號,其類型可以是NEAR、FAR。LABEL偽指令并不為名字分配空間,但它可以為下一個存儲單元另起名字而且另定義它的類型,從而可以使同一地址具有不同類型的名字,便于引用。匯編語言程序格式例. REDEW LAB
17、EL WORDDEBYTEDB 25H,32H,56H,42HMOV BL,DEBYTE;(BL)=25HMOV CX,REDEW ;(CX)=3225H以上程序片段執(zhí)行情況見下圖匯編語言程序格式25H25H32H32H56H56H42H42HREDEWREDEWLABELLABEL語句功能示意圖語句功能示意圖25H25HDEBYTEDEBYTE3225H3225HBLBLCXCX匯編語言程序格式4.2.5 表達式賦值操作EQU 格式格式:符號名 EQU 表達式 功能:功能:用符號名代表表達式或表達式的值。 說明說明:表達式可以是任何有效的操作數(shù)格式。例如常數(shù)、數(shù)值表達式、另一符號名或助記符。
18、 注意注意:用EQU定義的符號在同一個程序中不能再定義。 用途用途:增加程序可讀性、縮短程序書寫長度、避免因為某些修改而帶來的程序不一致性。EQU偽指令經(jīng)常與配合使用,得到變量分配的字節(jié)數(shù)。匯編語言程序格式例. MSG DB This is first string. Count equ $msgCR EQU 0DH ;回車符的ASCII值PORT_B EQU 61H;定義PORT_ B端口 B EQU BP6 ; BP6用B表示程序中可以通過符號引用這些值,例如:MOVAL,CR ;等價于 MOV AL, 0DHADDBL,B ;等價于ADD BL,BP6)OUTPORT_B,AL ;輸出到
19、61H端口Movcl,count;(CL)MSG的串長21匯編語言程序格式4.2.6 4.2.6 地址計數(shù)器與對準偽操作地址計數(shù)器與對準偽操作 地址計數(shù)器$ 在匯編語言對源程序匯編的過程中,可使用地址計數(shù)器來保存當前正在匯編的指令的地址。地址計數(shù)器的值可用$來表示。如ORG $+8 JNE $+6 EVEN 功能:使下一個字節(jié)地址成為偶數(shù) ORG 表達式使下一個字節(jié)的地址成為常數(shù)表達式的值 ALIGN n 使它后面的數(shù)據(jù)或指令從n的整數(shù)倍地址開始(可被n整除)。使它后面的數(shù)據(jù)或指令從偶地址開始使它后面的數(shù)據(jù)或指令從偶地址開始使地址計數(shù)器指向參數(shù)表達的偏移地址使使地址計數(shù)器指向參數(shù)表達的偏移地址
20、使它后面的數(shù)據(jù)或指令從偶地址開始它后面的數(shù)據(jù)或指令從偶地址開始n是是2的乘方(的乘方(2,4,8)且小于所在段的定位屬性值。)且小于所在段的定位屬性值。如如“ALIGN 4”,使下一個地址開始于雙字邊界。,使下一個地址開始于雙字邊界。匯編語言程序格式4.2.7 4.2.7 基數(shù)控制偽操作基數(shù)控制偽操作 匯編程序默認的是十進制數(shù)。 二進制數(shù)后面有B;十進制數(shù)后面有D;十六進制數(shù)后面有H;八進制數(shù)后面O或Q 字符串可以看成串常數(shù),可以用單引號或雙引號把字符串放在其中 RADIX 偽操作:可以把默認的基數(shù)改為216范圍內(nèi)的任何基數(shù)。 格式為:RADIXexpression匯編語言程序格式4.3.1
21、4.3.1 名字項名字項 源程序中可以用下列字符來表示名字:字母AZ;數(shù)字09;專用字符?、-、$ 名字項可以是標號或變量。 標號:標號在代碼段中定義,后面跟冒號 標號有三種屬性:段、偏移、類型。 變量:在除代碼段以外的其他段中定義,不跟冒號,常在數(shù)據(jù)段中出現(xiàn)4.3 匯編語言程序格式都用來表示本語句的符號地址,可有可無可用LABEL或EQU來定義可用LABEL或EQU來定義;有段、偏移、類型三種屬性。匯編語言程序格式4.3.3 4.3.3 操作數(shù)項操作數(shù)項 操作數(shù)項由一個或多個表達式組成,多個操作數(shù)項之間用逗號隔開。對于指令,操作數(shù)項一般給出操作數(shù)地址;對于偽操作或宏指令,則給出他們所要求的參
22、數(shù)。 操作數(shù)項可以是常數(shù)、寄存器、標號、變量或由表達式組成。表達式可以是常數(shù)、寄存器、標號、變量與一些操作符相組合的序列??梢杂袛?shù)字表達式和地址表達式兩種匯編語言程序格式 算術(shù)操作符算術(shù)操作符包括、*、和MOD(取模)操作符。算術(shù)操作符可以用在數(shù)值表達式或地址表達式中,但當用于地址表達式時,要注意只有當其結(jié)果有明確的物理意義時才是有效的。經(jīng)常使用在地址表達式中的算術(shù)操作符是和,例如FIRST1是指緊跟FIRST單元之后的單元地址(注意不是FIRST單元的內(nèi)容加1)。匯編語言程序格式 邏輯操作符邏輯操作符包括AND(邏輯與)、OR(邏輯或)、XOR(邏輯異或)和NOT
23、(邏輯非)。邏輯操作符是按位操作的,它只能用在數(shù)值表達式中。雖然這些操作符與邏輯指令助記符的表示方法及操作相同,但它們的執(zhí)行時間不同,前者在匯編時執(zhí)行,后者在程序執(zhí)行時執(zhí)行。例.PORT EQU 0FH AND DL ,PORT AND 0FEH匯編語言程序格式 關(guān)系操作符關(guān)系操作符關(guān)系操作符包括EQ(等于)、NE(不等于)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)。其操作結(jié)果為一個邏輯值,若關(guān)系成立結(jié)果為真(全1),否則結(jié)果為假(0)。其中的操作數(shù)必須是數(shù)字或同段內(nèi)的兩個存儲器地址。例.指令MOV AL,CH LT 20的匯編結(jié)果: MOV
24、 AL,0FFH;當CH20時或:MOV AL,0;當CH20時匯編語言程序格式 數(shù)值回送操作符數(shù)值回送操作符這組操作符可以把一些特征或內(nèi)存單元地址的組成部分作為數(shù)值返回。它們是TYPE、LENGTH、SIZE、SEG、OFFSET和匯編語言程序格式格格 式式功功 能能TYPE TYPE 變量變量TYPE TYPE 標號標號返回變量或者標號的類型代碼返回變量或者標號的類型代碼11LENGTH LENGTH 變量變量返回由返回由 dup ( dup (操作數(shù)操作數(shù),),)格式定義的格式定義的n n值,值,其它情況回送其它情況回送1 1SIZE SIZE 變量變量返回
25、分配給變量的字節(jié)數(shù),只對由返回分配給變量的字節(jié)數(shù),只對由 dup ( dup (操操作數(shù)作數(shù),),)格式定義的變量有實際意義格式定義的變量有實際意義22SEG SEG 變量變量SEG SEG 標號標號返回變量或者標號的段基址返回變量或者標號的段基址OFFSET OFFSET 變量變量OFFSET OFFSET 標號標號返回變量或者標號的偏移量返回變量或者標號的偏移量返回地址計數(shù)器的當前值返回地址計數(shù)器的當前值 注注11:若使用:若使用TYPE TYPE 變量,則返回一個數(shù)據(jù)項占用的字節(jié)數(shù)。例若變量用變量,則返回一個數(shù)據(jù)項占用的字節(jié)數(shù)。例若變量用DBDB定義,則返回定義,則返回1 1;用;用DW
26、DW定義定義返回返回22;若用結(jié)構(gòu)定義則返回該結(jié)構(gòu)占用的字節(jié)數(shù)。若使用;若用結(jié)構(gòu)定義則返回該結(jié)構(gòu)占用的字節(jié)數(shù)。若使用TYPE TYPE 標號,則標號,則NEARNEAR型標號返回型標號返回1 1,F(xiàn)ARFAR型型標號返回標號返回2 2。 注注22:SIZESIZETYPETYPE* *LENGTHLENGTH,只有在變量用,只有在變量用 dup ( dup (操作數(shù)操作數(shù),),)時表示該變量占用的字節(jié)數(shù)。因為時表示該變量占用的字節(jié)數(shù)。因為LENGTHLENGTH在其它情況下總是回送在其它情況下總是回送1 1,此時,此時SIZESIZE也就失去實際意義。也就失去實際意義。變量:變量: DB DW
27、 DD DQ DT返回值返回值 1 2 4 8 10標號:標號: NEAR FAR 返回值返回值 -1 -2匯編語言程序格式 屬性操作符屬性操作符1、 PTR操作符 格式:類型 PTR 地址表達式 功能:指定地址表達式的類型。 說明:若是變量的地址表達式,則類型可以是BYTE、WORD、DWORD等。若是標號的地址表達式,則類型可以是FAR、NEAR。PTR經(jīng)常用在臨時改變地址類型或必須明確指出類型的場合。匯編語言程序格式2、段操作符 用來表示一個標量、變量或地址表達式的段屬性 可以用段寄存器:地址表達式來表示,也可以用段名:地址表達式或組名:地址表達式來表示匯編
28、語言程序格式3、SHORT操作符用來修飾JMP指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向地址是在下一條指令地址的-128+127字節(jié)范圍之內(nèi)。例如:JMP SHORT LAB匯編語言程序格式4、THIS操作符 格式:THIS 類型 功能:為存儲器操作數(shù)指定類型。該操作數(shù)地址與下一個存儲單元具有相同的段基址和偏移量。 說明:它并不為該存儲器操作數(shù)分配空間。與LABEL偽指令的功能有相似之處,但其區(qū)別是所出現(xiàn)的位置不同,THIS出現(xiàn)在操作數(shù)位置,與EQU偽指令配合定義一個具有類型、段基址和偏移量三屬性的表示存儲器操作數(shù)的符號。而LABEL是一條獨立使用的偽指令。匯編語言程序格式5、 HIGH、LOW操作符這兩
29、個操作符被稱為字節(jié)分離操作符,它接收一個數(shù)字或地址表達式,HIGH取其高字節(jié),LOW取其低字節(jié)。例.COUNTEQU 1234HMOVAL ,LOW COUNT匯編結(jié)果為:MOV AL,34H匯編語言程序格式4.3.4 注釋項 注釋項用來說明一段程序或一條或幾條指令的功能,可有可無。匯編語言程序格式 段定義偽操作格式格式為:段名 SEGMENT 定位 組合 段字 類別 段名 ENDS 說明說明:段名由用戶自己起,要符合匯編語句對名字的要求。SEGMENT定義一個段的開始,ENDS定義該段的結(jié)束。刪節(jié)部分,對于數(shù)據(jù)段、附加段和堆棧段來說,一般是存儲單元的定義、分配等偽操作;對于代碼段則是指令及偽
30、操作定位屬性:指定邏輯段的起始地址定位屬性:指定邏輯段的起始地址BYTE:為下一個可用的字節(jié)地址:為下一個可用的字節(jié)地址(xxxx xxxxB)WORD:為下一個可用的偶數(shù)地址:為下一個可用的偶數(shù)地址(xxxx xxx0B)DWORD:下一個可被:下一個可被4整除的地址整除的地址(xxxx xx00B)PARA:下一個可被:下一個可被16整除的地址整除的地址(xxxx 0000B)PAGE:下一個可被:下一個可被256整除的地址整除的地址(0000 0000B)默認的定位屬性為默認的定位屬性為PARA。簡化段定義中,代碼段和。簡化段定義中,代碼段和數(shù)據(jù)段默認的定位屬性為數(shù)據(jù)段默認的定位屬性為W
31、ORD,堆棧段為,堆棧段為PARA。組合屬性:指定段與段之間的關(guān)系。組合屬性:指定段與段之間的關(guān)系。 通常在多模塊設(shè)計時使用,單模塊下,除堆棧段必須通常在多模塊設(shè)計時使用,單模塊下,除堆棧段必須使用組合屬性使用組合屬性 STACK 外,其它段使用默認值即可。完整外,其它段使用默認值即可。完整段定義時,默認的組合屬性為段定義時,默認的組合屬性為PRIVATE,意思是各段相互,意思是各段相互獨立,不與其它段合并,各段都有自己的段地址;簡化段獨立,不與其它段合并,各段都有自己的段地址;簡化段定義時,默認的組合屬性為定義時,默認的組合屬性為PUBLIC,意思是告訴連接程,意思是告訴連接程序把本段與所有
32、同名的其它段相鄰地連接在一起,并合并序把本段與所有同名的其它段相鄰地連接在一起,并合并為同一個段,共用一個段地址。為同一個段,共用一個段地址。段字屬性段字屬性(use16use32): MASM5.0以后版本增加。對以后版本增加。對8086使用默認值(使用默認值(16位段),對位段),對32位位CPU默認采用默認采用32位段,當然,也可以設(shè)置成位段,當然,也可以設(shè)置成16位段。位段。類別屬性:類別屬性:類別名類別名。類別名相同的段相鄰連接但各。類別名相同的段相鄰連接但各有各的段地址。通常使用有各的段地址。通常使用code,date和和stack等類等類別名,以保持所有代碼和數(shù)據(jù)的連續(xù)。別名,以
33、保持所有代碼和數(shù)據(jù)的連續(xù)。1. 完整的段定義偽操作完整的段定義偽操作4.4 匯編語言程序的上機過程匯編語言程序格式 ASSUME偽指令格式:格式: ASSUME 段寄存器:段名,段寄存器:段名功能:功能:說明段寄存器和段之間的關(guān)系。說明:說明:若一個段寄存器與NOTHING關(guān)聯(lián),則表示取消前邊對該段寄存器的假設(shè),可以省略。ASSUME語句并不給段寄存器賦值,它應(yīng)放在引用段寄存器之前,通常放在代碼段或主過程的第一個語句位置。ASSUME偽操作只是指定某個段分配給哪個段寄存器(CS、DS、SS、ES),并不能把段地址裝入段寄存器中,因此在代碼段中,還必須把段地址裝入相應(yīng)的段寄存器中。建立段寄存器與
34、段之間的缺省關(guān)系,改變這建立段寄存器與段之間的缺省關(guān)系,改變這種缺省關(guān)系可使用段跨越前綴。種缺省關(guān)系可使用段跨越前綴。 如如 ASSUME CS:CODE,DS:DATAASSUME 段寄存器:段寄存器:NOTHING 對指令給出的段寄存器取消已經(jīng)指對指令給出的段寄存器取消已經(jīng)指定的缺省關(guān)系。定的缺省關(guān)系。匯編語言程序格式返回返回DOS的兩種方法的兩種方法方法一:code segmentmain pro far assumestart: push dsmov ax,0push axretmain endpcode endsend start方法二:code segmentmain pro fa
35、r assumestart: mov ah,4chInt 21hmain endpcode endsend start匯編語言程序格式在Masm for Windows中集成CV(全稱CodeView)與DEGUB兩種調(diào)試工具,默認為用CV調(diào)試程序。(1)用CV調(diào)試先單擊“運行”按鈕生成EXE文件,再單擊“調(diào)試”按鈕,出現(xiàn)圖1界面。說明:圖1是調(diào)試求3+5的匯編程序,當連續(xù)按F10或連續(xù)在命令窗口輸入P命令執(zhí)行到ADD AL,03時,可以看到AL的值為8。 匯編語言程序格式CVCV的功能鍵的功能鍵 F2:顯示/隱含的寄存器組窗口F3:以不同的顯示方式顯示當前執(zhí)行的程序F4:顯示程序的輸出屏幕F
36、5/F7: 執(zhí)行到下一個邏輯斷點,或到程序尾F6:依次進入當前屏幕所顯示的窗口F8:單步執(zhí)行指令,并進入被調(diào)用的子程序F9:在源程序行中設(shè)置/取消斷點,用鼠標左鍵雙擊之也可F10:單步執(zhí)行指令,但不進入被調(diào)用的子程序匯編語言程序格式調(diào)試程序調(diào)試程序DEBUGDEBUG的使用的使用DEBUG.EXEDEBUG.EXE是是DOSDOS提供的用于調(diào)試可執(zhí)行程序提供的用于調(diào)試可執(zhí)行程序的工具軟件,是匯編語言程序設(shè)計中常用的調(diào)試的工具軟件,是匯編語言程序設(shè)計中常用的調(diào)試工具。在工具。在DEBUGDEBUG環(huán)境下,不但可以調(diào)試經(jīng)匯編、環(huán)境下,不但可以調(diào)試經(jīng)匯編、連接后生成的可執(zhí)行程序,也可以編寫簡單的程連
37、接后生成的可執(zhí)行程序,也可以編寫簡單的程序。序。匯編語言程序格式1.啟動啟動DEBUG程序程序 在在DOS提示符下鍵入:提示符下鍵入:DEBUG (表示回車表示回車)Debug執(zhí)行,屏幕顯示提示符執(zhí)行,屏幕顯示提示符“”,說明計算機當前處于,說明計算機當前處于DEBUG的管理之下,可接受、并執(zhí)行的管理之下,可接受、并執(zhí)行DEBUG命令。命令。 在在DOS提示符下鍵入:提示符下鍵入:DEBUG 路徑路徑文件名文件名 DEBUG執(zhí)行,并將指定文件裝入內(nèi)存,供調(diào)試。執(zhí)行,并將指定文件裝入內(nèi)存,供調(diào)試。如不指定被調(diào)試程序,如不指定被調(diào)試程序,DEBUG設(shè)置所有段寄存器的值相同,設(shè)置所有段寄存器的值相同
38、,并指向最低的、可用的段地址;并指向最低的、可用的段地址;SP指向本段的尾部;指向本段的尾部;IP指指向本段的向本段的0100H單元;其它通用寄存器和所有狀態(tài)標志清單元;其它通用寄存器和所有狀態(tài)標志清0。匯編語言程序格式v 如帶入的被調(diào)試程序擴展名不是如帶入的被調(diào)試程序擴展名不是.EXE.EXE,則,則BXBX、CXCX包含被調(diào)試文件長度(字節(jié)數(shù),包含被調(diào)試文件長度(字節(jié)數(shù),BXBX為高位),其他為高位),其他同上。同上。( (帶入帶入.COM.COM程序同此程序同此) )v 如帶入的被調(diào)試程序擴展名是如帶入的被調(diào)試程序擴展名是.EXE.EXE,則需要重新,則需要重新定位。定位。DS=ESDS
39、=ES指向當前最低的、可用的段地址(指向當前最低的、可用的段地址(PSPPSP的首字節(jié));的首字節(jié));CS:IPCS:IP和和SS:SPSS:SP根據(jù)被調(diào)試程序確定,根據(jù)被調(diào)試程序確定,分別指向代碼段和堆棧段;分別指向代碼段和堆棧段;BX.CXBX.CX為文件長度,其它為文件長度,其它通用寄存器和狀態(tài)標志清通用寄存器和狀態(tài)標志清0 0。匯編語言程序格式2 DEBUG命令和參數(shù)的格式命令和參數(shù)的格式1.命令格式命令格式 命令字母命令字母參數(shù)參數(shù)v 字母不分大小寫;字母不分大小寫;v只使用只使用1616進制數(shù),不加進制數(shù),不加H H;v分割符只在兩個數(shù)值之間是必須的,命令和分割符只在兩個數(shù)值之間是
40、必須的,命令和參數(shù)之間可有可無;參數(shù)之間可有可無;v鍵入回車鍵執(zhí)行命令,鍵入回車鍵執(zhí)行命令,Ctrl+BreakCtrl+Break或或Ctrl+CCtrl+C中止命令的執(zhí)行;中止命令的執(zhí)行;v如命令不符合如命令不符合DEBUGDEBUG的規(guī)則,則提示的規(guī)則,則提示“error”error”并使用并使用“”指示錯誤位置。指示錯誤位置。匯編語言程序格式2.參數(shù)格式參數(shù)格式表示地址表示地址(邏輯地址邏輯地址):段地址段地址:偏移地址偏移地址 D0400:2500 0400:2500 D10ac:010ac:0 Dds:04 ds:04 Dcs:100cs:100偏移地址偏移地址 D2505 250
41、5 D100 100 ;DEBUGDEBUG認為輸入的是認為輸入的是偏移地址,段地址采用默認的段寄存器,不同偏移地址,段地址采用默認的段寄存器,不同的命令默認不同的段寄存器,例如匯編命令默的命令默認不同的段寄存器,例如匯編命令默認認CSCS,顯示數(shù)據(jù)命令默認,顯示數(shù)據(jù)命令默認DSDS。既不送段地址,也不送偏移地址,段地址采用既不送段地址,也不送偏移地址,段地址采用默認的段寄存器,偏移地址采用當前值。默認的段寄存器,偏移地址采用當前值。只送段地址,省略偏移地址,非法。只送段地址,省略偏移地址,非法。如如DDSDS: 或或 D04000400:匯編語言程序格式表示范圍表示范圍 開始地址開始地址 結(jié)
42、束地址結(jié)束地址如如“D DS:0 50”,“D2AC0:100 D DS:0 50”,“D2AC0:100 200”,“D100 120”200”,“D100 120”注意:結(jié)束地址不能帶段地址注意:結(jié)束地址不能帶段地址 開始地址開始地址 L L 字節(jié)長度字節(jié)長度如如 “ “D DS:0 L 10”, “D100L20”D DS:0 L 10”, “D100L20”匯編語言程序格式 命命 令令 索索 引引D D命令命令E E命令命令F F命令命令R R命令命令A(yù) A命令命令U U命令命令G G命令命令T T命令命令P P命令命令Q Q命令命令N N命令命令L L命令命令W W命令命令C C命令
43、命令H H命令命令S S命令命令I(lǐng) I命令命令O O命令命令M M命令命令匯編語言程序格式3.DEBUG3.DEBUG命令命令1.1.顯示命令顯示命令D D D D 地址地址 D D 范圍范圍 ;如不指定范圍,一次顯示;如不指定范圍,一次顯示8 8行行1616個字節(jié)。個字節(jié)。 D ;默認段寄存器為;默認段寄存器為DS,當前偏移地址,當前偏移地址 D DS:100 /D CS:200 D 200:100 D 200;200為偏移地址,默認段寄存器為偏移地址,默認段寄存器DS D DS:100 110/ D 100 L 10匯編語言程序格式2.修改命令修改命令E E 地址地址 ;從指定地址開始,修
44、改(或連續(xù)修改)存儲;從指定地址開始,修改(或連續(xù)修改)存儲單元內(nèi)容。單元內(nèi)容。DEBUG首先顯示指定單元內(nèi)容,如要修改,首先顯示指定單元內(nèi)容,如要修改,可輸入新數(shù)據(jù);空格鍵顯示下一個單元內(nèi)容并可修改,減可輸入新數(shù)據(jù);空格鍵顯示下一個單元內(nèi)容并可修改,減號鍵顯示上一個單元內(nèi)容并可修改;如不修改,可直接按號鍵顯示上一個單元內(nèi)容并可修改;如不修改,可直接按空格鍵或減號鍵;回車鍵結(jié)束命令。空格鍵或減號鍵;回車鍵結(jié)束命令。 E 地址地址 數(shù)據(jù)表;從指定的地址開始用數(shù)據(jù)表給定的數(shù)數(shù)據(jù)表;從指定的地址開始用數(shù)據(jù)表給定的數(shù)據(jù)修改存儲單元。據(jù)修改存儲單元。 E DS:100 F3 AB 8D。匯編語言程序格式
45、3.添充命令添充命令FF 范圍范圍 數(shù)據(jù)表;數(shù)據(jù)表; 將數(shù)據(jù)表寫入指定范圍的存儲單元;數(shù)據(jù)個數(shù)將數(shù)據(jù)表寫入指定范圍的存儲單元;數(shù)據(jù)個數(shù) 多,忽略多出的數(shù)據(jù),個數(shù)少,則重復(fù)使用數(shù)據(jù)表。多,忽略多出的數(shù)據(jù),個數(shù)少,則重復(fù)使用數(shù)據(jù)表。 F DS:0 L5 01,02,03,04,05 F DS:0 L5 01 02 03 04 05(空格分隔)(空格分隔) F DS:0 L5 FF ;5個字節(jié)重復(fù)使用個字節(jié)重復(fù)使用FF 注意和注意和E命令的區(qū)別:命令的區(qū)別: E 地址地址 數(shù)據(jù)表數(shù)據(jù)表起始地址,不是范圍起始地址,不是范圍匯編語言程序格式4.4.顯示修改寄存器命令顯示修改寄存器命令R R R;顯示所有
46、寄存器和標志位狀態(tài);顯示當前;顯示所有寄存器和標志位狀態(tài);顯示當前CS:IP指向的指令。指向的指令。顯示標志時使用的符號:顯示標志時使用的符號:標志標志 標志標志=1 標志標志=0 OFOVNV DFDNUP IFEIDI SFNGPL ZFZRNZ AFACNA PFPEPO CFCYNC R 寄存器名;顯示并修改指定的寄存器。寄存器名;顯示并修改指定的寄存器。RAX ;RIP;RF等等匯編語言程序格式5.5.匯編命令匯編命令A(yù) AA 地址地址;從指定的地址開始輸入符號指令;如;從指定的地址開始輸入符號指令;如省略地址,則接著上一個省略地址,則接著上一個A命令的最后一個單元命令的最后一個單元
47、開始;若第一次使用開始;若第一次使用A命令省略地址,則從當前命令省略地址,則從當前CS:IP開始(通常是開始(通常是CS:100)。)。注釋注釋:在在DEBUG下編寫簡單程序即使用下編寫簡單程序即使用A命令。命令。每條指令后要按回車。每條指令后要按回車。不輸入指令按回車,或按不輸入指令按回車,或按Ctrl+C結(jié)束匯編。結(jié)束匯編。支持所有支持所有8086符號硬指令,偽指令只支持符號硬指令,偽指令只支持DB、DW,不支持各類符號名。,不支持各類符號名。匯編語言程序格式6.6.反匯編命令反匯編命令U U U 地址地址;從指定地址開始反匯編;從指定地址開始反匯編32個字節(jié)的個字節(jié)的機器指令;省略地址時
48、機器指令;省略地址時,則接著上一個則接著上一個U命令的最命令的最后一個單元開始;若第一次使用后一個單元開始;若第一次使用U命令省略地址,命令省略地址,則從當前則從當前CS:IP開始(通常是開始(通常是CS:100)。)。 U 范圍;對指定范圍的單元進行反匯編。范圍;對指定范圍的單元進行反匯編。 U U100 U100L10匯編語言程序格式7.7.運行程序命令運行程序命令G G G;從;從CS:IP指向的指令開始執(zhí)行程序,直到指向的指令開始執(zhí)行程序,直到程序結(jié)束或遇到程序結(jié)束或遇到INT 3。 G=地址;從指定地址開始執(zhí)行程序,直到程地址;從指定地址開始執(zhí)行程序,直到程序結(jié)束或遇到序結(jié)束或遇到INT 3。 G 斷點斷點1,斷點,斷點2,斷點斷點10;從;從CS:IP指向指向的指令開始執(zhí)行程序,直到遇到斷點。的指令開始執(zhí)行程序,直到遇到斷點。G=地址地址 斷點斷點1,斷點,斷點2,斷點斷點10 G ;從;從CS:IP指向的指令開始執(zhí)行程序。指向的指令開始執(zhí)行程序。 G=100 ;從指定地址開始執(zhí)行程序。;從指定地址開始執(zhí)行程序。 G=100 105 110 120注注 釋:釋:1)最多可設(shè)置)最多可設(shè)置10個斷點。個斷點。2)斷點必須
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建立高效的財務(wù)業(yè)務(wù)運作模式
- 2025年全球及中國工業(yè)級4-芐氧基苯酚行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國石墨片保護膜行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國消費電子NFC天線行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國旅游廣告和營銷服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球非侵入式血流動力學(xué)監(jiān)測解決方案行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國光伏舟托行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國晶須碳納米管行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國溴化鈣粉行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球高壓鎳氫電池行業(yè)調(diào)研及趨勢分析報告
- 2025年度新能源汽車充電站運營權(quán)轉(zhuǎn)讓合同樣本4篇
- 第5課 隋唐時期的民族交往與交融 課件(23張) 2024-2025學(xué)年統(tǒng)編版七年級歷史下冊
- 四年級數(shù)學(xué)下冊口算天天練45
- 雕塑采購?fù)稑朔桨福夹g(shù)標)
- 北京房地產(chǎn)典當合同書
- 文學(xué)類文本閱讀 高一語文統(tǒng)編版暑假作業(yè)
- 文明施工考核標準
- 《霧都孤兒人物分析4000字(論文)》
- MZ/T 039-2013老年人能力評估
- GB/T 6329-1996膠粘劑對接接頭拉伸強度的測定
- 2023年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(語文)試題庫含答案解析
評論
0/150
提交評論