h3-1匯編語言及程序設(shè)計1._第1頁
h3-1匯編語言及程序設(shè)計1._第2頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章匯編語言及程序設(shè)計本章要求:1.通過匯編語言程序設(shè)計進(jìn)一步掌握80 x86指令系統(tǒng)。2掌握匯編語言程序設(shè)計方法,包括:分支、 循環(huán)、子程序、宏、結(jié)構(gòu)和記錄等的設(shè)計。3.熟悉匯編語言上機(jī)過程。4.了解匯編語言源程序的結(jié)合、匯編語言和 高級語言的接口。3. 1匯編語言匯編語言的語句一般有2類:指令語句有其對應(yīng)的機(jī)器指令,匯編程 序在對源程序進(jìn)行匯編時,把指令語句翻譯成機(jī) 器指令。偽指令語句偽指令一般沒有其對應(yīng)的機(jī) 器指令(簡化的個別偽指令除外),只是指示匯編程 序如何匯編源程序,包括符號的定義、變量的定 義及段的定義等。33. 1. 1匯編語言格式標(biāo)號:助記符 操作數(shù);注釋 偽指令語句格式名

2、字定義符參數(shù);注釋名字可以使用英文字母(大小寫),不超 過31個字符。 第一個字符不允許為數(shù)字, 另外可 以使用特殊字符? 、$、(不 能作為第一個字符)。名字不允許使用指令助記符及偽指令定義符。名字可以是代碼段、數(shù)據(jù)段、或堆棧段的邏 輯段名、變量名、過程或符號名等。定義符 規(guī)定了偽指令的功能,匯編和連接 時有意義。參數(shù) 參數(shù)可以為0n個。指令語句格式52.標(biāo)號和變量類型(1)標(biāo)號:定義指令的邏輯地址,具有段地 址、偏移地址和類型屬性。其類型屬性如下:NEAR指示近程(段內(nèi))標(biāo)號,該標(biāo)號只能 為本段內(nèi)指令使用;FAR指示遠(yuǎn)程(段間)標(biāo)號,該標(biāo)號可以為 其它段指令使用。6(2)變量:定義數(shù)據(jù)的邏

3、輯地址,具有段、 偏移地址和類型屬性。其類型屬性如下:BIT:定義位,但分配一個字節(jié)存儲空間;BYTE:定義字節(jié)存儲空間;WORD:定義字存儲空間;DWORD:定義雙字存儲空間;FWORD:定義三字存儲空間;QWORD:定義四字存儲空間;6TBYTE:定義五字存儲空間。73. 1. 2簡化的段定義偽指令MASM提供簡化的段定義偽指令,使用指定 的內(nèi)存模式編程。MODEL存儲模式說明見表3 .l(P61)o預(yù)處理符號:在程序中使用預(yù)處理符號可以 表示其實(shí)際值。常用預(yù)處理符號見表3.2(P61)oMODEL SMALL;內(nèi)存模式說明(P61表3.1) DATA:定義近程數(shù)據(jù)段,MS-DOS下64K

4、B,Windows NT的FLAT模式下為512MB,存儲經(jīng)常使用的數(shù)據(jù)STACK 1000;定義堆棧段,其后口J跟參數(shù),定義堆棧人小BUF DB 10H586CODE1;STARTUP選擇80586指令集定義程序段指示程用開始,該偽指令后跟第一條可執(zhí)行指令; 初始化DS和SS寄存益值相等(除非為FARSTACK)MOV AL, BUFEXIT:使程序返冋DOS操作系統(tǒng),產(chǎn)生下列指令碼:MOV AL, VALUEMOV AH, 4CHINT 21HEND93. 1. 3完整段定義偽指令(適用JMASM 和 TASM)例3 1完格段定義絡(luò)構(gòu),STACK SEG SEGMENT STACKDW 1

