微機原理匯編語言程序設計演示文稿_第1頁
微機原理匯編語言程序設計演示文稿_第2頁
微機原理匯編語言程序設計演示文稿_第3頁
微機原理匯編語言程序設計演示文稿_第4頁
微機原理匯編語言程序設計演示文稿_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

微機原理匯編語言程序設計演示文稿目前一頁\總數(shù)六十二頁\編于十四點微機原理匯編語言程序設計目前二頁\總數(shù)六十二頁\編于十四點本章內容4.1概述4.2匯編語言的格式與語法4.3DOS與BIOS中斷調用4.4匯編語言程序設計和上機過程目前三頁\總數(shù)六十二頁\編于十四點4.1概述-程序設計語言機器語言:每種CPU都有自己獨立的一套指令系統(tǒng),其能直接理解和執(zhí)行的是二進制機器碼形式,這種二進制編碼格式語言稱為機器語言。特點是占內存少、執(zhí)行速度快,但難以記憶、容易出錯,實際中很少使用。例:89H,DCH匯編語言:用指令的助記符來表示二進制機器碼的語言稱為匯編語言,即是機器語言的符號表示。它是一種面向機器的程序設計語言,通常是為特定計算機或計算機系列專門設計的。特點是允許直接調用CPU內部資源,代碼精簡,占內存少,執(zhí)行速度快,但通用性差,編寫、調試周期長。常用來編制系統(tǒng)軟件、實時控制程序、實時通信程序及接口的驅動程序等。例:MOVSP,BX高級語言:是面向過程的語言(如:BASIC語言、C語言等),不依賴于具體的計算機結構和指令系統(tǒng)。特點是通用性強,可移植,但目標程序長,執(zhí)行速度慢。目前四頁\總數(shù)六十二頁\編于十四點4.1概述-匯編程序用匯編語言編寫的程序不能由機器直接執(zhí)行,而必須經匯編程序(Assembler)翻譯成機器語言程序常使用的匯編程序是Microsoft公司的宏匯編MASM,它可以將源程序翻譯成對應的目標程序,并且:檢查語句語法自動分配存儲區(qū)將其他進制轉換為二進制數(shù)計算表達式的值展開宏命令目前五頁\總數(shù)六十二頁\編于十四點4.2匯編語言的格式與語法4.2.1源程序的結構4.2.2語句的格式與構成元素4.2.3語句的操作數(shù)4.2.3.1常量4.2.3.2變量和標號4.2.3.3表達式4.2.4偽指令4.2.5宏指令目前六頁\總數(shù)六十二頁\編于十四點4.2.1源程序的結構匯編語言源程序通常由一個或幾個程序模塊組成,每個模塊一般由三種邏輯段組成:數(shù)據(jù)段、附加段——定義和存放數(shù)據(jù)、變量堆棧段——堆棧區(qū)域代碼段——存放程序指令目前七頁\總數(shù)六十二頁\編于十四點4.2.1源程序的結構NAME PROGRAM MOVAX,EXTRASTACK SEGMENTSTACK MOVES,AXSTADB100DUP(?) …… STACK ENDS MOVAX,OFFSETSDAT;---------------------------------------------- CALLP1DATA SEGMENT ……SDAT DB1,2,3,4,5 MOVAH,4CHDATA ENDS INT21H;----------------------------------------------- MAIN ENDPEXTRA SEGMENT ;------------------------------------------------DDAT

DB5DUP(?)

P1 PROCEXTRA ENDS ……;------------------------------------------------ RETCODE SEGMENT

P1 ENDP

ASSUMECS:CODE,SS:STACK ;-----------------------------------------------

ASSUMEDS:DATA,ES:EXTRA

