第4章 匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第1頁(yè)
第4章 匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第2頁(yè)
第4章 匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第3頁(yè)
第4章 匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第4頁(yè)
第4章 匯編語(yǔ)言程序的設(shè)計(jì)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩37頁(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、第第4 4章章 匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì)1mov ax,12hcall displayJmp 1234h主要內(nèi)容: 匯編語(yǔ)言源程序的結(jié)構(gòu) 匯編語(yǔ)言語(yǔ)句格式 偽指令 功能調(diào)用 匯編語(yǔ)言程序設(shè)計(jì)24.1 匯編語(yǔ)言源程序 機(jī)器語(yǔ)言二進(jìn)制數(shù)形式的指令和數(shù)據(jù)。 B0 64 是什么意思?這就是機(jī)器語(yǔ)言。既不直觀,又不易理解和記憶. MOV AL,64H ;很容易記憶理解,這就是助記符。 助記符用便于記憶的英語(yǔ)單詞表示的指令操作碼。它反映了指令的功能和主要特征,便于人們理解和記憶。3指令除了操作碼以外,還有一個(gè)操作數(shù)問(wèn)題。 操作數(shù)可能放在存儲(chǔ)器中,這就涉及操作數(shù)的地址。程序中遇到轉(zhuǎn)移指令或調(diào)用指令,

2、也需要知道轉(zhuǎn)移地址,若采用具體地址就很不方便,一旦有錯(cuò),改動(dòng)也很麻煩。于是人們采用標(biāo)號(hào)或符號(hào)來(lái)代替地址,例: LP1: mov ax,VAR loop LP1 匯編語(yǔ)言指令助記符,符號(hào)地址,標(biāo)號(hào),偽指令等語(yǔ)言元素的集合以及這些元素使用的規(guī)則。 用匯編語(yǔ)言編寫(xiě)的程序叫匯編語(yǔ)言源程序。4匯編程序5源程序的編譯程序源程序的編譯程序匯編程序匯編程序匯編語(yǔ)言匯編語(yǔ)言源程序源程序機(jī)器語(yǔ)言機(jī)器語(yǔ)言目標(biāo)程序目標(biāo)程序匯編語(yǔ)言程序設(shè)計(jì)與執(zhí)行過(guò)程 輸入?yún)R編語(yǔ)言源程序 源文件 .ASM 匯編編譯) 目標(biāo)文件 .OBJ 鏈接 可執(zhí)行文件 .EXE 調(diào)試 最終程序64.1.1 匯編語(yǔ)言源程序的結(jié)構(gòu) 7 一個(gè)基本的匯編語(yǔ)言

3、程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start 8堆棧段數(shù)據(jù)段代碼段4.1.2 4.1.2 匯編語(yǔ)言的語(yǔ)句與格式匯編語(yǔ)言的語(yǔ)句與格式 匯編語(yǔ)言的語(yǔ)句有兩種:匯編語(yǔ)言的語(yǔ)句有兩種: 指令性語(yǔ)句指令性語(yǔ)句由由80868086指

4、令助記符構(gòu)成的指令助記符構(gòu)成的語(yǔ)句語(yǔ)句 指示性語(yǔ)句指示性語(yǔ)句由偽指令構(gòu)成的語(yǔ)句由偽指令構(gòu)成的語(yǔ)句 指令性語(yǔ)句的格式為:指令性語(yǔ)句的格式為: 標(biāo)號(hào)標(biāo)號(hào): : 指令助記符指令助記符 目的操作數(shù),源操目的操作數(shù),源操作數(shù)作數(shù) ; ;注釋注釋 指示性語(yǔ)句的格式為:指示性語(yǔ)句的格式為: 名字名字 偽指令偽指令 操作數(shù)操作數(shù)1,1,操作數(shù)操作數(shù)2,2,操作操作數(shù)數(shù)n ;n ;注釋注釋 注:各部分之間至少要用一個(gè)空格作為分注:各部分之間至少要用一個(gè)空格作為分隔符。隔符。9指令性語(yǔ)句由指令性語(yǔ)句由CPUCPU執(zhí)行,每一條指令性語(yǔ)句都有一條機(jī)器執(zhí)行,每一條指令性語(yǔ)句都有一條機(jī)器碼指令與其對(duì)應(yīng);碼指令與其對(duì)應(yīng);指

