匯編程序?qū)I(yè)知識講座_第1頁
匯編程序?qū)I(yè)知識講座_第2頁
匯編程序?qū)I(yè)知識講座_第3頁
匯編程序?qū)I(yè)知識講座_第4頁
匯編程序?qū)I(yè)知識講座_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計movax,12hcalldisplayJmp1234h11/70主要內(nèi)容:匯編語言源程序構(gòu)造匯編語言語句格式偽指令功能調(diào)用匯編語言程序設(shè)計22/701 匯編語言源程序

機(jī)器語言——二進(jìn)制數(shù)形式指令和數(shù)據(jù)。

B064是什么意思?這就是機(jī)器語言。既不直觀,又不易理解和記憶.

MOVAL,64H

;很容易記憶理解,這就是助記符。

助記符——用便于記憶英語單詞表達(dá)指令操作碼。它反應(yīng)了指令功能和主要特性,便于人們理解和記憶。33/70

操作數(shù)也許放在存放器中,這就包括操作數(shù)地址。程序中遇到轉(zhuǎn)移指令或調(diào)用指令,也需要懂得轉(zhuǎn)移地址,若采取詳細(xì)地址就很不方便,一旦有錯,改動也很麻煩。于是人們采取標(biāo)號或符號來替代地址,例:

LP1:movax,VAR…loopLP1

匯編語言——指令助記符,符號地址,標(biāo)號,偽指令等語言元素集合以及這些元素使用規(guī)則。用匯編語言編寫程序叫匯編語言源程序。指令除了操作碼以外,尚有一種操作數(shù)問題。44/70匯編程序源程序編譯程序匯編程序匯編語言源程序機(jī)器語言目標(biāo)程序匯編源程序需翻譯成機(jī)器語言,變成可執(zhí)行文獻(xiàn),機(jī)器才能執(zhí)行,這個翻譯過程叫匯編?!呒壵Z言中稱該過程為“解釋”或“編譯”。執(zhí)行翻譯程序稱為“匯編程序”。55/70匯編語言程序設(shè)計與執(zhí)行過程輸入?yún)R編語言源程序源文獻(xiàn).ASM匯編(編譯)目標(biāo)文獻(xiàn).OBJ鏈接可執(zhí)行文獻(xiàn).EXE調(diào)試最后程序66/701.1匯編語言源程序構(gòu)造

匯編語言源程序一般由一種或幾個程序模塊組成,每個模塊一般由三個邏輯段組成:數(shù)據(jù)段——寄存數(shù)據(jù)、變量堆棧段——堆棧區(qū)域代碼段——寄存程序指令77/70一種基本匯編語言程序框架如下:

stack

SEGMENTPARA‘stack‘DB100DUP(‘stack’)

stackENDS

dataSEGMENT

<數(shù)據(jù)、變量在此定義>

dataENDS

codeSEGMENT

ASSUMECS:code,DS:data,ES:data

start:MOVAX,dataMOVDS,AXMOVES,AX

<此處加入你自己程序段>MOVAL,4CH

INT21H

code

ENDSEND

start

堆棧段數(shù)據(jù)段代碼段88/701.2匯編語言語句與格式匯編語言語句有兩種:指令性語句——由8086指令助記符組成語句批示性語句——由偽指令組成語句指令性語句格式為:

標(biāo)號:

指令助記符

目標(biāo)操作數(shù),源操作數(shù)

;注釋

批示性語句格式為:

名字

偽指令

操作數(shù)1,操作數(shù)2,…,操作數(shù)n

;注釋

注:各部分之間最少要用一種空格作為分隔符。99/70●指令性語句由CPU執(zhí)行,每一條指令性語句都有一條機(jī)器碼指令與其對應(yīng);

●批示性語句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對源程序進(jìn)行匯編,如何定義變量、分派存放單元以及批示程序開始和結(jié)束等。批示性語句無機(jī)器碼指令與其相對應(yīng)。

指令性語句匯編時生成機(jī)器碼;