CODE ENDSMAIN PROCFAR ;---------------------------------------------- MOVAX,DATA END MAIN MOVDS,AX堆棧段數(shù)據(jù)段擴展段代碼段代碼段目前八頁\總數(shù)六十二頁\編于十四點4.2.1語句的格式匯編語言的語句有兩種:指令性語句:由8086指令構成的語句指示性語句:由偽指令構成的語句指令性語句由CPU執(zhí)行,每一條指令性語句都有一條機器碼指令與其對應,指令性語句匯編時生成機器碼。指示性語句由匯編程序執(zhí)行,它指示匯編程序應如何對源程序進行匯編,如何定義變量、分配存儲單元以及指示程序開始和結束等。指示性語句無機器碼指令與其相對應,在匯編時不生成機器碼。目前九頁\總數(shù)六十二頁\編于十四點標號:指令的符號地址,用來代表指令在存儲器中的地址符號:段、過程、變量的名字,用來代表它們在存儲器中的地址指令助記符:8086指令助記符、偽指令助記符操作數(shù):即指令的操作對象對指令性語句:0,1,2個對指示性語句:根據(jù)需要而定操作數(shù)之間以逗號分隔操作數(shù)可以由標號、常量、變量、表達式、寄存器操作數(shù)和存儲器操作數(shù)等構成

例如:AX,[DI+BX+10],DATA,200,16*8+TABLE,等等4.2.2語句的構成元素目前十頁\總數(shù)六十二頁\編于十四點注釋:以分號開頭,可放在指令后,也可單獨一行。注意注釋的寫法,要寫指令(或程序段)在程序中的作用,而不要寫指令的操作。例如:以下為同一條指令寫的注釋

1)MOVCX,100;傳送100到CX2)MOVCX,100;循環(huán)計數(shù)器置初值顯然,第二種寫法要比第一種寫法要好

4.2.2語句的構成元素目前十一頁\總數(shù)六十二頁\編于十四點4.2.3語句的操作數(shù)4.2.3.1常量4.2.3.2變量和標號4.2.3.3表達式目前十二頁\總數(shù)六十二頁\編于十四點4.2.3.1常量常量操作數(shù):數(shù)值常數(shù):11001000B,0FA21H,329D(329)字符常數(shù):‘ABCD’(41H42H43H44H)例:MOVAX,

0FA21H

VARDB329STRDB‘ABCD’目前十三頁\總數(shù)六十二頁\編于十四點變量:指存儲器存儲單元中的數(shù)據(jù),數(shù)據(jù)運行時可改變變量名:是存儲單元的符號地址變量在程序中作為存儲器操作數(shù)被引用變量有三個屬性:段地址:變量所在段的段地址偏移地址:變量所在存儲單元的偏移地址類型:有BYTE、WORD和DWORD等例:MOVAX,VARPUSHVAR4.2.3.2變量與標號-變量目前十四頁\總數(shù)六十二頁\編于十四點

標號:指令所在存儲單元的符號地址標號的三個屬性:段地址:即標號所在段的段地址;偏移量:標號所代表存儲單元的段內偏移地址;類型:NEAR或FAR:NEAR:段內轉移或段內調用FAR:段間轉移或段間調用標號通常作為轉移指令的轉移地址

JMPlabelJNZnon_zero4.2.3.2變量與標號-標號目前十五頁\總數(shù)六十二頁\編于十四點組成:A-Z(不分大小寫),0-9,?@._$不能以數(shù)字開頭,句號(.)只能作為首字符長度小于31個字符不能與保留字(指令助記符、偽指令、預定義符號等)重名不能重復定義例如:正確的:LP1,AGAIN,NEXT,_GO,OK_1

錯誤的:4M,LOOP,AAA,#HELP,+ONE4.2.3.2變量與標號-命名規(guī)則目前十六頁\總數(shù)六十二頁\編于十四點4.2.3.3表達式表達式由標號、常量、變量等加上必要的運算符構成有數(shù)字表達式和地址表達式兩種匯編時按優(yōu)先規(guī)則對表達式進行計算,計算出具體的數(shù)值或地址,運行時不能改變表達式中的運算符包括:算術、邏輯、關系、分析以及屬性運算符等目前十七頁\總數(shù)六十二頁\編于十四點算術運算符包括:加:+,減:-,乘:*,除:/,取模:MOD