5、示性語(yǔ)句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對(duì)指示性語(yǔ)句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對(duì)源程序進(jìn)行匯編,如何定義變量、分配存儲(chǔ)單元以及指示源程序進(jìn)行匯編,如何定義變量、分配存儲(chǔ)單元以及指示程序開(kāi)始和結(jié)束等。指示性語(yǔ)句無(wú)機(jī)器碼指令與其相對(duì)應(yīng)。程序開(kāi)始和結(jié)束等。指示性語(yǔ)句無(wú)機(jī)器碼指令與其相對(duì)應(yīng)。 指令性語(yǔ)句匯編時(shí)生成機(jī)器碼;指令性語(yǔ)句匯編時(shí)生成機(jī)器碼; 指示性語(yǔ)句匯編時(shí)不生成機(jī)器碼。指示性語(yǔ)句匯編時(shí)不生成機(jī)器碼。10語(yǔ)句的構(gòu)成元素:標(biāo)號(hào)指令的符號(hào)地址,用來(lái)代表指令在存儲(chǔ)器中的地址。只能出現(xiàn)在指令性語(yǔ)句中,標(biāo)號(hào)后應(yīng)加上冒號(hào)。名字段、過(guò)程、變量的名字,用來(lái)代表它們?cè)诖鎯?chǔ)器中的地址。只能出現(xiàn)在指示

6、性語(yǔ)句中,名字后不加冒號(hào)。指令助記符8086助記符、偽指令操作數(shù)即指令的操作對(duì)象對(duì)指令性語(yǔ)句0,1,2個(gè)對(duì)指示性語(yǔ)句根據(jù)需要而定操作數(shù)之間以逗號(hào)分隔操作數(shù)可以是:寄存器、存儲(chǔ)單元、常數(shù)或表達(dá)式 例如:AX,DI+BX+10,200,16*8+TABLE,等等11 注釋注釋以分號(hào)開(kāi)頭,可放在指令后,也可以分號(hào)開(kāi)頭,可放在指令后,也可單獨(dú)一行。單獨(dú)一行。 注意注解的寫(xiě)法。要寫(xiě)指令段在程注意注解的寫(xiě)法。要寫(xiě)指令段在程序中的作用,而不要寫(xiě)指令的操作。序中的作用,而不要寫(xiě)指令的操作。 例如:以下為同一條指令寫(xiě)的注釋例如:以下為同一條指令寫(xiě)的注釋 1MOV CX,100 ;傳送傳送100到到CX 2MOV

7、 CX,100 ;循環(huán)計(jì)數(shù)器置初值循環(huán)計(jì)數(shù)器置初值 顯然,第二種寫(xiě)法要比第一種寫(xiě)法要好。顯然,第二種寫(xiě)法要比第一種寫(xiě)法要好。 1213匯編語(yǔ)言的一個(gè)實(shí)例: hello.asm data SEGMENTHello DB Hello, world!,0DH,0AH,$data ENDSprog SEGMENT ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H;顯示字符串 MOV AH,4CH INT 21H;退回DOSprog ENDS END start名字標(biāo)號(hào)4.1

8、.3 4.1.3 數(shù)據(jù)項(xiàng)與表達(dá)式數(shù)據(jù)項(xiàng)與表達(dá)式 142.標(biāo)號(hào)指令所在內(nèi)存單元的符號(hào)地址有三個(gè)屬性: 段地址:即標(biāo)號(hào)所在段的段地址; 偏移量:標(biāo)號(hào)所代表存儲(chǔ)單元的段內(nèi)偏移地址; 類 型:NEAR或FAR: NEAR表示標(biāo)號(hào)所在語(yǔ)句與轉(zhuǎn)移指令/ 調(diào)用指令在同一碼段內(nèi),跳轉(zhuǎn)時(shí) 只需改變IP即可。 FAR標(biāo)號(hào)所在語(yǔ)句與轉(zhuǎn)移指令/調(diào)用 指令不在同一代碼段內(nèi)。 若沒(méi)有對(duì)類型進(jìn)行說(shuō)明,默認(rèn)為NEAR。標(biāo)號(hào)通常作為轉(zhuǎn)移指令或CALL指令的轉(zhuǎn)移地址。153.變量 變量即內(nèi)存中的存儲(chǔ)單元或數(shù)據(jù)區(qū)。 變量名是存儲(chǔ)單元(數(shù)據(jù)區(qū))的符號(hào)地 址或名字。變量也有三個(gè)屬性:段地址變量所在段的段地址偏移量變量單元地址與段首地址