批示性語句匯編時不生成機(jī)器碼。1010/70語句組成元素:標(biāo)號——指令符號地址,用來代表指令在存放器中地址。只能出目前指令性語句中,標(biāo)號后應(yīng)加上冒號。名字——段、過程、變量名字,用來代表它們在存放器中地址。只能出目前批示性語句中,名字后不加冒號。指令助記符——8086助記符、偽指令操作數(shù)——即指令操作對象對指令性語句——0,1,2個對批示性語句——根據(jù)需要而定操作數(shù)之間以逗號分隔操作數(shù)能夠是:寄存器、存放單元、常數(shù)或體現(xiàn)式

例如:AX,[DI+BX+10],200,16*8+TABLE,等等1111/70注釋——以分號開頭,可放在指令后,也可單獨(dú)一行。

注意注解寫法。要寫指令(段)在程序中作用,而不要寫指令操作。例如:下列為同一條指令寫注釋1)MOVCX,100;傳送100到CX2)MOVCX,100;循環(huán)計數(shù)器置初值顯然,第二種寫法要比第一種寫法要好。

1212/70匯編語言一種實例:hello.asm

dataSEGMENTHelloDB‘Hello,world!’,0DH,0AH,’$’dataENDSprogSEGMENT

ASSUMECS:prog,DS:datastart:MOVAX,dataMOVDS,AX

LEADX,hello ;取字符串首地址MOVAH,9INT21H ;顯示字符串MOVAH,4CHINT21H ;退回DOSprogENDSENDstart名字標(biāo)號1313/70

1.3數(shù)據(jù)項與體現(xiàn)式數(shù)據(jù)項包括常量、變量、標(biāo)號及體現(xiàn)式。1.常量二進(jìn)制數(shù),以B結(jié)尾。如01001101B。十進(jìn)制數(shù),如85。十六進(jìn)制數(shù),以H結(jié)尾。第1個數(shù)字為A-F時,前面應(yīng)加0,如0F160H。字符串:用引號括起來1個或多種字符。如‘ERROR!’,’a’,匯編時被翻譯成對應(yīng)ASCII碼45H,52H,52H,4FH,52H,21H和61H。1414/70有三個屬性:

段地址:即標(biāo)號所在段段地址;

偏移量:標(biāo)號所代表存放單元段內(nèi)偏移地址;

類型:NEAR或FAR:

NEAR—表達(dá)標(biāo)號所在語句與轉(zhuǎn)移指令/調(diào)用指令在同一碼段內(nèi),跳轉(zhuǎn)時只需變化IP即可。

FAR—標(biāo)號所在語句與轉(zhuǎn)移指令/調(diào)用指令不在同一代碼段內(nèi)。若沒有對類型進(jìn)行說明,默以為NEAR。標(biāo)號一般作為轉(zhuǎn)移指令或CALL指令轉(zhuǎn)移地址。2.標(biāo)號——指令所在內(nèi)存單元符號地址1515/70變量——即內(nèi)存中存放單元或數(shù)據(jù)區(qū)。變量名——是存放單元(數(shù)據(jù)區(qū))符號地址或名字。變量也有三個屬性:段地址—變量所在段段地址偏移量—變量單元地址與段首地址之間位移量。類型—有BYTE、WORD和DWORD三種。變量在程序中作為存放器操作數(shù)被引用。3.變量1616/70標(biāo)號和變量名使用規(guī)則組成:A-Z(不分大小寫),0-9,?@

._$不能以數(shù)字開頭,句號(.)只能作為首字符長度不大于31個字符不能與保存字(指令助記符、偽指令、預(yù)定義符號等)重名不能反復(fù)定義例如:

正確:LP1,AGAIN,NEXT,_GO,OK_1

錯誤:4M,LOOP,AAA,#HELP,+ONE1717/704.體現(xiàn)式體現(xiàn)式是常數(shù)、寄存器、標(biāo)號、變量與運(yùn)算符組合。有數(shù)字體現(xiàn)式和地址體現(xiàn)式兩種。匯編時按優(yōu)先規(guī)則對體現(xiàn)式進(jìn)行計算,計算出詳細(xì)數(shù)值或地址。運(yùn)行時不能變化。體現(xiàn)式中運(yùn)算符有6類:算術(shù)、邏輯、關(guān)系、取地址、屬性、雜類。1818/70用于數(shù)字體現(xiàn)式,例:

MOVAX,4*1024匯編后形式為:

MOVAX,4096用于地址體現(xiàn)式,例:

LEASI,TAB+3若TAB偏移地址為1000H,則匯編后形式為:

LEASI,[1003H]1)算術(shù)運(yùn)算符——+、-、*、/,MOD1919/70邏輯運(yùn)算符只能用于數(shù)字體現(xiàn)式中。例:MOV CL,36HAND0FH

經(jīng)匯編后:MOVCL,06H注意,不要把邏輯運(yùn)算符與邏輯運(yùn)算指令混同:例:ANDAX,3FC0HAND0FF00H匯編后源操作數(shù)被翻譯為:3F00H,因此上述指令與ANDAX,3F00H等價。2)邏輯運(yùn)算符——AND、OR、XOR、NOT2020/70關(guān)系運(yùn)算成果是一種邏輯值:真或假關(guān)系為真,成果為全1

關(guān)系為假,成果為全0例:MOVBX,PORTGT300H若PORT值大于300H,則匯編后為:

MOVBX,0FFFFH不然匯編后為:

MOVBX,03)關(guān)系運(yùn)算符——EQ、NE、LT、GT、LE、GE2121/70SEG:取變量/標(biāo)號段地址OFFSET:取變量/標(biāo)號偏移地址例:VARDB12H ……MOVBX,OFFSET VAR;取變量VAR偏移地址MOVAX,SEGVAR;取變量VAR段地址注意,下列指令異同:

MOVBX,OFFSETVARLEABX,VAROFFSET只能取靜態(tài)偏移地址;LEA指令即可取靜態(tài)偏移地址,也可取動態(tài)偏移地址。4)取地址運(yùn)算符——SEG、OFFSET2222/70TYPE取變量類型(1,2,4)LENGTH取所定義變量長度(即變量中元素個數(shù))SIZE取所定義存放區(qū)字節(jié)數(shù)

(=TYPE*LENGTH)例:VARDW1,2,3,4,5則TYPEVAR=2LENGTHVAR=5SIZEVAR=105)取值運(yùn)算符——TYPE、LENGTH、SIZE2323/706)屬性運(yùn)算符——PTR用來指定地址操作數(shù)類型。格式:<類型>PTR<地址操作數(shù)> 類型∈{BYTE,WORD,DWORD,NEAR,FAR}BYTE、WORD、DWORD

用于描述數(shù)據(jù)存放單元(變量)地址NEAR、FAR用于描述轉(zhuǎn)移、調(diào)用目標(biāo)地址2424/70例:MOV BYTEPTR[DI],0;字節(jié)類型MOV WORDPTR[DI],0;字類型

MOV [DI],0B5H;類型不定PTR也可用來進(jìn)行強(qiáng)制類型轉(zhuǎn)換例:STR1DW? ;STR1定義為字類型 MOV AX,STR1;合法MOV AL,STR1;非法MOVAL,BYTEPTRSTR1;合法2525/702偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義和段寄存器指定偽指令過程定義偽指令結(jié)束偽指令由匯編程序執(zhí)行指令,它本身不被匯編成機(jī)器指令。常用偽指令有:2626/702.1數(shù)據(jù)定義偽指令用于定義變量,即內(nèi)存單元或數(shù)據(jù)區(qū)。數(shù)據(jù)定義偽指令格式為:變量名數(shù)據(jù)定義偽指令操作數(shù),操作數(shù),…常用數(shù)據(jù)定義偽指令有如下幾個:DB定義字節(jié)DW定義字DD定義雙字操作數(shù)能夠是常數(shù)、變量或體現(xiàn)式2727/70例1:DATA_BDB10,5,10HDATA_WDW100H,-4DATA_DDD0FFFBH匯編后內(nèi)存分派情況如右圖所示。05H10H00H01HFCHFFHFBHFFH00H00H0AHQDATA_BDATA_WDATA_D10510H100H-40FFFBH2828/70例2:操作數(shù)能夠是字符串,例如