例:MOVAX,4*1024匯編后的形式為:MOVAX,4096邏輯運算符包括:與:AND、或:OR、異或:XOR、非:NOT例:MOVCL,36HAND0FH

經匯編后:MOVCL,06H邏輯運算符只能用于數(shù)字表達式中。注意,不要把邏輯運算符與邏輯運算指令混淆:例:ANDAX,3FC0HAND0FF00H匯編后源操作數(shù)被翻譯為:3F00H,所以上述指令與以下指令等價:ANDAX,3F00H4.2.3.3表達式—算術運算符目前十八頁\總數(shù)六十二頁\編于十四點分析運算符包括:SEG、OFFSETSEG:取變量/標號的段地址OFFSET:取變量/標號的偏移地址例:VARDB12H

MOVBX,OFFSETVAR

;取變量VAR的偏移地址

MOVAX,SEGVAR

;取變量VAR的段地址SEG、OFFSET運算符在匯編過程取相應地址4.2.3.3表達式—分析運算符目前十九頁\總數(shù)六十二頁\編于十四點4.2.3.3表達式—屬性運算符PTR屬性運算符PTR用來指定地址操作數(shù)的類型格式:<類型>PTR<地址操作數(shù)>

類型∈{BYTE,WORD,DWORD,NEAR,FAR}

BYTE、WORD、DWORD

用于描述數(shù)據(jù)存儲單元(變量)地址例:MOVWORD

PTR[BX],03H

NEAR、FAR

用于描述轉移、調用的目的地址例:JMPFAR

PTRLABEL1目前二十頁\總數(shù)六十二頁\編于十四點例:MOV [DI],0;類型不定

MOV BYTEPTR[DI],0;字節(jié)類型

MOV WORDPTR[DI],0;字類型4.2.3.3表達式—屬性運算符PTRDI48H45H00H45H00H00HBYTEPTRWORDPTRDIDI目前二十一頁\總數(shù)六十二頁\編于十四點4.2.3.3表達式—屬性運算符PTRPTR也可用來進行強制類型轉換例:VARDW1234H;VAR定義為字類型

MOVAX,VAR1;合法

MOVAL,VAR1;非法

MOVAL,BYTEPTRVAR1;合法目前二十二頁\總數(shù)六十二頁\編于十四點4.2匯編語言的格式與語法4.2.1源程序的結構4.2.2語句的格式與構成元素4.2.3語句的操作數(shù)4.2.3.1常量4.2.3.2變量和標號4.2.3.3表達式4.2.4偽指令4.2.5宏指令目前二十三頁\總數(shù)六十二頁\編于十四點4.2.4偽指令偽指令由匯編程序執(zhí)行的指令,它本身不被匯編成機器指令。常用的偽指令有:數(shù)據(jù)定義偽指令符號定義偽指令段定義偽指令過程定義偽指令程序模塊定義偽指令定義模塊連接標號和變量的偽指令目前二十四頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—數(shù)據(jù)定義偽指令用于對程序中使用的變量進行定義通過變量定義指明變量的類型,并為其分配存儲單元。數(shù)據(jù)定義偽指令的格式為:

變量名

數(shù)據(jù)定義偽指令

操作數(shù),操作數(shù),…VARDW1234H常用的數(shù)據(jù)定義偽指令有如下幾種:

DB

定義字節(jié)DW

定義字

DD

定義雙字

DQ

定義4字型變量(占8字節(jié)存儲空間)

DT定義10字節(jié)變量(表示BCD碼,或用于浮點運算)數(shù)據(jù)定義偽指令中的操作數(shù)可以是常數(shù)、變量或表達式目前二十五頁\總數(shù)六十二頁\編于十四點DATA1_BDB10DATA2_BDB5DATA3_BDB10HDATA1_WDW100HDATA2_WDW-4DATA_DDD0FFFBH匯編后的內存分配情況如右圖所示。Q05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_WDATA_D10510H100H-40FFFBH數(shù)據(jù)定義偽指令-例1目前二十六頁\總數(shù)六十二頁\編于十四點操作數(shù)可以是字符串,使用DB,DW