9、之間的位移量。類 型有BYTE、WORD和DWORD三種。變量在程序中作為存儲(chǔ)器操作數(shù)被引用。16 標(biāo)號(hào)和變量名的使用規(guī)則 組成:A-Z(不分大小寫(xiě)), 0-9, ? . _ $ 不能以數(shù)字開(kāi)頭,句號(hào)(.)只能作為首字符 長(zhǎng)度小于31個(gè)字符 不能與保留字(指令助記符、偽指令、預(yù)定義符號(hào)等)重名 不能重復(fù)定義 例如: 正確的:LP1, AGAIN, NEXT, _GO, OK_1 錯(cuò)誤的:4M, LOOP, AAA, #HELP, +ONE174.表達(dá)式表達(dá)式是常數(shù)、寄存器、標(biāo)號(hào)、變量與運(yùn)算符的組合。有數(shù)字表達(dá)式和地址表達(dá)式兩種。匯編時(shí)按優(yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算,計(jì)算出具體的數(shù)值或地址。運(yùn)行時(shí)不

10、能改變。表達(dá)式中的運(yùn)算符有6類:算術(shù)、邏輯、關(guān)系、取地址、屬性、雜類。181)算術(shù)運(yùn)算符 +、-、*、/,MOD用于數(shù)字表達(dá)式,例: MOV AX,4*1024匯編后的形式為: MOV AX,4096 用于地址表達(dá)式,例: LEA SI,TAB+3若TAB的偏移地址為1000H,則匯編后的形式為: LEA SI,1003H 192)邏輯運(yùn)算符 AND、OR、XOR、NOT邏輯運(yùn)算符只能用于數(shù)字表達(dá)式中。 例:MOV CL,36H AND 0FH 經(jīng)匯編后:MOV CL,06H注意,不要把邏輯運(yùn)算符與邏輯運(yùn)算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 匯編后源操作數(shù)被翻譯為

11、:3F00H,所以上述指令與AND AX, 3F00H等價(jià)。203)關(guān)系運(yùn)算符EQ、NE、LT、GT、LE、GE關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值:真或假 關(guān)系為真,結(jié)果為全1 關(guān)系為假,結(jié)果為全0例:MOV BX,PORT GT 300H 若PORT的值大于300H,則匯編后為: MOV BX,0FFFFH 否則匯編后為: MOV BX,0214)取地址運(yùn)算符SEG、OFFSETSEG:取變量/標(biāo)號(hào)的段地址OFFSET:取變量/標(biāo)號(hào)的偏移地址例:VAR DB 12H MOV BX,OFFSETVAR ;取變量VAR的偏移地址 MOV AX,SEG VAR ;取變量VAR的段地址注意,以下指令的異同:

12、 MOV BX, OFFSET VAR LEA BX, VAROFFSET只能取靜態(tài)的偏移地址;LEA指令即可取靜態(tài)的偏移地址,也可取動(dòng)態(tài)的偏移地址。 225)取值運(yùn)算符TYPE、LENGTH、SIZETYPE 取變量的類型取變量的類型1,2,4)LENGTH 取所定義變量的長(zhǎng)度取所定義變量的長(zhǎng)度 (即變量中元素的個(gè)數(shù))(即變量中元素的個(gè)數(shù))SIZE 取所定義存儲(chǔ)區(qū)的字節(jié)數(shù)取所定義存儲(chǔ)區(qū)的字節(jié)數(shù) (=TYPE*LENGTH)例:例:VAR DW 1,2,3,4,5 那么那么 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10236)屬性運(yùn)算符PTR用來(lái)指定地址操

13、作數(shù)的類型。格式: PTR 類型BYTE, WORD, DWORD, NEAR, FARBYTE、WORD、DWORD 用于描述數(shù)據(jù)存儲(chǔ)單元(變量)地址NEAR、FAR 用于描述轉(zhuǎn)移、調(diào)用的目的地址24例:MOVBYTE PTRDI,0 ;字節(jié)類型 MOVWORD PTRDI,0 ;字類型 MOVDI,0B5H ;類型不定PTR也可用來(lái)進(jìn)行強(qiáng)制類型轉(zhuǎn)換例:STR1 DW ? ;STR1定義為字類型 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法254.2 偽指令 數(shù)據(jù)定義偽指令 符號(hào)定義偽指令 段定義和段寄存器指定偽指令 過(guò)程定義偽

