匯編語言程序設計(sha)課件_第1頁
匯編語言程序設計(sha)課件_第2頁
匯編語言程序設計(sha)課件_第3頁
匯編語言程序設計(sha)課件_第4頁
匯編語言程序設計(sha)課件_第5頁
已閱讀5頁,還剩64頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章 匯編語言程序設計匯編語言程序設計(sha)第五章第五章 匯編語言程序設計匯編語言程序設計主要內容:主要內容:l 匯編語言源程序的結構匯編語言源程序的結構l 匯編語言語句格式匯編語言語句格式l 偽指令偽指令l 匯編語言程序設計匯編語言程序設計第五章 匯編語言程序設計匯編語言程序設計(sha)5.15.1 概述概述程序是一組為完成某種功能而按一定順序(由算法程序是一組為完成某種功能而按一定順序(由算法確定)編排的指令序列。確定)編排的指令序列。 機器語言機器語言:二進制數形式的指令和數據,既不直觀:二進制數形式的指令和數據,既不直觀, ,又不易理解和記憶又不易理解和記憶( B0 64 B0

2、 64 )助記符助記符:用便于記憶的英語單詞表示的指令操作碼。:用便于記憶的英語單詞表示的指令操作碼。它它反映了指令的功能和主要特征反映了指令的功能和主要特征, ,便于人們理解和便于人們理解和記憶記憶(MOV ALMOV AL,64H64H)匯編語言匯編語言:匯編語言是一種用符號表示的、面向匯編語言是一種用符號表示的、面向CPU 指令系統的程序設計語言,是用指令的助記指令系統的程序設計語言,是用指令的助記符、符號地址、標號等編寫程序的語言符、符號地址、標號等編寫程序的語言 。第五章 匯編語言程序設計匯編語言程序設計(sha)匯編程序匯編程序 匯編源程序需翻譯成機器語言匯編源程序需翻譯成機器語言

3、, ,變成可執變成可執行文件行文件, ,機器才能執行機器才能執行, ,這個翻譯過程叫這個翻譯過程叫匯匯編編。高級語言中稱該過程為高級語言中稱該過程為“解釋解釋”或或“編譯編譯”。執行翻譯的程序稱為。執行翻譯的程序稱為“匯編程匯編程序序”。 匯編匯編 匯編語言源程序匯編語言源程序 機器語言目標程機器語言目標程序序第五章 匯編語言程序設計匯編語言程序設計(sha)匯編語言程序設計與執行過程匯編語言程序設計與執行過程 輸入匯編語言源程序輸入匯編語言源程序 源文件源文件 .ASM 匯編(編譯)匯編(編譯) 目標文件目標文件 .OBJ 鏈接鏈接 可執行文件可執行文件 .EXE 調試調試 最終程序最終程序

4、第五章 匯編語言程序設計匯編語言程序設計(sha)5.1.1 5.1.1 匯編語言源程序的結構匯編語言源程序的結構 匯編語言源程序通常由一個或幾個程序匯編語言源程序通常由一個或幾個程序模塊組成模塊組成, ,每個模塊一般由三個邏輯段組每個模塊一般由三個邏輯段組成:成: 數據段數據段存放數據、變量存放數據、變量 堆棧段堆棧段堆棧區域堆棧區域 代碼段代碼段存放程序指令存放程序指令第五章 匯編語言程序設計匯編語言程序設計(sha) 一個基本的匯編語言程序框架如下:一個基本的匯編語言程序框架如下: stack SEGMENT DB 100 DUP (stack) stack ENDS data SEGM

5、ENT 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 堆棧段堆棧段數據段數據段代碼段代碼段第五章 匯編語言程序設計匯編語言程序設計(sha)5.1.2 5.1.2 匯編語言的語句與格式匯編語言的語句與格式 匯編語言的語句有兩種:匯編語言的語句有兩種:指令性語句指令性語句由由80868086指令助記符構成的語句指令助記符構成的語句指示性語句指示性語句由偽指令構成的語句由

6、偽指令構成的語句 指令性語句的格式為:指令性語句的格式為: 標號標號: : 指令助記符指令助記符 目的操作數,源操作數目的操作數,源操作數 ; ;注釋注釋 指示性語句的格式為:指示性語句的格式為: 名字名字 偽指令偽指令 操作數操作數1,1,操作數操作數2,2,操作數操作數n ;n ;注釋注釋 注:各部分之間至少要用一個空格作為分隔符。注:各部分之間至少要用一個空格作為分隔符。第五章 匯編語言程序設計匯編語言程序設計(sha)指令性語句指令性語句由由CPU執行,每一條指令性語執行,每一條指令性語句都句都有一條機器碼指令與其對應有一條機器碼指令與其對應;指示性語句指示性語句由由匯編程序匯編程序執