例 STR_DBDB‘HELLO’

STR_DWDW‘AB’,‘CD’

匯編后的情況如圖:注意下面兩個定義的不同之處:

STR_DBDB‘AB’;41H在低字節(jié),42H在高字節(jié)

STR_DWDW‘AB’;42H在低字節(jié),41H在高字節(jié)STR_DB‘H’‘E’‘L’‘L’‘O’48H45H4CH4CH4FH數(shù)據(jù)定義偽指令-例2STR_DB‘A’41H42H42H41HSTR_DW‘B’‘B’‘A’目前二十七頁\總數(shù)六十二頁\編于十四點

?

用來分配存儲空間,但不置初值例1:RSVDB?

復制操作符DUP:

重復的數(shù)據(jù)可以使用復制操作符DUP,如上面RSV亦可寫成:

例2:STRDB10DUP(‘A’)DATADB10DUP(30H,9DUP(20H))

若操作數(shù)中若使用$,則表示的是地址計數(shù)器的當前值。

例3

BUFDW0A32H,$,$+3

數(shù)據(jù)元素的初值:

ADDR+1,

(ADDR+2)+34.2.4偽指令—數(shù)據(jù)定義偽指令:?、DUP、$目前二十八頁\總數(shù)六十二頁\編于十四點例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3設TABLE的偏移地址為0080H,則匯編后如下圖所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes數(shù)據(jù)定義偽指令-例3目前二十九頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—符號定義偽指令:EQU將一個表達式用一個符號表示,以后凡出現(xiàn)該表達式的地方都可用這個符號表示類似于C語言中的#define匯編時,符號被符號代表的內容替換

例:COUNTEQUCXTENEQU10

MOVCOUNT,TEN

匯編后:MOVCX,10目前三十頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—段定義偽指令匯編語言程序是按段來組織程序和數(shù)據(jù)的,段的劃分與存儲器的物理段相對應。匯編語言程序中的段稱為邏輯段,匯編連接后被映射到相應的物理段中。邏輯段共分為:代碼段、堆棧段、數(shù)據(jù)段和附加段段定義偽指令:SEGMENT、ENDS、ASSUME、ORG定義一個段的基本格式:

段名

SEGMENT[定位類型][組合方式][類別]

<匯編語言語句>

段名ENDS目前三十一頁\總數(shù)六十二頁\編于十四點SEGMENT和ENDS成對出現(xiàn),二者前面的段名應一致偽指令SEGMENT說明了一個段的開始偽指令ENDS說明了一個段的結束數(shù)據(jù)段用于對程序中使用的變量進行定義,堆棧段用于對堆棧進行定義,數(shù)據(jù)段和堆棧段由指示性語句構成;代碼段由指令性語句構成。例如:data_segSEGMENT<匯編語句>data_segENDS

4.2.4偽指令—SEGMENT和ENDS目前三十二頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—ASSUME偽指令ASSUME偽指令用于明確段和段寄存器的關系,例如

ASSUMECS:code_seg,DS:data_seg,SS:stack_seg語句中的code_seg、data_seg、stack_seg為段名語句的作用為:CS將指向段名為code_seg的代碼段DS和ES將指向段名為data_seg的數(shù)據(jù)段SS將指向段名為stack_seg的堆棧段目前三十三頁\總數(shù)六十二頁\編于十四點ASSUME偽指令只是告知匯編程序段與段寄存器之間的對應關系,并沒有給段寄存器賦予實際的初值,程序中需要通過下面的語句進行賦值:

MOV AX,data_segMOV DS,AXMOV AX,stack_segMOV SS,AX上述語句的作用是將段地址裝入段寄存器。代碼段段地址不需要程序員裝入CS寄存器,而由系統(tǒng)負責裝入。上述語句通常放置在代碼段主程序的開始處。4.2.4偽指令—ASSUME偽指令目前三十四頁\總數(shù)六十二頁\編于十四點偽指令ORG規(guī)定了段內的指令或數(shù)據(jù)存放的開始地址(偏移地址的初值),其格式為:

ORG<表達式>

表達式的值即為開始地址,從此地址起連續(xù)存放程序或數(shù)據(jù)。例:ABCSEGMENT

ORG100Hbegin:……ABCENDS

語句“ORG100H”表明段中第一個變量或第一條語句相對于段地址的偏移量為100H。4.2.4偽指令—ORG偽指令指令從100H開始存放目前三十五頁\總數(shù)六十二頁\編于十四點段定義偽指令-例DATASSEGMENTSTRDB‘HELLO’VARDW10HDATASENDSSTACKSSEGMENT‘STACK’STADB100DUP(?)TOPDW$STACKSENDSCODESSEGMENT

ASSUMECS:CODES,DS:DATAS,SS:STACKS

ORG100HSTART:MOVAX,DATASMOVDS,AXMOVAX,STACKSMOVSS,AXMOVSP,TOP……….CODESENDS

ENDSTART目前三十六頁\總數(shù)六十二頁\編于十四點過程定義偽指令的格式為格式:過程名PROC[類型]

RET

過程名ENDP說明:PROC表示過程的開始,ENDP表示過程的結束在過程中至少要有一個RET指令使其返回主程序每個過程要有一個過程名,通過該名其他程序可以調用該過程過程中有類型說明[FAR]或[NEAR]說明該過程是遠過程還是近過程調用一個過程的格式為:CALL過程名4.2.4偽指令—過程定義偽指令目前三十七頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—過程定義偽指令MY_ADDPROC

FARPUSHAXPUSHBXMOVAX,[BP-TYPEWORD]MOVBX,[BP-2*TYPEWORD]ADDAX,BXMOVBX,[BP-3*TYPEWORD]MOV[BX],AXPOPBXPOPAX

RET6

MY_ADDENDP目前三十八頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—定義程序模塊偽指令功能:定義程序模塊格式:NAME模塊名

……END表達式模塊名:由程序員命名,最多6個字符表達式:通常就是程序第一條指令的標號,指示程序的啟動地址(要執(zhí)行的第一條指令的地址)。目前三十九頁\總數(shù)六十二頁\編于十四點4.2.4偽指令—定義程序模塊偽指令偽指令END表示源程序到此結束,并可指出程序的啟動地址。格式如下:

END[標號/過程名]模塊結束語句放在源程序最后一行,表示程序到此結束,一個程序中必須有一個END語句,其中的標號或過程名給出了程序開始執(zhí)行的啟動單元地址,只有主模塊才可有此選項當連接的多個模塊中都沒有給出啟動地址,將從代碼段的第一個字節(jié)處開始執(zhí)行當有多個模塊都指定了啟動地址,將從最后一條帶標號的END語句指定的啟動地址單元開始執(zhí)行以上情況都可能導致程序的錯誤執(zhí)行,編程時應予避免目前四十頁\總數(shù)六十二頁\編于十四點本章內容4.1概述4.2匯編語言的格式與語法4.3DOS與BIOS中斷調用4.4匯編語言程序設計和上機過程目前四十一頁\總數(shù)六十二頁\編于十四點4.3DOS與BIOS中斷調用8086微機系統(tǒng)開機過程:BIOS---->DOSBIOS(BasicInputOutputSystem):