STRDB ‘HELLO’匯編后情況如圖:STR‘H’‘E’‘L’‘L’‘O’注意下面兩個定義不一樣之處:DB ‘AB’ ;41H在低字節(jié),42H在高字節(jié)DW‘AB’;42H在低字節(jié),41H在高字節(jié)48H45H4CH4CH4FH2929/70操作數(shù)?用來保存存放空間,但不存入數(shù)據(jù).例3:ABCDB0,1,2,3,4,’OK’,’$’RSVDW?,?,?,?,?,?,?,?復(fù)制操作符DUP:反復(fù)數(shù)據(jù)能夠使用復(fù)制操作符DUP,如上面RSV亦可寫成:RSVDW8DUP(?)若操作數(shù)中若使用$,則表達(dá)是地址計數(shù)器目前值。3030/70例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3設(shè)TABLE偏移地址為0080H,則匯編后如下列圖所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes3131/702.2符號定義偽指令把一種體現(xiàn)式用一種符號表達(dá),后來凡出現(xiàn)該體現(xiàn)式地方都可用這個符號表達(dá)。類似于C語言中#define。符號定義偽指令有兩種:EQU,=用EQU定義符號未清除前,不能重新定義。清除EQU定義可用PURGE偽指令。用”=”定義符號可在任何時候進(jìn)行重定義。二者均不占用存放空間,僅是給符號賦值3232/70例:FIVEEQU5

COUNTEQUCX

TENEQU10

DIST=BYTEPTR[SI+BP]

GOTO=JMP…MOVAX,TENMOVCX,COUNTADDDIST,FIVE

DIST=WORDPTR[SI+BP+1]ADDDIST,AX

GOTOLABEL定義引用3333/702.3段定義偽指令匯編語言程序是按段來組織程序和數(shù)據(jù)。和存放器物理段相對應(yīng),匯編語言程序中段稱為邏輯段。匯編連接后被映射到物理段中。三類段:代碼(程序)、數(shù)據(jù)、堆棧段定義偽指令:SEGMENT、ENDS、ASSUME、ORG定義一種段基本格式:

段名

SEGMENT

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

<匯編語言語句>

段名

ENDS3434/70這兩個偽指令總是成對出現(xiàn),二者前面段名應(yīng)一致。SEGMENT說明了一種段開始,ENDS說明了一種段結(jié)束。對數(shù)據(jù)段和堆棧段,段中語句一般是變量定義。對代碼段則是指令語句。如:dataSEGMENT<指令語句>dataENDSSEGMENT和ENDS偽指令3535/70ASSUME偽指令在代碼段中,還必須明確段和段寄存器關(guān)系,這由ASSUME語句來指定。如

ASSUMECS:code,DS:data,ES:data語句中code和data為段名。這個語句說明:

1.CS將指向名字為code代碼段

2.DS和ES將指向名字為data數(shù)據(jù)段3636/70但要注意,ASSUME偽指令只是通知匯編程序有關(guān)段寄存器與段關(guān)系,并沒有給段寄存器賦予實際初值。故下面語句

MOV AX,DATAMOV DS,AXMOV ES,AX將段基址裝入段寄存器。假如程序中用到堆棧段,則SS也需裝入實際初值。代碼段基地址不需要程序員裝入CS寄存器,而由OS負(fù)責(zé)裝入。3737/70SEGMENT語句后能夠帶有可選參數(shù),用以要求邏輯段其他某些屬性。1)定位類型說明如何確定邏輯段邊界。有四種:PARA(Paragraph):

邏輯段從一種節(jié)(16個字節(jié))邊界開始。即段起始地址應(yīng)能被16整除,或這說段起始物理地址應(yīng)為××××0H。——默認(rèn)類型BYTE:

邏輯段從字節(jié)邊界開始,即段能夠從任何地址開始。WORD:

邏輯段從字邊界開始。即段起始地址必須是偶數(shù)。PAGE:

邏輯段從頁邊界開始。256字節(jié)稱為一頁,故段起始物理地址應(yīng)為×××00H。3838/70

2)組合類型說明不一樣模塊中同名段組合方式。PUBLIC :所有此類型同名段組合成一種邏輯段,公用一種段地址,運(yùn)行時裝入同一種物理段中。COMMON:所有此類型同名段具有相同起始地址(覆蓋),共享相同存放區(qū)域。AT<數(shù)值體現(xiàn)式>:按絕對地址定位,段地址就是體現(xiàn)式值。STACK:專用于說明堆棧段,組合方式同PUBLIC3939/703)類別用單引號括起來字符串。所有同類別段被安排在連續(xù)存放區(qū)域中。如:在模塊1中有段定義:

seg1SEGMENTPARASTACK‘stack’

…seg1ENDS在模塊2中有段定義:

seg2SEGMENTPARASTACK‘stack’

…seg2ENDS則連接時這兩個段被安排在一起。4040/70ORG要求了段內(nèi)指令或數(shù)據(jù)寄存開始地址(偏移地址初值),其格式為:

ORG<體現(xiàn)式>體現(xiàn)式值即為開始地址,從此地址起連續(xù)寄存程序或數(shù)據(jù)。例:ABCSEGMENTORG100Hbegin:……

ABCENDSORG偽指令指令從100H開始寄存4141/702.4過程定義偽指令PROC、ENDP過程就是子程序。一種過程能夠被其他程序所調(diào)用(用CALL指令),過程最后一條指令一般是返回指令(RET)。過程定義偽指令格式為

<過程名>

PROC[類型]……RET

<過程名>

ENDP注意:PROC和ENDP必須成對出現(xiàn)。4242/70過程類型有兩種:

NEAR——(默認(rèn)類型)表達(dá)段內(nèi)調(diào)用

FAR——表達(dá)段間調(diào)用

調(diào)用一種過程格式為:

CALL

<過程名>4343/702.5宏定義偽指令假如需要數(shù)次使用同一種程序段,能夠?qū)⑦@個程序段定義為一種”宏指令”,然后在需要時,可簡單地用宏指令名來替代這個程序段。指令格式為:<宏指令名>

MACRO

[形參表]

<宏定義體>

ENDM4444/70例:兩個數(shù)之和宏定義和宏調(diào)用。宏定義為:DADDMACROX,Y,ZMOVAX,XADDAX,YMOVZ,AX

ENDMX、Y、Z是形式參數(shù)。調(diào)用宏DADD時可寫為:

DADD

DATA1,DATA2,SUMDATA1,DATA2,SUM是實際參數(shù),由它們替代定義中X、Y、Z。4545/70宏調(diào)用與過程(子程序)調(diào)用都是一次定義,數(shù)次調(diào)用。它們之間差異是:①執(zhí)行形式:宏命令偽指令由宏匯編程序在匯編過理中進(jìn)行處理,而CALL、RET則是由CPU執(zhí)行指令。②匯編成果:宏命令偽指令匯編后被展開。③執(zhí)行速度:宏命令執(zhí)行速度較快(因無調(diào)用轉(zhuǎn)移)④

占用內(nèi)存:宏指令簡化了源程序,但不能簡化目標(biāo)程序,并不節(jié)省內(nèi)存單元。使用過程能夠節(jié)省代碼占用內(nèi)存空間。4646/70宏展開:匯編程序會把宏調(diào)用按宏定義展開。例如:宏定義為:DisplayMACROstringLEADX,stringMOVAH,9INT21HENDM程序中宏調(diào)用:……DISPLAYERROR_MESSAGEDISPLAYEXIT_MESSAGE……匯編后成果:(帶有+號指令為宏展開后成果)……+LEADX,ERROR_MESSAGE+MOVAH,9+INT21H+LEADX,EXIT_MESSAGE+MOV AH,9+INT21H……4747/702.6匯編結(jié)束偽指令END匯編語言源程序最后,要加匯編結(jié)束偽指令END,以使匯編程序結(jié)束匯編。格式:END[體現(xiàn)式]END后跟體現(xiàn)式一般就是程序第一條指令標(biāo)號,批示程序啟動地址(要執(zhí)行第一條指令地址)。4848/703DOS系統(tǒng)功能調(diào)用介紹系統(tǒng)功能調(diào)用——由OS提供一組實現(xiàn)特殊功能子程序供程序員在程序中調(diào)用,以減輕編程工作量。系統(tǒng)功能調(diào)用有兩種,一種稱為DOS功能調(diào)用,另一種稱為BIOS功能調(diào)用。顧客程序在調(diào)用這些系統(tǒng)服務(wù)程序時,不是用CALL命令,而是采取軟中斷指令I(lǐng)NTn來實現(xiàn)。在DOS系統(tǒng)中,功能調(diào)用都是用軟中斷指令I(lǐng)NT21H來實現(xiàn)。4949/70INT2lH功能大體能夠分為四個方面:設(shè)備管理、目錄管理、文獻(xiàn)管理和其他。參見P411頁附錄C.3D0S系統(tǒng)功能調(diào)用使用辦法如下:① AH←功能號;② 設(shè)置該功能所要求其他入口參數(shù);③ 執(zhí)行INT21H指令;分析出口參數(shù)。下列介紹INT21H幾個最常用功能。5050/70有關(guān)數(shù)據(jù)輸入和輸出我們這里只討論鍵盤輸入和顯示輸出,調(diào)用系統(tǒng)功能需要提供入口參數(shù)及所調(diào)用功能號,調(diào)用結(jié)束返回成果。1.DOS鍵盤功能調(diào)用(1)從鍵盤輸入一種字符(功能號=1)