7、行。它指出匯編執行。它指出匯編程序應如何對源程序進行匯編,如何定義變程序應如何對源程序進行匯編,如何定義變量、分配存儲單元以及指示程序開始和結束量、分配存儲單元以及指示程序開始和結束等。指示性語句無機器碼指令與其相對應。等。指示性語句無機器碼指令與其相對應。 指令性語句匯編時生成機器碼;指令性語句匯編時生成機器碼; 指示性語句匯編時不生成機器碼。指示性語句匯編時不生成機器碼。第五章 匯編語言程序設計匯編語言程序設計(sha)語句的構成元素:語句的構成元素: 標號:標號:指令的符號地址,用來代表指令在存儲器指令的符號地址,用來代表指令在存儲器中的地址。只能出現在指令性語句中,標號后應中的地址。只

8、能出現在指令性語句中,標號后應加上冒號。加上冒號。 名字:名字:段、過程、變量的名字,用來代表它們在段、過程、變量的名字,用來代表它們在存儲器中的地址。只能出現在指示性語句中,名存儲器中的地址。只能出現在指示性語句中,名字后不加冒號。字后不加冒號。 指令助記符:指令助記符:8086助記符、偽指令助記符、偽指令 操作數:操作數:指令的操作對象,可以是:指令的操作對象,可以是:寄存器、存寄存器、存儲單元、常數或表達式儲單元、常數或表達式 第五章 匯編語言程序設計匯編語言程序設計(sha) 5.1.3 5.1.3 語句中的操作數語句中的操作數1.1.常量常量包括數值常數和字符串常數包括數值常數和字符

9、串常數數值常數:數值常數:二進制數二進制數, ,以以B B結尾。如結尾。如01001101B01001101B。十進制數十進制數, ,如如8585。十六進制數十六進制數, ,以以H H結尾。第結尾。第1 1個數字為個數字為A-FA-F時,時,前面應加前面應加0 0,如,如0F160H0F160H。字符串常數:字符串常數:包含在單引號中的若干字符。包含在單引號中的若干字符。匯編時被翻譯成對應的匯編時被翻譯成對應的ASCIIASCII碼碼第五章 匯編語言程序設計匯編語言程序設計(sha)有三個屬性:有三個屬性: 段地址段地址:即標號所在段的段地址;:即標號所在段的段地址; 偏移量偏移量:標號所代表

10、存儲單元的段內偏移地址;:標號所代表存儲單元的段內偏移地址; 類類 型型:NEARNEAR或或FARFAR: NEARNEAR表示標號所在語句與轉移指令表示標號所在語句與轉移指令/ / 調用指令在同一碼段內。調用指令在同一碼段內。 FARFAR標號所在語句與轉移指令標號所在語句與轉移指令/ /調用調用 指令不在同一代碼段內。指令不在同一代碼段內。若沒有對類型進行說明若沒有對類型進行說明, ,默認為默認為NEARNEAR。標號通常作為標號通常作為轉移指令轉移指令或或CALLCALL指令指令的轉移地址。的轉移地址。2.2.標號標號指令所在內存單元的符號地址指令所在內存單元的符號地址第五章 匯編語言

11、程序設計匯編語言程序設計(sha) 變量變量即內存中的存儲單元或數據區。即內存中的存儲單元或數據區。 變量名變量名是存儲單元是存儲單元( (數據區數據區) )的符號地的符號地 址或名字。址或名字。變量也有三個屬性變量也有三個屬性: :段地址段地址變量所在段的段地址變量所在段的段地址偏移量偏移量變量單元地址與段首地址之間的位移量變量單元地址與段首地址之間的位移量類類 型型有有BYTEBYTE、WORDWORD和和DWORDDWORD三種三種變量在程序中作為變量在程序中作為存儲器操作數存儲器操作數被引用被引用3.3.變量變量第五章 匯編語言程序設計匯編語言程序設計(sha)標號和變量名的使用規則標

12、號和變量名的使用規則 組成:組成:A-Z(不分大小寫不分大小寫), 0-9, ? . _ $ 不能以數字開頭,句號不能以數字開頭,句號(.)只能作為首字符只能作為首字符 長度小于長度小于31個字符個字符 不能與關鍵字不能與關鍵字(指令助記符、偽指令、預定義符指令助記符、偽指令、預定義符號等號等)重名重名 不能重復定義不能重復定義例如:例如: 正確的:正確的:LP1, AGAIN, NEXT, _GO, OK_1 錯誤的:錯誤的:4M, LOOP, AAA, #ABC第五章 匯編語言程序設計匯編語言程序設計(sha)4.4.表達式表達式表達式是常數、寄存器、標號、變量與表達式是常數、寄存器、標號