裝于從地址0FE00H開始的8kROM中,提供了硬件系統(tǒng)的加電自檢,操作系統(tǒng)的引導裝入,主要I/O設備的處理程序及接口控制等功能模塊。使用BIOS中斷調用,使程序員不必了解硬件I/O的具體接口特性,可直接通過入口參數(shù)來調用,給編程帶來方便。DOS(DiskOperationSystem):DOS操作系統(tǒng)存放于硬盤等外存儲器中,啟動機器后被裝入內存,DOS中斷對應于一組中斷處理程序,這些子程序分別實現(xiàn)外設管理、文件讀/寫和管理、目錄管理等功能。DOS中斷通過調用BIOS中斷來實現(xiàn)對外設硬件的控制。DOS中斷比BIOS中斷更容易使用,應列為首選;BIOS調用速度快,適用于訪問高速外設。目前四十二頁\總數(shù)六十二頁\編于十四點DOS中斷調用與BIOS中斷調用的使用方法類似:設置入口參數(shù)設置功能號,通過設置AH寄存器通過INTn指令調用不同的中斷服務程序BIOS中斷調用:n=05H~1FHDOS中斷調用:n=20H~3FH,其中INT21H為最常用的DOS中斷調用例:屏幕輸出字符‘@’MOVDL,‘@’;設置入口參數(shù),輸出字符送DLMOVAH,02H;設置中斷調用功能號=02HINT21H;調用INT21H中斷輸出字符

4.3DOS與BIOS中斷調用目前四十三頁\總數(shù)六十二頁\編于十四點DOSINT21H軟中斷有90多種功能,完成設備、目錄和文件管理鍵盤輸入并顯示,功能號=01H

MOVAH,01H

;設置INT21H中斷調用功能號=01H

INT21H

;調用INT21H中斷,輸入字符存入AL中屏幕輸出一個字符,功能號=02H

MOVDL,‘A’

;待輸出字符送DL

MOVAH,02H

;設置INT21H中斷調用功能號=02H

INT21H;調用INT21H中斷,屏幕輸出字符4.3DOS中斷調用INT21H目前四十四頁\總數(shù)六十二頁\編于十四點直接控制臺輸入輸出,功能號=06H直接輸入:DL=0FFH,表示從鍵盤輸入字符ZF=1,表示無鍵盤輸入ZF=0,表示有鍵盤輸入,輸入字符存放于AL中中斷調用不等待鍵盤輸入例:CHECK:MOVDL,0FFHMOVAH,06HINT21HJZCHECK;判斷有無鍵盤輸入直接輸出:DL≠0FFH,表示向屏幕輸出顯示字符,DL中存放的是待顯示的字符:

MOVDL,‘A’MOVAH,06HINT21H

4.3DOS中斷調用INT21H目前四十五頁\總數(shù)六十二頁\編于十四點屏幕輸出顯示字符串(以$結束),功能號=09HSTRINGDB‘HELLO’,0AH,0DH,‘$’;0AH:ASCII碼換行

;0DH:ASCII碼回車

;'$'字符串結束標志MOVDX,OFFSETSTRING;字符串首地址送DX

MOVAH,09H;設置中斷調用功能號=09H

INT21H;屏幕輸出顯示字符串鍵盤輸入字符串,功能號=0AHSTRINGDB30,31DUP(?);串中第1個元素規(guī)定允許最多輸入的字符數(shù),此

;處最多可輸入30個字符(含回車),;串中第2個元素保留,保存輸入字符的個數(shù)

;從第3個元素起為輸入字符的緩沖區(qū)

MOVDX,OFFSETSTRING;字符串首地址送DX

MOVAH,0AH;設置中斷調用功能號=0AH

INT21H;鍵盤輸入字符串4.3DOS中斷調用INT21H目前四十六頁\總數(shù)六十二頁\編于十四點4.3DOS中斷調用INT21H打印機打印一個字符,功能號=05HMOVDL,‘A’;待打印字符送DLMOVAH,05H;設置INT21H中斷調用功能號

INT21H;打印輸出字符返回DOS系統(tǒng),功能號=4CH

MOVAH,4CH;設置INT21H中斷調用功能號

INT21H;返回DOS系統(tǒng)目前四十七頁\總數(shù)六十二頁\編于十四點BIOS中斷完成鍵盤、顯示、磁盤和打印機等常用I/O的驅動。鍵盤輸入,INT16H,例:

MOVAH,0;輸入字符存入AL中

INT16H MOVAH,1;查詢鍵盤緩沖區(qū),置標志ZFINT16HMOVAH,2;功能鍵狀態(tài)存入AL中

INT16H

屏幕顯示,INT10H,例:定位光標

MOVDH,4;行數(shù)

MOVDL,5;列數(shù)

MOVAH,2;光標控制功能號

INT10H;定位光標

4.3BIOS中斷調用目前四十八頁\總數(shù)六十二頁\編于十四點本章內容4.1概述4.2匯編語言的格式與語法4.3DOS與BIOS中斷調用4.4匯編語言程序設計與上機過程目前四十九頁\總數(shù)六十二頁\編于十四點模塊化編程方法:將一個較復雜的任務劃分成多個獨立的程序模塊,然后分別編制、調試形成目標文件,最后將多個目標文件連接起來形成一個完整的可執(zhí)行文件模塊內程序的基本結構:順序結構:完全按照程序指令編排的順序依次執(zhí)行分支結構:程序按邏輯條件進行判斷,作出不同的處理循環(huán)結構:程序按所設置的條件,多次重復執(zhí)行主-子程序結構:將一些通用性的程序作為子程序,供其它程序反復調用4.5匯編語言程序設計方法目前五十頁\總數(shù)六十二頁\編于十四點4.5匯編語言程序設計方法—分支結構C語言chara,b,resulta=4;b=5;if(0==a-b){a=a+b;}else{a=b;}result=a匯編語言

MOVAL,4MOVBL,5

CMPAL,BL

JNZUE

ADDAL,BLJMPNEXTUE:

MOVAL,BLNEXT:

MOVresult,AL匯編語言條件轉移

JCCNEXT…………NEXT:

……類似于:

if()

{

}NEXT:

…….目前五十一頁\總數(shù)六十二頁\編于十四點4.5匯編語言程序設計方法—分支結構實現(xiàn)條件轉移的近轉移或段間轉移

JZNEARPTRLAB方式1:

JZSHORTJ1

JMPNEXTJ1:

JMPNEARPTRLAB

NEXT:………………LAB:…………

方式2:

JNZNEXT

JMPNEARPTRLAB

NEXT:………………LAB:…………

目前五十二頁\總數(shù)六十二頁\編于十四點4.5匯編語言程序設計方法—循環(huán)結構

雙重for循環(huán)

NEQU30

ADDRDBNDUP(?)

……MOVCX,NDECCXLOOP1:MOVDI,CXMOVBX,0LOOP2: MOVAX,ADDR[BX]CMPAX,ADDR[BX+1]JGECONTINUEXCHGAX,ADDR[BX+1]MOVADDR[BX],AXCONTINUE:INCBX

LOOPLOOP2

MOVCX,DI

LOOPLOOP1WHILE循環(huán)

CYC:CMP

JCCNEXT……JMPCYCNEXT:……….DO_WHILE循環(huán)

CYC:…………JCCCYC

目前五十三頁\總數(shù)六十二頁\編于十四點4.5匯編語言程序設計方法—子程序設計寄存器內容的保護和回復

SUBPPROCFARPUSHAXPUSHBXPUSHCXPUSHDX……PUSHDXPOPCXPOPBXPOPAXRETSUBPENDP目前五十四頁\總數(shù)六十二頁\編于十四點主過程與子過程間的參數(shù)轉遞通過CPU內部寄存器通過堆棧傳遞,RETn通過內存變量傳遞的可以是參數(shù)本身或參數(shù)的地址(指針)4.5匯編語言程序設計方法—子程序設計目前五十五頁\總數(shù)六十二頁\編于十四點4.5匯編語言程序設計方法—子程序設計MY_ADDPROC

FARPUSHAXPUSHBXMOVAX,[BP-TYPEWORD]MOVBX,

溫馨提示

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

評論

0/150

提交評論