MOVAH,1INT21H<AL中有鍵入字符>

5151/70例:程序中有時需要顧客對提醒做出應(yīng)答。GET_KEY:MOVAH,1

;等候鍵入字符

INT21H

;成果在AL中

CMPAL,’Y’ ;是’Y’?JZYES ;是,轉(zhuǎn)YESCMPAL,’N’ ;是’N’?JZNO ;是,轉(zhuǎn)NOJMPGET_KEY ;不然繼續(xù)等候輸入YES: …

…NO: …5252/70(2)輸入字符串(功能號=0AH)此功能調(diào)用從鍵盤輸入一串字符并把它存入顧客指定緩沖區(qū)中。

MOVAH,

0AH

LEADX,<字符串緩沖區(qū)首地址>

INT21H

(預(yù)留N1個字節(jié)存放單元)

0DHN2N1N1:緩沖區(qū)長度(最大鍵入字符數(shù))N2:實際鍵入字符數(shù)(不包括回車符)顧客定義輸入字符串緩沖區(qū)格式5353/70若顧客鍵入字符數(shù)(包括回車)≥定義N1,本功能調(diào)用將不再接收新鍵入,且光標(biāo)不再向右移動。例:設(shè)在數(shù)據(jù)段定義鍵盤緩沖區(qū)如下:

STR1DB10,?,10DUP(?)調(diào)用DOS功能0AH號功能程序段為:

LEADX,STR1MOVAH,0AHINT21H此程序段最多從鍵盤接收10個按鍵(包括回車)。5454/702.DOS顯示功能調(diào)用(1)在顯示屏上顯示一種字符(功能號=2)

MOVAH,2

MOVDL,<要顯示字符>INT21H例:在顯示屏上顯示一種字符‘A’MOVAH,2MOVDL,’A’;或MOVDL,

41HINT21H5555/70

MOVAH,9LEADX,<字符串>

INT21H注意:被顯示字符串必須以’$’結(jié)束。(2)顯示字符串(功能號=9)5656/70例:在屏幕上顯示:’HELLO,WORLD!’;在數(shù)據(jù)段定義字符串:DATASEGMENTSTR1DB‘HELLO,WORLD!$’DATAENDS;在代碼段中進(jìn)行顯示輸出

MOVAH,9LEADX,STR1INT21H完整程序:HELLO.ASM5757/70匯編語言上機(jī)過程YYYNNN有錯?有錯?有錯?結(jié)束匯編輸入(修改)源程序連接運(yùn)行查錯開始用EDIT,NOTEPAD等任何文本編輯器。源程序存為.ASM文獻(xiàn)用MASM宏匯編程序進(jìn)行匯編。匯編后生成.OBJ目標(biāo)文獻(xiàn)。命令格式:MASM<源文獻(xiàn)名.ASM>;用LINK連接程序進(jìn)行連接。連接后生成.EXE可執(zhí)行文獻(xiàn)。命令格式:LINK<目標(biāo)文獻(xiàn)名.OBJ>;用TD、DEBUG等調(diào)試程序進(jìn)行調(diào)試。命令格式:TD<可執(zhí)行文獻(xiàn)名.EXE>5858/70標(biāo)號:條件滿足?處理2次序程序3分支程序NYIF…THEN構(gòu)造程序構(gòu)造:

… 測試/比較指令(TEST/CMP)條件轉(zhuǎn)移指令(Jx標(biāo)號)

處理體

標(biāo)號:其他指令 …5959/70程序構(gòu)造:TEST/CMP指令Jx標(biāo)號1

處理體P1JMP標(biāo)號2標(biāo)號1:

處理體P2標(biāo)號2:其他指令…條件滿足?處理P1處理P2標(biāo)號1:標(biāo)號2:條件1條件2IF…THEN…ELSE構(gòu)造6060/70標(biāo)號1:條件1成立?P1NYCASE構(gòu)造程序構(gòu)造:…TEST/CMP指令(測試條件1)

Jx標(biāo)號1;不滿足轉(zhuǎn)標(biāo)號1

處理體P1…

JMP標(biāo)號n+1標(biāo)號1:TEST/CMP指令(測試條件2)

Jx標(biāo)號2;不滿足轉(zhuǎn)標(biāo)號2

處理體P2…

JMP標(biāo)號n+1標(biāo)號2:TEST/CMP指令(測試條件3)Jx標(biāo)號3;不滿足轉(zhuǎn)標(biāo)號3

處理體P3…JMP標(biāo)號n+1標(biāo)號3:TEST/CMP指令(測試條件4)……標(biāo)號n+1:(公共出口)條件2成立?條件n成立?…Pn+1標(biāo)號2:標(biāo)號n:標(biāo)號n+1:P2PnNNYY6161/704循環(huán)程序1.DO…UNTIL<條件>構(gòu)造先執(zhí)行,再判斷條件。工作部分最少執(zhí)行一次。初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN6262/702.DOWHILE<條件>構(gòu)造先判斷條件,再執(zhí)行。工作部分有也許一次都不執(zhí)行。初始化循環(huán)體循環(huán)控制繼續(xù)循環(huán)?YN6363/70掌握下列幾點:調(diào)用子程序用CALL指令,返回調(diào)用程序用RET指令。子程序允許嵌套調(diào)用。進(jìn)入子程序后首先要保護(hù)主程序運(yùn)行狀態(tài)(標(biāo)志位)和使用寄存器內(nèi)容(稱為保護(hù)現(xiàn)場),退出子程序前要恢復(fù)現(xiàn)場。調(diào)用前要預(yù)先確定子程序中要使用哪些寄存器,并定義入口參數(shù)和出口參數(shù)。參數(shù)傳遞可利用寄存器、存放單元或堆棧(要用BP尋址)。子程序設(shè)計舉例6464/70例1:

二進(jìn)制數(shù)(0-F)轉(zhuǎn)換成ASCII(‘0’-‘F’)子程序。BIN2ASCPROC;要轉(zhuǎn)換數(shù)在AL低四位;轉(zhuǎn)換成果仍在AL中CMPAL,9JAA2FADDAL,30HJMPDONEA2F:ADDAL,37HDONE:RETBIN2ASCENDP

調(diào)用辦法:(在主程序中)…

MOVAL,0CH

CALLBIN2ASC(AL中有0CHASCII碼43H,’C’)6565/70例.字符串處理程序設(shè)計

對字符串進(jìn)行操作時,往往需要確定它長度。一般字符串結(jié)束標(biāo)志以CR或$作標(biāo)志。因此能夠用掃描CR或$辦法計算出串長。在計算串長時,應(yīng)注意串長一般應(yīng)不大于255個字節(jié)。

6666/70簡化流程圖:開始求串長串長<256?顯示串長高位顯示串長低位結(jié)束Y警告:太長求串長目前字符是‘$’?搜索CR字符同步指針增量返回N串長加1存串長N找到?NYY初始化指針/計數(shù)器6767/70如下程序是準(zhǔn)備將0至100中奇數(shù)求和,成果送SUM字單元DATASEGMENT

;(1)定義成果單元,初值為0

DATAENDS

STACTSEGMENTPARASTACK

DB100DUP(?)

STACKENDS;定義好堆棧

CODESEGMENT

ASSUMEDS:DATA,CS:CODE,SS:STACK

START:MOV;(2)

MOVDS,AX

溫馨提示

  • 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

提交評論