13、、變量與運算符的組合。運算符的組合。包括數值表達式和地址表達式。包括數值表達式和地址表達式。 MOV AX, 12 - 4 ;數值數值表達式表達式 LEA BX, string + 4 ;地址表達式地址表達式運算符有運算符有5 5種:算術、邏輯、關系、取地種:算術、邏輯、關系、取地址、屬性。址、屬性。1 1)算術運算符)算術運算符 有有5 5個:個: + +,- -,* *,/ /,MODMOD2 2)邏輯運算符)邏輯運算符 有有4 4個:個: ANDAND、OROR、XORXOR、NOTNOT第五章 匯編語言程序設計匯編語言程序設計(sha)3)3)關系運算符關系運算符 有有6 6個:個:E

14、QEQ、NENE、LTLT、GTGT、LELE、GEGE 關系運算的結果是一個邏輯值:關系運算的結果是一個邏輯值:真真或或假假 關系為真關系為真, ,結果為全結果為全1 1,關系為假,關系為假, ,結果為全結果為全0 0例:例:MOV AX,2 LT 7MOV AX,2 LT 7;(;(AXAX)=0FFFFH=0FFFFH 4)4)取地址運算符取地址運算符 SEG:取變量:取變量/標號的段地址標號的段地址 OFFSET:取變量:取變量/標號的偏移地址標號的偏移地址MOV BX,OFFSET VARMOV BX,OFFSET VAR ;取變量;取變量VAR的偏移地址的偏移地址 MOV AXMO

15、V AX,SEG VARSEG VAR ;取變量;取變量VAR的段地址的段地址 第五章 匯編語言程序設計匯編語言程序設計(sha)5)5)屬性運算符屬性運算符PTRPTR:用來:用來臨時改變臨時改變存儲器操作數的類型。存儲器操作數的類型。格式:格式: PTR BYTE、WORD、DWORD 用于描述數據存儲單元用于描述數據存儲單元(變量變量)地址地址 NEAR、FAR 用于描述轉移、調用的目的地址用于描述轉移、調用的目的地址例:例:STR1 DW ? ;STR1定義為字類型定義為字類型 MOV AX,STR1 ;MOV AX,STR1 ;合法合法 MOV AL,STR1 ;MOV AL,STR

16、1 ;非法非法 MOV AL, MOV AL, BYTE PTRBYTE PTR STR1 ; STR1 ;合法合法第五章 匯編語言程序設計匯編語言程序設計(sha)5.2 5.2 偽指令偽指令 數據定義偽指令數據定義偽指令 符號定義偽指令符號定義偽指令 段定義和段寄存器指定偽指令段定義和段寄存器指定偽指令 過程定義偽指令過程定義偽指令 結束偽指令結束偽指令功能:指示匯編完成規定操作的命令功能:指示匯編完成規定操作的命令第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.1 5.2.1 數據定義偽指令數據定義偽指令 DB DB DW DW變量變量 DD DD 操作數操作數1 1,操作數,

17、操作數2 2, DQ DQ DT DT功能:用于定義變量,用變量和存儲單元相聯系,功能:用于定義變量,用變量和存儲單元相聯系,為變量分配內存單元為變量分配內存單元 DB-DB-字節類型字節類型 DW-DW-字類型字類型 DD-DD-雙字類型雙字類型 DQ-DQ-四字類型四字類型 DT-DT-五字類型五字類型 第五章 匯編語言程序設計匯編語言程序設計(sha)格式中操作數的形式:格式中操作數的形式:1 1、一個或多個常數、一個或多個常數/ /數值表達式數值表達式 30H40H02H00H35HFDH04HDATA1 DB 30HDATA1 DB 30HDATA2 DW 0240HDATA2 DW

18、 0240H,3500H 3500H DATA3 DB (-1DATA3 DB (-1* *3)3),(16/4)(16/4) DATA1DATA1DATA2DATA2DATA3DATA3MOV AX,DATA1MOV AX,DATA1;錯誤;錯誤MOV AL,DATA1MOV AL,DATA1;正確;正確MOV AX, DATA2MOV AX, DATA2;正確;正確MOV AL, DATA2MOV AL, DATA2;錯誤;錯誤MOV AL, BYTE PTR DATA2MOV AL, BYTE PTR DATA2;正確;正確第五章 匯編語言程序設計匯編語言程序設計(sha)2 2、?、?