5、00 DUP ?)STACK.SEG ENDSEXTRA_SEG SEGMENTBUF DB 100DUP(?)EXTRA.SEG ENDSDATA.SEG SEGMENT BLOCK DB IOOODUP(?)DATA_SEG ENDSCODE.SEG SEGMENTASSUMI CS: CODE.SEGASSUME DS: DATA.SEGASSUME ES: EXTRA_SEGASSUME SS:STACKjSEG START:MOV AX DATA_SEGMOV DS, AXMOV AX. EXTRA_SEGMOV ES AXMOV AX. STACK.SEG MOV SS. AXMO

6、V AH. 4CHINT 2IHCODE.SEG ENDSEND ST/RT1.完整段定義偽指令格式:段SEGMENT 1 屈性11段名 ENDS屬性 段對齊屬性段只讀屬性 段介并屬性 段長度屬性 J段類別展性(P62)2.段寄存器定義偽指令格戌:ASSUME 段奇存舲段名,段 寄存器:段名功能:規(guī)定給定段的段地址寄器,段 寄存器包括 CS、DS. ES、SS、FS. GSo3.程序結(jié)束偽指令格式:END 第一條可執(zhí)行語句標(biāo)號 功能:指示匯編程序.源程序到此結(jié)束。 標(biāo)號為第條可執(zhí)行語句的標(biāo)號,即程序的 啟動地址。1031. 4常用偽指令常用偽指令1變量名DB/BYTE表達(dá)式,表達(dá)式表達(dá)式定義的

7、字節(jié)(8位)表達(dá)式可以是常數(shù)、字符(用表 示)等。例3.2 ONE DB 10H, ABC 2變量名DW/WORD表達(dá)式,表達(dá)式表達(dá)式定義的字(16位)表達(dá)式可以是常數(shù)、字符、標(biāo)號或變量 名(存標(biāo)號或變量名的偏移地址)等。例3.3 TWO DW NEXT;NEXT可以是標(biāo)號或變量名, 變量TWO存放標(biāo)號或變量名的偏移地址。113變量名DD/DWORD表達(dá)式,表達(dá)式.表達(dá)式定義的雙字(32位)表達(dá)式可以是常數(shù)、字符、 標(biāo)號或變量名(存標(biāo)號或變量名的段值和偏移地址) 等。例3.4 THREE DD NEXT4.變量名1DF/FWORD表達(dá)式,表達(dá)式 表達(dá)式定義的3字(48位) 表達(dá)式常在80386

8、以上表示指 針變量,如標(biāo)號或變量名的段值和偏移地址。125. 變量名JDQ/ QWORD表達(dá)式 ,表達(dá)式表達(dá)式定義的4字(64位)表達(dá)式可以是常數(shù)、字符、 標(biāo)號或變量名(存標(biāo)號或變量名的段值和偏移地址) 等。6.變量名IDT/ TBYTE表達(dá)式,表達(dá)式表達(dá)式定義的5字(80位)表達(dá)式可以是常數(shù)、字符、 標(biāo)號或變量名(存標(biāo)號或變量名的段值和偏移地址) 等。7變量名SBYTE表達(dá)式,表達(dá)式表達(dá)式 定義的字節(jié)(8位)表達(dá)式為有符號數(shù),一128+127o;8.變量名JSWORD表達(dá)式,表達(dá)式表達(dá)式層定義的字(16位)表達(dá)式為有符號數(shù),一32768+32767。9.變量名JSDWORD表達(dá)式,表達(dá)式表達(dá)