14、指令 結(jié)束偽指令264.2.1 數(shù)據(jù)定義偽指令 用于定義變量,即內(nèi)存單元或數(shù)據(jù)區(qū)。數(shù)據(jù)定義偽指令的格式為:變量名 數(shù)據(jù)定義偽指令 操作數(shù),操作數(shù),常用的數(shù)據(jù)定義偽指令有如下幾種: DB 定義字節(jié) DW 定義字 DD 定義雙字操作數(shù)可以是常數(shù)、變量或表達(dá)式27例1:DATA_B DB 10,5,10HDATA_W DW 100H,-4DATA_D DD 0FFFBH匯編后的內(nèi)存分配情況如右圖所示。2805H10H00H01HFCHFFHFBHFFH00H00H0AH例2:操作數(shù)可以是字符串,例如STR DBHELLO匯編后的情況如圖:29STRHELLO注意下面兩個(gè)定義的不同之處:DBAB ;4

15、1H在低字節(jié),42H在高字節(jié)DW AB ;42H在低字節(jié),41H在高字節(jié)48H45H4CH4CH4FH操作數(shù)?用來(lái)保留存儲(chǔ)空間,但不存入數(shù)據(jù).例3:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,?復(fù)制操作符DUP:重復(fù)的數(shù)據(jù)可以使用復(fù)制操作符DUP,如上面RSV亦可寫(xiě)成: RSV DW 8 DUP(?)若操作數(shù)中若使用$,則表示的是地址計(jì)數(shù)器的當(dāng)前值。30例: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3設(shè)TABLE的偏移地址為0080H,則匯編后如下圖所示:31BUFFER0080H80HTABLE008AH008BH0

16、08CH008DH.8FH00H00H0089H10 Bytes4.2.2 符號(hào)定義偽指令 把一個(gè)表達(dá)式用一個(gè)符號(hào)表示,以后凡出現(xiàn)該表達(dá)式的地方都可用這個(gè)符號(hào)表示。類似于C語(yǔ)言中的#define。符號(hào)定義偽指令有兩種:EQU,=32例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL 33定義定義引用引用4.2.3 段定義偽指令匯編語(yǔ)言程

17、序是按段來(lái)組織程序和數(shù)據(jù)的。 和存儲(chǔ)器的物理段相對(duì)應(yīng),匯編語(yǔ)言程序中的段稱為邏輯段。匯編連接后被映射到物理段中。三類段:代碼(程序)、數(shù)據(jù)、堆棧段定義偽指令:SEGMENT、ENDS、ASSUME、ORG定義一個(gè)段的基本格式: 段名 SEGMENT 定位類型組合方式類別 段名 ENDS34 這兩個(gè)偽指令總是成對(duì)出現(xiàn),二者前面的段名應(yīng)一致。SEGMENT說(shuō)明了一個(gè)段的開(kāi)始,ENDS說(shuō)明了一個(gè)段的結(jié)束。 對(duì)數(shù)據(jù)段和堆棧段,段中的語(yǔ)句一般是變量定義。對(duì)代碼段則是指令語(yǔ)句。 如: data SEGMENT data ENDS 35ASSUME偽指令偽指令在代碼段中,還必須明確段和段寄存器的關(guān)系,這由A

18、SSUME語(yǔ)句來(lái)指定。如 ASSUME CS:code, DS:data, ES:data 語(yǔ)句中的code和data為段名。 這個(gè)語(yǔ)句說(shuō)明: 1. CS將指向名字為code的代碼段 2. DS和ES將指向名字為data的數(shù)據(jù)段36但要注意,ASSUME偽指令只是告知匯編程序有關(guān)段寄存器與段的關(guān)系,并沒(méi)有給段寄存器賦予實(shí)際的初值。故下面的語(yǔ)句 MOVAX,DATA MOVDS,AX MOVES,AX將段基址裝入段寄存器。如果程序中用到堆棧段,則SS也需裝入實(shí)際的初值。代碼段基地址不需要程序員裝入CS寄存器,而由OS負(fù)責(zé)裝入。3738始地址必須是偶數(shù)。始地址必須是偶數(shù)。PAGE : 邏輯段從頁(yè)邊界開(kāi)始。

溫馨提示

  • 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)論