19、? 用來保留存儲空間用來保留存儲空間, ,但不存入數據但不存入數據DATA5 DB ?DATA6 DW ?-41H42H43H44H42H41H44H43HDATA5DATA5DATA6DATA6DATA7DATA7DATA8DATA83、字符串、字符串 DATA7 DB ABCD DATA8 DW AB, CD注意:注意:3個及其以上的字符個及其以上的字符 只能用只能用DB定義。定義。第五章 匯編語言程序設計匯編語言程序設計(sha)4、重復方式重復方式DUPDUP格式:變量格式:變量 定義符定義符 n DUPn DUP(表達式(表達式1 1)其中,其中,n n為重復次數為重復次數 表達式表

20、達式1 1為重復內容為重復內容-05H00H00H05H00H00HDATA9 DB 2 DUP (?)(?)DATA10 DB 2 DUP(5,2 DUP(0)DATA9DATA9DATA10DATA10第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.2 5.2.2 符號定義偽指令符號定義偽指令把一個表達式用一個符號表示,以后凡是出把一個表達式用一個符號表示,以后凡是出現該表達式的地方都可用這個符號表示。現該表達式的地方都可用這個符號表示。 1. 等值語句等值語句EQU 格式:符號名格式:符號名 EQU 表達式表達式 PORT EQU 40H ; 用用PORT代替代替40H COU

21、NT EQU CX ; 用用COUNT代替代替CX寄存器寄存器 M EQU MOV ; 用用M代替代替MOV指令助記符指令助記符 注:注:EQU語句不能重新定義,即在同一源程序中,用語句不能重新定義,即在同一源程序中,用EQU定義過的符號不能賦予不同的值。定義過的符號不能賦予不同的值。第五章 匯編語言程序設計匯編語言程序設計(sha) 2. 等號語句等號語句= 格式:符號名格式:符號名 表達式表達式 例:例: PP 89FAH ; PPPP+1 ; 例:例:B EQU BP+8 B EQU 20H 不行!不行! 用用EQUEQU定義的符號未清除前定義的符號未清除前, ,不能重新定義。不能重新定

22、義。清除清除EQUEQU定義可用定義可用PURGEPURGE偽指令。偽指令。 用用”=”=”定義的符號可在任何時候進行重定定義的符號可在任何時候進行重定義義 二者均不占用存儲空間二者均不占用存儲空間, ,僅是給符號賦值僅是給符號賦值 第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.3 5.2.3 段定義偽指令段定義偽指令 匯編語言程序是按段來組織程序和數據的。匯編語言程序是按段來組織程序和數據的。 用于告訴匯編程序和鏈接程序如何按邏輯段來用于告訴匯編程序和鏈接程序如何按邏輯段來組織程序和利用存儲器。組織程序和利用存儲器。 三類段:代碼三類段:代碼( (程序程序) )、數據、堆棧、數據

23、、堆棧 格式:格式: 段名段名 SEGMENT 定位類型定位類型組合方式組合方式類別類別 段名段名 ENDS功能:定義段名和段屬性功能:定義段名和段屬性第五章 匯編語言程序設計匯編語言程序設計(sha)1)定位類型)定位類型說明如何確定邏輯段的邊界。有四種:說明如何確定邏輯段的邊界。有四種: PARA: 16的倍數地址,地址低的倍數地址,地址低4位為零,默認位為零,默認值。值。 BYTE : 從任何地址開始。從任何地址開始。 WORD : 段的起始地址必須是偶數,地址低段的起始地址必須是偶數,地址低1位為位為0。 PAGE : 256的倍數地址,地址低的倍數地址,地址低8位為位為0。第五章 匯

24、編語言程序設計匯編語言程序設計(sha) 說明不同模塊中同名段的組合方式。說明不同模塊中同名段的組合方式。 PUBLIC:所有此類型的同名段組合成一個邏輯段,:所有此類型的同名段組合成一個邏輯段,公用一個段地址,運行時裝入同一個物理段中公用一個段地址,運行時裝入同一個物理段中 COMMON:所有此類型的同名段具有相同的起始所有此類型的同名段具有相同的起始地址地址(覆蓋覆蓋),共享相同的存儲區域,共享相同的存儲區域 AT:指定段的起始地址,不能用于代碼段:指定段的起始地址,不能用于代碼段 STACK:專用于說明堆棧段,組合方式同:專用于說明堆棧段,組合方式同PUBLIC3) 類別類別用單引號括起

25、來的字符串用單引號括起來的字符串。所有同類別的段被安。所有同類別的段被安排在連續的存儲區域中。排在連續的存儲區域中。第五章 匯編語言程序設計匯編語言程序設計(sha)1. 地址計數器地址計數器$功能:指出匯編地址的偏移量,記載下一功能:指出匯編地址的偏移量,記載下一個變量或指令在當前段中的偏移量個變量或指令在當前段中的偏移量l 每個段開始時,每個段開始時,$=0,隨著匯編過程的,隨著匯編過程的進行而自動增值進行而自動增值l $用于指令時,表示本條指令的第一個用于指令時,表示本條指令的第一個字節地址,字節地址, $用于其他情況時,表示當用于其他情況時,表示當前值前值如:如:JNE $+6,轉向,

26、轉向JNE指令的首地址加指令的首地址加65.2.4 地址計數器偽指令地址計數器偽指令第五章 匯編語言程序設計匯編語言程序設計(sha)格式:格式:ORG 功能:定義指令或數據的起始地址(段內功能:定義指令或數據的起始地址(段內的偏移地址),把表達式的值送給的偏移地址),把表達式的值送給$ $,表達,表達式的值即為開始地址式的值即為開始地址例:例: ABC SEGMENTABC SEGMENT ORG 100H ORG 100H begin: begin: ABC ENDS ABC ENDS 指令從指令從100H開始存放開始存放第五章 匯編語言程序設計匯編語言程序設計(sha)DATA2200H