9、式定義的雙字(32位)表達(dá)式為有符號數(shù)。1410. COUNT DUP(表達(dá)式,表達(dá)式.)DUP為重復(fù)操作符,COUNT為重復(fù)次數(shù), 表達(dá)式可以為常數(shù)、字符(用于初始化內(nèi)存單元) ” 和?(用于保留內(nèi)存單元),在表達(dá)式中DUP還可 以嵌套使用。例3.5 ONE DB 256 DUP(1, 2, 4DUP(?)ONE變量所定義的存儲區(qū)間重復(fù)存放數(shù)據(jù)(1,2,?,?,?,?),共占用1536 (256*6)字節(jié)存儲單元。1511.類型PTR地址表達(dá)式I類型可以是BYTE(字節(jié))、WORD(字)、DWORD(雙字)、FWORD (3字)、QWORD (4字)、TBYTE (5字)、NEAR(近程)、

10、FAR(遠(yuǎn)程)。PTR規(guī)定了地址表達(dá)式的類型。例3.6 INC DWORD PTRBXH.12.SEG變量名或標(biāo)號名 規(guī)定傳送標(biāo)號或變量名的段值。例3.7 MOV AX, SEG TARGET13. OFFSET變量名或標(biāo)號名規(guī)定傳送標(biāo)號或變量名的偏移地址值。例3.8 MOV AX, OFFSET TARGET1714TYPE變量名或標(biāo)號名規(guī)定傳送標(biāo)號距離類型的值或變量數(shù)據(jù)類型 的值。該類型傳送的值見表3.7(P64)O例3.9 N1 DB 20H,30H, 40HN2 DW 1234H, 5678HALP:MOVAL, TYPE N1;AL=1MOV AX, TYPE N2;AX=2MOV

11、BH, TYPE ALP;BH=0FFH (-1)1815LENGTHOF數(shù)組名返回數(shù)組的反度(元素個數(shù))。例3.10 ARRAY DW 5DUP (0)NUM DD 3, 5, 7, 9, 12, 45, 89LENARRAY EQU LENGTHOF ARRAY;LENARRAY=5LENNUM EQU LENGTHOF NUM;LENNUM=716. SIZEOF數(shù)組名返回數(shù)組所包含的總字節(jié)數(shù)。DD 3, 5, 7, 9, 12, 45, 89EQU SIZEOF ARRAY;SIZEARRAY=10EQU SIZEOF NUM:SIZENUM=282017.變量名偏移值 索引值表示指定

12、類型元素的偏移值。例3.12 ARRAY BYTE 12, 23, 34, 45, 56MOV BX, 0MOV AL, ARRAYBX+1;AL=23ARRAY 0的值是12,ARRAY 3的值是45,19?例3.11 ARRAYDW 5DUP (0)NUMSIZEASIZENUMARRAY 41的值是56;2118. LABEL標(biāo)號名或變量名 為下一條語句定義的標(biāo)號或變量取別名。例3.13 VABB LABEL BYTEVABW DW 50 DUP (0):段值和偏移地址值相同,但數(shù)據(jù)類型不同。例3.14 LABF LABEL FARLABN:MOV AX, BX段值和偏移地址值相同,但距

13、離類型不同。LABF允許作為其它代碼段中的轉(zhuǎn)移或調(diào)用指令 的目的標(biāo)號。2219.符號名EQU表達(dá)式指定的符號名表示個指定值,該符號名可 ;在程序中使用。例3.15 A EQU 1024;A的值為1024。B EQU BX+SI+1000H;B代農(nóng)指定的尋址方式。C EQU JCXZ;C代表指定的助記符。2320.變量名EQU THIS屬性 標(biāo)號名EQU THIS類型將THIS右邊指定的數(shù)據(jù)類型或距離類型賦予EQU左邊的變量或標(biāo)號。例3.16 VABB EQU THIS BYTEVABW DW 100 DUP (?)段值和偏移地址值相同,但數(shù)據(jù)類型不同。例3.17 LABF EQU THIS F

14、ARLABN : MOV CX, 100段值和偏移地址值相同,但距離類型不同。LABF允許作為其它代碼段中的轉(zhuǎn)移或調(diào)用指令的 目的標(biāo)號。2421.HIGH data;傳送data的高位字節(jié)。LOW data;傳送data的低位字節(jié)。例3.18 KI EQU 1234HMOV AL, LOW KI;AL=34HMOV AH, HIGH KI;AH=12H2522. SHORT標(biāo)號名指定轉(zhuǎn)移指令是在下一條指令地址的127個 字節(jié)范圍內(nèi)。例3.19 JMP SHORT TABINC ALIIITAB:MOV AL, BL26J 23.地址計數(shù)器$:匯編時,地址計數(shù)器$代表p當(dāng)前指令在程序中的偏移地址

15、用$來表示,即計數(shù)到_該指令的計數(shù)值。: 例3.20 BUF BYTE 12H, 25H, 48HLBUF EQU $ BUFfl;LBUF等于BUF的長度3。I26IIIt,LP:JMP $+2;$+2為下條指令地址,i所以轉(zhuǎn)移到下一條指令去執(zhí)行。MOV AL, 10HII2724USES REG指定執(zhí)行過程時需要保護(hù)的寄存器, 在過 程執(zhí)行開始,將指定的寄存器保存到堆棧,在 過程結(jié)束返回前,從堆棧彈出數(shù)據(jù)恢復(fù)原寄存 器內(nèi)容。USES AX, BX等價于指令PUSH AXPUSH BXIIIPOP BXPOP AX2825. USE16 :指定使用16位的指令模式和數(shù) 據(jù)尺寸。26. USE

16、32 :指定使用32位的指令模式和數(shù) 據(jù)尺寸。在80386-Pentium中,在代碼段后面可增加 段長度偽指令USE16和USE32,通知匯編程序微 處理器使用16位或32位指令模式。如果 在MODEL之前指定386-586,USER32為缺省 值;如果在MODEL之前未指定386586,貝IJ USER16為缺省值。為DOS環(huán)境開發(fā)的軟件必須使用USE16指示符。2927.類型名TYPEDEF距離屬性PTR類型屬性:用于 定義指針變量的類型。例3.21 PBYTE TYPEDEF PTR BYTE;指向字節(jié)類型的指針NPWORD TYPEDEF NEAR PTR WORD:指向字類型的近程指

17、針Al BYTE OK*;Al為字節(jié)類型變量A2 PBYTE Al;A2為指向字符串的指針51 WORD 100 DUP (? );S1為字類型變量52 NPWORD SI;S2為為指向字?jǐn)?shù)組的指針28. ORG offset addr:指定段內(nèi)的起始地址。例3.22 ORG 1000H;從偏移地址為1000處開始執(zhí)行程序303. 1. 5匯編程序兩種基本格式匯編程序兩種基本格式匯編程序使用兩種基本格式開發(fā)軟件。一種方法使用完整段定義。通常能較好地覆 蓋匯編語言控制任務(wù),適用于大規(guī)模復(fù)雜匯編程 序的軟件開發(fā)。另一種使用簡化段定義(模型),其任務(wù)模 型很容易理解及使用,模型適用于與高級語言的 交

18、叉調(diào)用,例如在C/C+高級語言使用的匯編子 程序。31例 3.23將 BLOCK 1 單元開始的 100個字節(jié)的內(nèi)容傳送到 BLOCK2 開始的單元中。 MODEL SMALLSTACK 200DATA;定義堆棧段;定義數(shù)據(jù)段EA機(jī)器碼00000064 BLOCK 1DB 100 DUP (?)0064 0064 BLOCK2DB 100 DUP (?) CODE:定義代碼段0(X)()B8START: MOV AX, DATA:裝入 ES 和 DS,將數(shù)據(jù)段和0003 SECOMOV ES, AX附加段看作一個段0005 8ED8MOV DS, AX0007 FCCLD:DF=0,地址遞増移動數(shù)據(jù)()(X)8BE (X)()()MOV SI, OFFSET BLOCK 1000B BF0064MOV DI, OFFSET BLOCK2000E B9 0064MOV CX, 1000011F3/A4REP

溫馨提示

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

評論

0/150

提交評論