27、78HDATA1 204H 205H 206H 207H02H05H99H203H9AH34H08H12H201H202H66H208H209HDATA3第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.5 段分配偽指令段分配偽指令ASSUME 功能:指定段和段寄存器的關系,說明功能:指定段和段寄存器的關系,說明哪個段使用哪個段寄存器哪個段使用哪個段寄存器 格式:格式:ASSUME ASSUME 段寄存器名:段名,段寄存器名:段名, 這個語句說明:這個語句說明: 1. CS將指向名字為將指向名字為code的代碼段的代碼段 2. DS和和ES將指向名字為將指向名字為data的數據段的數據

28、段注意:注意: 1. 程序段必須用程序段必須用CS,堆棧段必須用,堆棧段必須用SS 2. 該語句一般放在代碼段的最前面該語句一般放在代碼段的最前面 3. 說明性語句,除說明性語句,除CS外,各段寄存器在外,各段寄存器在程序中賦值程序中賦值第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.6 5.2.6 過程定義偽指令過程定義偽指令PROCPROC、ENDPENDP功能:用于定義子程序的結構,過程名是功能:用于定義子程序的結構,過程名是CALLCALL的操的操作數作數格式:格式: 過程名過程名 PROCPROC 類型類型 RET RET 過程名過程名 ENDPENDP NEAR過程過程只

29、能被定義該過程的段中的其他程序只能被定義該過程的段中的其他程序調用調用(段內調用段內調用), 缺省時為缺省時為NEAR FAR過程過程可由任何段中的程序調用(可由任何段中的程序調用(段間調用段間調用)類型:類型:第五章 匯編語言程序設計匯編語言程序設計(sha)5.2.7 5.2.7 匯編結束偽指令匯編結束偽指令END第五章 匯編語言程序設計匯編語言程序設計(sha)DATASEGMENT;定義數據段定義數據段D1DB 5 DUP(?)(?);5個字節單元個字節單元CCEQU $D1; 單元的個數單元的個數SUMDW 0;累加結果放在累加結果放在SUM中中DATAENDS;數據段定義結束數據段

30、定義結束STACK SEGMENT ;定義堆棧段定義堆棧段DB 100 DUP (?)(?);100字節的棧空間字節的棧空間STACK ENDS;堆棧段定義結束堆棧段定義結束CODE SEGMENT;定義代碼段定義代碼段ASSUME DS:DATA,SS:STACK,CS:CODE;對各段進行說明對各段進行說明BEGIN:MOV AX,DATA; DS初始化為初始化為DATAMOV DS,AX MOV AX, STACK MOV SS, AX多個連續字節單元的累加多個連續字節單元的累加定義存儲單定義存儲單元的數據元的數據定義堆棧定義堆棧第五章 匯編語言程序設計匯編語言程序設計(sha) LEA

31、 SI,D1 ;預置源數據的首地址預置源數據的首地址MOV CX,CC;預置次數;預置次數 CLDLODSB ;取一個數并修改;取一個數并修改SIMOV AH,0;清;清AX的高字節的高字節CLC;清;清CF位位AGAN:ADC SUM,AX;累加;累加LODSB ;再取數并修改;再取數并修改SILOOP AGAN ;控制循環;控制循環MOV AH,4CH;INT 21HCODE ENDS;代碼段結束;代碼段結束ENDBEGIN;整個程序結束;整個程序結束代碼段結代碼段結束束第五章 匯編語言程序設計匯編語言程序設計(sha)調用調用DOS系統的系統的4CH 功能功能, 返回返回DOS方法:方法

32、: 在要返回在要返回DOS 處,安排指令:處,安排指令: MOV AH, 4CH INT 21H 執行完執行完4CH的功能調用,即返回的功能調用,即返回DOS 。例例 code SEGMENT ASSUME CS: codestart: 、 ;程序主體部分程序主體部分 、 、 MOV AH, 4CH ;返回返回DOS INT 21Hcode ENDS END start第五章 匯編語言程序設計匯編語言程序設計(sha)5.3 5.3 匯編語言程序設計基礎匯編語言程序設計基礎5.3.1 5.3.1 概述概述1.1.匯編語言程序設計的步驟:匯編語言程序設計的步驟:l根據實際問題抽象出數學模型根據實

33、際問題抽象出數學模型l確定算法確定算法l畫出程序框圖畫出程序框圖( (流程圖流程圖) ) l分配內存工作單元和寄存器分配內存工作單元和寄存器l編程、調試編程、調試2.2.繪制程序流程圖繪制程序流程圖(1)(1)用方框表示工作框用方框表示工作框 NY?第五章 匯編語言程序設計匯編語言程序設計(sha)(4)(4)各框之間用直線連起來表示程序走向。各框之間用直線連起來表示程序走向。 。 3. 源程序的基本結構:源程序的基本結構: 順序、分支、循環、子程序順序、分支、循環、子程序第五章 匯編語言程序設計匯編語言程序設計(sha)例:例:將某段中的字符串將某段中的字符串“Hello!”傳送到另一段中(

34、內傳送到另一段中(內存數據塊的傳送)。存數據塊的傳送)。開始開始建立傳送方向建立傳送方向 DS: SI 源串首地址源串首地址 ES: DI 目的串首地址目的串首地址CX 串長度串長度串傳送串傳送返回返回 DOS5.3.2 5.3.2 順序結構程序順序結構程序( (順序執行,無轉移、無循環順序執行,無轉移、無循環) )第五章 匯編語言程序設計匯編語言程序設計(sha)aa SEGMENT ;數據段;數據段1xx DB Hello! ;定義源串;定義源串aa ENDSbb SEGMENT ;數據段;數據段2yy DB 6 dup (?) ; 定義目的串定義目的串bb ENDScc SEGMENT

35、;代碼段;代碼段 ASSUME CS:cc, DS:aa, ES:bb ;分配段寄存器;分配段寄存器start : CLD ;設置傳送方向;設置傳送方向 MOV AX , aa ;DS: SI 源串首地址源串首地址 MOV DS , AX LEA SI , xx MOV AX , yy ;ES:DI 目的串首地址目的串首地址 MOV ES , AX MOV DI , OFFSET yy MOV CX , 6 ;CX 串的長度串的長度 REP MOVSB ;串傳送;串傳送 MOV AH , 4CH ;調用調用4CH系統功能,返回系統功能,返回DOS INT 21H cc ENDS END sta

36、rt ;程序結束;程序結束第五章 匯編語言程序設計匯編語言程序設計(sha)條件滿足條件滿足?處理處理P1處理處理P2標號標號1:標號標號2:NY1. 簡單分支結構簡單分支結構5.3.3 分支程序分支程序第五章 匯編語言程序設計匯編語言程序設計(sha) 用比較指令用比較指令 CMP DEST,SRC JE EQUL EQUL: 用測試指令用測試指令 TEST DEST,SRC JNZ NEXT NEXT: 用邏輯指令用邏輯指令 SHR DEST,CL JC NEXT NEXT:第五章 匯編語言程序設計匯編語言程序設計(sha) 例例1:現有現有DS段中的段中的NUM為為8位無符號數,位無符號

37、數,將這個單元中數低四位對應的將這個單元中數低四位對應的16進制數進制數轉換成轉換成ASCII碼,存入碼,存入STR單元。單元。 例例2:求求AX累加器和累加器和BX寄存器中兩個無寄存器中兩個無符號數之差的絕對值,結果放在內存中符號數之差的絕對值,結果放在內存中STR單元中。單元中。第五章 匯編語言程序設計匯編語言程序設計(sha)標號標號1:條件條件1成立成立?P1NY2. 多種分支結構多種分支結構條件條件2成立成立?條件條件n成立成立?Pn+1標號標號2:標號標號n:標號標號n+1:P2PnNNYY第五章 匯編語言程序設計匯編語言程序設計(sha)例例3:。YXYXYXZ101第五章 匯編

38、語言程序設計匯編語言程序設計(sha)程程 序序;- 數據段定義數據段定義 -DATSEGMENTXDB242YDB67ZDB?DATENDS ;- 代碼段定義代碼段定義 -COD SEGMENT ASSUME DS: DAT, CS: CODSTART:MOV AX, DAT MOV DS, AX; 初始化初始化DS MOV AL, X MOV BL, Y第五章 匯編語言程序設計匯編語言程序設計(sha);-CMP AL, BLJEC1; (AL)(BL) 則跳轉至則跳轉至C1 JAC2; (AL) (BL) 則跳轉至則跳轉至C2 MOV AL, -1 JMP EXT C1:MOV AL,

39、0 JMPEXT C2:MOV AL, 1 EXT: MOV Z, AL MOV AH, 4CH INT 21H ; 返回返回DOS;-COD ENDSENDSTART第五章 匯編語言程序設計匯編語言程序設計(sha) 循環程序的組成:循環程序的組成:循環程序是在滿足某些條件時對一段程循環程序是在滿足某些條件時對一段程序的重復執行,一般由四部分組成。序的重復執行,一般由四部分組成。 2. 基本結構形式基本結構形式(1) 先執行后判斷先執行后判斷(dowhile) 至少執行一次循環體至少執行一次循環體(2) 先判斷后執行先判斷后執行循環體可能一次都不循環體可能一次都不執行執行5.3.4 循環程序

40、循環程序初始化初始化循環體循環體循環控制循環控制繼續循環?繼續循環?YN初始化初始化循環體循環體循環控制循環控制繼續循環?繼續循環?YN第五章 匯編語言程序設計匯編語言程序設計(sha) MOV CX,COUNT AGAIN: LOOP AGAIN MOV CX,COUNT AGAIN: DEC CX JNZ AGAIN MOV CX,COUNT AGAIN: JCXZ NEXT DEC CX JMP AGAIN NEXT:第五章 匯編語言程序設計匯編語言程序設計(sha)例例: 在內存在內存BLOCK開始處存放了開始處存放了10個無符號字節個無符號字節數,從中找出最大值送入數,從中找出最大值

41、送入MAX單元中。單元中。DATA SEGMENTBLOCK DB 100,60,20, MAX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAH1: MOV AX, DATA MOV DS, AX MOV CX,9 MOV AL,BLOCK LEA BX,BLOCKAGAIN:INC BX CMP AL,BX JAE NEXT XCHG AL,BXNEXT:LOOP AGAIN MOV MAX,AL CODE ENDS END H1第五章 匯編語言程序設計匯編語言程序設計(sha)DATA SEGMENTARRAY DB 66H,88H,10

42、H,DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS:AX MOV DI,9 LOOP1:MOV CX,DI MOV BX,0LOOP2:MOV AL ,ARRAYBX CMP AL,ARRAYBX+1 JGE NEXT XCHG AL,ARRAYBX+1 MOV ARRAYBX,ALNEXT:INC BX LOOP LOOP2 DEC DI JNZ LOOP1 CODE ENDS END START例:例: 將內存首地址為將內存首地址為ARRAY開始的開始的10個帶符號字個帶符號字節數,將其按由大到小

43、的次序排列。節數,將其按由大到小的次序排列。第五章 匯編語言程序設計匯編語言程序設計(sha)子程序:重復使用的程序段或具有通用性便于共享的子程序:重復使用的程序段或具有通用性便于共享的 程序段程序段1.1.調用子程序用調用子程序用CALLCALL指令,返回調用程序用指令,返回調用程序用RETRET指令指令2. 現場的保護和恢復現場的保護和恢復 現場:現場:指轉向子程序執行時主程序的狀態,包括當指轉向子程序執行時主程序的狀態,包括當時標志寄存器、段寄存器、通用寄存器的內容時標志寄存器、段寄存器、通用寄存器的內容退出子程序前要退出子程序前要恢復現場恢復現場。 現場的保護和恢復分別用現場的保護和恢

44、復分別用PUSH和和POP指令實現指令實現第五章 匯編語言程序設計匯編語言程序設計(sha)調用和返回指令調用和返回指令主主程程序序子子程程序序調調用用返返回回返回指令返回指令返返回回 、 、 、調用指令調用指令 、 、 、調調用用 主主程程序序子子程程序序 、第五章 匯編語言程序設計匯編語言程序設計(sha)l 調用指令調用指令CALL 段內直接調用段內直接調用 格式格式 CALL 符號地址符號地址 ;NEAR屬性屬性 執行執行 (SP) (SP)- 2 (SS:SP) (IP) (IP) 符號地址的偏址符號地址的偏址 ;轉至符號地址處取指令轉至符號地址處取指令入棧保存返回地址偏值入棧保存返

45、回地址偏值第五章 匯編語言程序設計匯編語言程序設計(sha) 段間直接調用段間直接調用格式格式 : CALL 符號地址符號地址 ;FAR屬性屬性執行執行 : (SP) (SP)- 2 (SS:SP) (CS) (SP) (SP)- 2 (SS:SP) (IP) (IP) 符號地址的偏址符號地址的偏址(CS) 符號地址的段址符號地址的段址入棧保存返回地址段值入棧保存返回地址段值入棧保存返回地址偏值入棧保存返回地址偏值轉至符號地址轉至符號地址第五章 匯編語言程序設計匯編語言程序設計(sha)l 返回指令返回指令RET 段間返回段間返回格式格式 RET 或或 RETF 執行執行 (IP) (SS:S

46、P) (SP) (SP)+ 2 (CS) (SS:SP) (SP) (SP)+ 2從堆棧取返回地址偏值從堆棧取返回地址偏值從堆棧取返回地址偏值從堆棧取返回地址偏值從堆棧取返回地址段值從堆棧取返回地址段值 段內返回段內返回 格式格式 RET 執行執行 (IP) (SS:SP) (SP) (SP)+ 2第五章 匯編語言程序設計匯編語言程序設計(sha)段內和段間返回指令的匯編語言格式均可用段內和段間返回指令的匯編語言格式均可用RET, 但機器碼不同,段內為但機器碼不同,段內為C3H, 段間為段間為CBH, 匯編程序據過程類型確定返回類型匯編程序據過程類型確定返回類型。例例1 display PRO

47、C NEAR 、 、 C3H 、 RET ;NEAR 屬性的過程對應段內返回屬性的過程對應段內返回 display ENDP例例2 display PROC FAR 、 、 CBH 、 RET ;FAR屬性的過程對應段間返回屬性的過程對應段間返回 display ENDP第五章 匯編語言程序設計匯編語言程序設計(sha) 調用前要預先確定子程序中要調用前要預先確定子程序中要使用哪些寄存使用哪些寄存器,并定義入口參數和出口參數器,并定義入口參數和出口參數。 參數傳遞的方法:參數傳遞的方法:方法一:方法一: PUSH BX PUSH CX CALL PROC-1 POP CX POP BX方法二:

48、方法二: . PROC-1 PROC . PUSH BX . PUSH CX CALL PROC-1 . POP CX . POP BX . RET PROC-1 ENDP(1)使用約定的寄存器傳遞)使用約定的寄存器傳遞 (2)使用約定的存儲單元傳遞)使用約定的存儲單元傳遞 (3)使用堆棧傳遞)使用堆棧傳遞 (要用(要用BP尋址)尋址)第五章 匯編語言程序設計匯編語言程序設計(sha)利用堆棧傳遞參數利用堆棧傳遞參數通常在主程序中把參數或參數地址保存在通常在主程序中把參數或參數地址保存在堆棧中堆棧中, ,而在子程序中將參數從堆棧取出來而在子程序中將參數從堆棧取出來例:把一個用十六進制表示的字例

49、:把一個用十六進制表示的字ASCIIASCII碼碼 匯編程序如下:匯編程序如下:DATADATASEGMENTSEGMENTNUMNUMDWDW25AFH ;25AFH ;要轉換的十六進制數要轉換的十六進制數STRINGSTRINGDBDB4 DUP(?)4 DUP(?)DATADATAENDSENDS第五章 匯編語言程序設計匯編語言程序設計(sha)STACKSTACKSEGMENTSEGMENTDB 100 DUP(?)DB 100 DUP(?) STACK STACKENDSENDS CODECODESEGMENTSEGMENTASSUME ASSUME CS:CODE,DS:DATA,

50、ES:DATA,SS:STACKCS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:BEGIN:MOVMOVAX,DATAAX,DATAMOVMOVDS,AXDS,AXMOVMOVES,AXES,AXMOVMOVAX,STACKAX,STACKMOVMOVSS,AX SS,AX LEALEABX,STRING;BX,STRING;取變量偏址取變量偏址PUSHPUSH BXBX ; ;將偏址壓棧將偏址壓棧PUSHPUSH NUMNUM ; ;將變量壓棧將變量壓棧BHBL0064H0062H(SP)25AF0060H堆棧第五章 匯編語言程序設計匯編語言程序設計(sha) C

51、ALL BINHEX CALL BINHEX MOV MOVAH,4CHAH,4CH INT INT21H21H; ;* * * * * * * * * * * * * * * * * * * * * * * *BINHEXBINHEX PROCPROCPUSHPUSH BPBPMOVMOVBP,SPBP,SPPUSHPUSH AX AX PUSHPUSH DI DI PUSHPUSH CX CX PUSHPUSH DXDXBHBL0064H0062H25AF0060H005EHIPH005CH(BP、SP)(IP)(BP)IPL第五章 匯編語言程序設計匯編語言程序設計(sha)BHBHBLB

52、L0064H0062H2525AFAF0060H005EHIPIPH H005CH(BP) PUSHF PUSHF MOV AX,BP+4 MOV AX,BP+4 MOV DI,BP+6 MOV DI,BP+6 MOV DX,AX ;(DX)=25AFH MOV DX,AX ;(DX)=25AFH MOV CX,4 MOV CX,4 STD ; STD ;從后往前存從后往前存AGAIN:AND AX,000FH ;AGAIN:AND AX,000FH ;第一次第一次(AX)=000FH(AX)=000FH CALL HEXDCALL HEXD ; ;轉換為轉換為ASCIIASCII碼碼 STO

53、SB STOSB PUSH CX PUSH CX MOV CL,4MOV CL,4 SHR DX,CL ; SHR DX,CL ;邏輯右移邏輯右移4 4位位 MOV AX,DX ;MOV AX,DX ;第第1 1次次(AX)=025AH(AX)=025AH POP CX POP CX LOOP AGAIN ;(CX)-1=0? LOOP AGAIN ;(CX)-1=0?不等不等, ,轉轉+4IPIPL L(BP)第五章 匯編語言程序設計匯編語言程序設計(sha)POPFPOPFPOPPOPDX DX POPPOPCXCXPOPPOPDIDIPOPPOPAXAXPOPPOPBPBPRETRET4 4 BINHEX ENDP BINHEX ENDP ; ;* * * * * * * * * * * * * * * * * * * * *HEXD PROCHEXD PROC CMP AL,0AH CMP AL,0AH JL LP JL LP ADD AL,7 ADD AL,7LP: ADD AL,30HLP: ADD AL,30H RET RETHEXD ENDPHEXD ENDPCODE ENDSCODE END

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論