微機(jī)原理及應(yīng)用:第04章-1 程序格式與偽指令_第1頁(yè)
微機(jī)原理及應(yīng)用:第04章-1 程序格式與偽指令_第2頁(yè)
微機(jī)原理及應(yīng)用:第04章-1 程序格式與偽指令_第3頁(yè)
微機(jī)原理及應(yīng)用:第04章-1 程序格式與偽指令_第4頁(yè)
微機(jī)原理及應(yīng)用:第04章-1 程序格式與偽指令_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、4 匯編語(yǔ)言程序設(shè)計(jì)4.1.1 匯編語(yǔ)言程序格式4.1.2 偽指令語(yǔ)句4.1.3 完整的匯編語(yǔ)言程序框架主要內(nèi)容4-1 匯編語(yǔ)言程序格式和偽指令(難點(diǎn))匯編語(yǔ)言程序格式偽指令語(yǔ)句完整的匯編語(yǔ)言程序框架4-2 DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用DOS系統(tǒng)功能調(diào)用BIOS中斷調(diào)用4-3 匯編程序設(shè)計(jì)方法與實(shí)例(重點(diǎn))順序程序設(shè)計(jì)分支程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序子程序調(diào)用4 匯編語(yǔ)言程序設(shè)計(jì)源程序.asmS2 匯編使用匯編程序翻譯(MASM)目標(biāo)代碼(.obj)列表文件(.lst)交叉索引文件(.crf)程序算法數(shù)據(jù)結(jié)構(gòu)S1 編輯使用編輯程序編輯可執(zhí)行程序.exeS3 連接使用連接程序組合(LINK)匯編

2、程序開(kāi)發(fā)過(guò)程匯編語(yǔ)言程序匯編語(yǔ)言程序是由語(yǔ)句構(gòu)成的,語(yǔ)句分為指令性語(yǔ)句和偽指令語(yǔ)句指令性語(yǔ)句(Instruction)要求CPU在可執(zhí)行程序運(yùn)行過(guò)程中的進(jìn)行的操作行為,該指令產(chǎn)生機(jī)器碼,存儲(chǔ)在程序存儲(chǔ)器中偽指令語(yǔ)句(Directive)要求匯編程序在匯編過(guò)程中進(jìn)行的操作行為,在匯編過(guò)程結(jié)束后,偽指令不再保留任何痕跡,不產(chǎn)生機(jī)器碼,不占用程序存儲(chǔ)器空間匯編語(yǔ)言程序格式和偽指令指令性語(yǔ)句格式標(biāo)號(hào):指令符 操作數(shù),操作數(shù);注釋1) 標(biāo)號(hào)字段標(biāo)號(hào)代表本指令的符號(hào)地址,必須跟冒號(hào)“:”,這是與偽指令語(yǔ)句的突出區(qū)別2) 指令符字段 指令助記符與CPU的指令機(jī)器碼對(duì)應(yīng),決定于CPU的要求3) 操作數(shù)字段可以

3、由常數(shù)、變量、表達(dá)式構(gòu)成。 4) 注釋字段 從“;”開(kāi)始,直到行尾。行匯編程序,按行進(jìn)行匯編匯編語(yǔ)言程序格式和偽指令偽指令語(yǔ)句格式名字 偽指令符 操作數(shù),操作數(shù);注釋1) 名字字段: 字母打頭, 名字后不能用冒號(hào)“:”,這是與指令 性語(yǔ)句的突出區(qū)別2) 偽指令字段 例如:數(shù)據(jù)定義:DB,DW,段定義:SEGMENT,ENDS3) 操作數(shù)字段 可以由常數(shù)、符號(hào)、表達(dá)式構(gòu)成 4) 注釋字段 從“;”開(kāi)始,直到行尾。行匯編程序,按行進(jìn)行匯編匯編語(yǔ)言程序格式和偽指令2.變量變量是代表存放在存儲(chǔ)單元的數(shù)據(jù)變量名,可認(rèn)為是存放數(shù)據(jù)的存儲(chǔ)單元的符號(hào)地址變量的屬性:段值(SEG)偏移地址(OFFSET)類(lèi)型(

4、BYTE,WORD,DWORD)數(shù)據(jù)項(xiàng)1.常數(shù):(1)數(shù)字常量: (2)字符串常量:ASCII碼3.標(biāo)號(hào)標(biāo)號(hào)是一條指令代碼的符號(hào)地址,該指令第1個(gè)字節(jié)存儲(chǔ)單元屬性有: 段 值(SEG) 偏移量(OFFSET) 距離屬性:NEAR(近),只能被本段內(nèi)訪(fǎng)問(wèn) FAR(遠(yuǎn)),可以被其它段訪(fǎng)問(wèn) 類(lèi)別符號(hào)名稱(chēng)運(yùn)算結(jié)果舉例算術(shù)運(yùn)算符+-*/MODSHLSHR加減乘除取模左移右移取和值取差值取乘積取商值取余數(shù)左移2進(jìn)制位右移二進(jìn)制位邏輯運(yùn)算NOTANDORXOR非與或異或按位邏輯非按位邏輯與按位邏輯或按位邏輯異或表達(dá)式將常數(shù)、符號(hào)等數(shù)據(jù)項(xiàng)通過(guò)運(yùn)算符連接起來(lái)的算式由匯編程序在匯編過(guò)程中計(jì)算,匯編結(jié)束時(shí),為確定值

5、表達(dá)式和運(yùn)算符類(lèi)別符號(hào)名稱(chēng)運(yùn)算結(jié)果舉例關(guān)系運(yùn)算符EQNELTLEGTGE相等不等小于小于或等于大于大于或等于結(jié)果為真時(shí),輸出全為“1”結(jié)果為假時(shí),輸出全為“0”數(shù)值返回符SEGOFFSETLENGTHTYPESIZEHIGHLOW取段基址取偏移地址取元素個(gè)數(shù)取類(lèi)型取總字節(jié)數(shù)分離高字節(jié)分離低字節(jié)段基址偏移地址元素個(gè)數(shù)類(lèi)型值變量總字節(jié)數(shù)取高字節(jié)取低字節(jié)修改屬性PTR段寄存器:修改類(lèi)型段超越修改類(lèi)型指定段表達(dá)式和運(yùn)算符優(yōu)先級(jí)運(yùn)算符高 01234567低 8(), ,LENGTH,SIZEPTR,OFFSET,SEG,TYPE,CS:,DS:,ES:,SS:HIGH,LOW*,/,MOD,SHL,SH

6、R+,-EQ,NE,LT,LE,GT,GENOTANDOR,XOR表達(dá)式和運(yùn)算符表達(dá)式中包含多個(gè)運(yùn)算符時(shí)按運(yùn)算符的優(yōu)先級(jí)從高到低順序計(jì)算優(yōu)先級(jí)相同的運(yùn)算符,按從左到右的順序計(jì)算4.1.1 匯編語(yǔ)言程序格式4.1.2 偽指令語(yǔ)句4.1.3 完整的匯編語(yǔ)言程序框架段定義語(yǔ)句的一般形式: 段名SEGMENT 定位類(lèi)型 組合類(lèi)型 分類(lèi)名 PAGE(頁(yè)) *NONE STACK *PARA(節(jié)) PUBLIC CODE WORD(字) STACK BYTE(字節(jié)) COMMON AT MEMORY ;段中內(nèi)容段名ENDS加“”項(xiàng)可省略,但堆棧段的組合類(lèi)型是STACK,不可省略省略項(xiàng)不寫(xiě)時(shí),其值用帶“*”

7、的項(xiàng),它們是隱含用法,用的是默認(rèn)值偽指令段定義 內(nèi)3個(gè)參數(shù)的功能:1)定位類(lèi)型(Align Type)用LINK程序?qū)⒊绦蛑械亩蜗嗷ャ暯訒r(shí),用定位類(lèi)型來(lái)確定該段存儲(chǔ)器的起始邊界要求。定位類(lèi)型有四種: PAGE該段起始地址能被256(頁(yè))整除 PARA該段起始地址能被16(節(jié))整除 WORD該段起始地址能被2(字節(jié))整除 BYPE起始地址可從任何地方開(kāi)始偽指令段定義2)組合類(lèi)型(Combine-Type)組合類(lèi)型告訴LINK程序本段與其它段關(guān)系,包括:NONE 與其它段不連接,各段有獨(dú)立段基址和偏移量PUBLIC 同名同類(lèi)別模塊段連接成一段,段基址同, 偏移量不同COMMON 本段與其它段覆蓋,

8、偏移地址名稱(chēng)不同。STACK 這是堆棧段,不可省略MEMORY 連接時(shí)該段放在所有段最后(最高地址)AT 定義本段的段基地址。如:AT 2000H定義該段的段基地址為20000H。3)分類(lèi)名(class)LINK將分類(lèi)名相同的邏輯段組成1個(gè)段組,分類(lèi)名有STACK,CODE和DATA等。偽指令段定義段定義語(yǔ)句SEGMENT和ENDS,用來(lái)定義一個(gè)邏輯段。例 用段定義語(yǔ)句定義一個(gè)數(shù)據(jù)段, 段名為DATA, 段中包含X、Y兩個(gè)變量。DATA SEGMENT;數(shù)據(jù)段開(kāi)始,DATA為段名;表示該段的基址X DW 1234H;變量X的段基址:偏移量;=DATA:0000,內(nèi)容為1234HY DB 56H

9、;變量Y的段基址:偏移量;=DATA:0002,內(nèi)容為56HDATA ENDS;數(shù)據(jù)段結(jié)束偽指令段定義段分配語(yǔ)句ASSUME告訴匯編程序,4個(gè)段寄存器CS、DS、SS、ES分別與哪些段有關(guān)。格式如下,也可分兩行書(shū)寫(xiě)。 ASSUMECS:代碼段名,DS:數(shù)據(jù)段名 ASSUMESS:堆棧段名,ES:附加段名偽指令段分配子程序或過(guò)程(Procedure)定義格式 過(guò)程名PROCNEAR/FAR ;過(guò)程內(nèi)容RET;過(guò)程的最后一條指令 過(guò)程名ENDP用指令性語(yǔ)句CALL調(diào)用過(guò)程 CALL過(guò)程名過(guò)程名像標(biāo)號(hào)一樣,有3種屬性:段基址、偏移地址和距離屬性(NEAR或FAR),它可作為CALL指令的操作數(shù)偽指令

10、過(guò)程定義程序結(jié)束語(yǔ)句的格式為: END 標(biāo)號(hào)名或名字它位于程序的最后一行,指示源程序結(jié)束,遇到END偽指令則停止匯編。標(biāo)號(hào)名或名字可省略。偽指令程序結(jié)束格式:變量名 偽指令助記符 操作數(shù),操作數(shù),;注釋變量名 偽指令助記符 N dup(操作數(shù),操作數(shù) );注釋變量名用符號(hào)表示,可以省略,表示第一個(gè)操作數(shù)的最低字節(jié)所在存儲(chǔ)單元的符號(hào)地址,屬性有段基址、偏移地址、類(lèi)型功能:把操作數(shù)按從低地址到高地址的順序依次存放到“變量名”指定的存儲(chǔ)單元中,或者只分配存儲(chǔ)空間而不存入數(shù)據(jù)。操作數(shù)可以是常數(shù)、字符串、變量、標(biāo)號(hào),表達(dá)式。多個(gè)操作數(shù)之間必須用逗號(hào)“,”分隔N dup():表示()里的內(nèi)容復(fù)制 N 次,

11、并依次連續(xù)存放偽指令包括DB、DW、DD、DQ、DT,分別定義每個(gè)操作數(shù)為字節(jié)、字、雙字、8字節(jié)、10字節(jié)變量偽指令變量定義例: 操作數(shù)是常數(shù)或表達(dá)式DA1DB 10H,52HDA2DW1122H,34HDA3DD5*20H,0FFEEHDA110H52H22H11H34H00H.A0H00H00H00HEEH.FFH00H00HDA2DA3偽指令變量定義例: 操作數(shù)是字符串FIRSTDB ABCDESECONDDWOKTHIRDDBOKFIRSTABCDEKOOK.SECOND注意:字符串操作數(shù)存儲(chǔ)對(duì)應(yīng)的ASCII碼;字符串一般用DB定義,按照從前到后的順序存放;當(dāng)只有兩個(gè)字符時(shí),可用DW定

12、義,但要注意存放順序;多于兩個(gè)字符,只能用DB定義;THIRD偽指令變量定義例: 用?定義不確定值的變量M1DB ?M2DW0D55H,?M1?55H0DH?.M2注意:?只保留存儲(chǔ)空間,其初值無(wú)意義偽指令變量定義例: 用 dup 定義重復(fù)數(shù)值ONE DB 3 DUP(0)TWO DW2 DUP(1,2)ARYDB3 DUP (4 DUP (0)ONE0000000100020001000200.TWO偽指令變量定義例: 用 dup 嵌套定義重復(fù)數(shù)值THREE DB2 DUP(1,2 DUP(20H,21H)THREE01H20H21H20H21H01H20H21H20H21H.偽指令變量定義

13、例:有如下定義TABLE1 DD 0,1,2,3 TABLE2 DB 30H,31H,32H,33HTABLE3 DB 12345678910 ZER DW 8 DUP(0)DEM DB HELLO?判斷下列指令是否正確:1. MOV AX,TABLE1 2. MOV BX,TABLE23. MOV AL, TABLE34. MOV AX, WORD PTR TABLE1 偽指令變量定義1)等值偽指令EQU使用EQU語(yǔ)句可使程序更清晰、易讀,其格式為: 符號(hào)名 EQU 變量、標(biāo)號(hào)、常數(shù)等例4.12 EQU偽指令語(yǔ)句舉例。 Profit EQU 10;常數(shù)值10賦給符號(hào)名ProfitCNT1 E

14、QU 41H;常數(shù)值41H賦給符號(hào)名CNT1COUNT EQU 8;常數(shù)值8賦給COUNT偽指令其它偽指令 例: PORT1 EQU 3 PORT2 EQU PORT1+2 PORT3 EQU PORT2 CONT EQU CX 即: PORT1=3 ,PORT2=5 PORT3=5 ,CX與CONT意義相同 PURGE PORT1 ;解除PORT1的賦值 PORT1 EQU 10 即: PORT1 = 10例:有如下定義TABLE DW 30H,31H,32H,33HPORT EQU 03F8H比較:1. MOV AX,TABLE 2. MOV DX,PORT2)定義類(lèi)型偽指令LABEL其作

15、用與PTR類(lèi)似,格式為:名字 LABEL 類(lèi)型 它將LABEL左邊的名字定義為右邊的類(lèi)型。例4.13 LABEL偽指令舉例。BARRY LABELBYTE ;將BARRY定義為字節(jié)變量TOP LABELWORD;將TOP定義為字變量SUBRT LABELFAR;將SUBRT定義為FAR標(biāo)號(hào)偽指令其它偽指令例: LABEL 與變量連用DATBLABELBYTEDATWDW3031H,3233HMOVAL,DATB0MOVAX,DATW1例: LABEL 與標(biāo)號(hào)連用DISFLABELFARDISN:MOVAX,SI例: LABEL 在堆棧段中的應(yīng)用STACKSEGMENTSTACKSTACKDW1

16、00 DUP(?)TOPLABELWORDSTACKENDS3)對(duì)準(zhǔn)偽指令EVEN將下一語(yǔ)句指向的地址調(diào)整為偶地址,確保存取一個(gè)字?jǐn)?shù)據(jù)只要進(jìn)行一次操作。例4.14 對(duì)準(zhǔn)偽指令舉例。DATA SEGMENTX DBM;X變量的偏移地址為0 EVEN;將下一語(yǔ)句指向地址調(diào)整為偶數(shù)Y DW 100 DUP(?);Y變量從地址為02H處開(kāi)始存放DATA ENDS偽指令其它偽指令4)ORG偽指令為下面一條偽指令或指令性語(yǔ)句指定起始的偏移地址,可放在程序的任何位置上。例4.15 ORG偽指令舉例。DATA SEGMENT ORG 1200H;A1變量偏移地址為1200H A1 DB 12H,34H ORG

17、 2000H ;A2變量偏移地址為2000HA2 DW 3040H,2830H DATA ENDS偽指令其它偽指令CODE SEGMENT ORG 400H;此段代碼段起始地址偏移量為400H ASSUME CS:CODE,DS:DATA CODE ENDS偽指令其它偽指令5)地址計(jì)數(shù)器 $功能:$ 表示當(dāng)前正在匯編的指令性指令或偽指令的偏移地址。例: $ 在代碼段中的應(yīng)用JMP$等價(jià)于:LP:JMPLP$ 在指令性語(yǔ)句中代表這條指令的第一個(gè)字節(jié)的地址例: $ 在數(shù)據(jù)段中的應(yīng)用ABCDW1,2,$+4,0AH,0DH,$+3假設(shè) ABC 對(duì)應(yīng)的偏移地址為1000H,則:$+4中的$=1004H

18、, $+3中的$=100AH, ABC 在內(nèi)存中的存放結(jié)果為:0100020008100A000D000D.101000H1004H100AH$ 在偽指令中表示地址計(jì)數(shù)器當(dāng)前值6)模塊連接偽指令PUBLIC和EXTRNPUBLIC和EXTRN偽指令用于解決模塊連接問(wèn)題。PUBLIC將標(biāo)號(hào)、變量或數(shù)據(jù)定義為公共的,可供其它模塊使用;EXTRN引用其它模塊中已用PUBLIC偽指令定義過(guò)的標(biāo)號(hào)和變量。偽指令其它偽指令DATA SEGMENTA1DB30H,31H;定義變量 A2DW 1234HA3DB 100 DUP (?)DATAENDS;CODE SEGMENT ASSUME CS:CODE,D

19、S:DATASTART: MOV AX,DATA SUBRT: SUBRT LABEL FAR;SUBRT為遠(yuǎn)標(biāo)號(hào)PUBLIC A1,A2,SUBRT;聲明A1,A2,SUBRT為公用 CODE ENDS偽指令其它偽指令例4.16 PUBLIC和EXTRN偽指令應(yīng)用舉例PDATA SEGMENTP1 DB 20HP2 DW 3580HPDATA ENDSPCODE SEGMENTEXTRA A1:BYTE,A2:WORD,SUBRT:FAR ;其它模塊中用PUBLIC定義過(guò)的A1、A2、SUBRT可供本模塊引用MAIN:MOV AX,PDATAMOV BX,OFFSET A1 ;引用變量A1M

20、OV DI,OFFSET A2 ;引用變量A2JMP SUBRT ;引用其它模塊的SUBRTPCODE ENDS END MAIN;程序結(jié)束,從MAIN語(yǔ)句開(kāi)始偽指令其它偽指令4.1.1 匯編語(yǔ)言程序格式4.1.2 偽指令語(yǔ)句4.1.3 完整的匯編語(yǔ)言程序框架4.1.3 完整的匯編語(yǔ)言程序框架完整的匯編語(yǔ)言程序包含數(shù)據(jù)段、代碼段、堆棧段和附加數(shù)據(jù)段。其中代碼段是必須要有的;堆棧段根據(jù)情況設(shè)置;代碼段中要用到變量或數(shù)據(jù)時(shí),應(yīng)該設(shè)置數(shù)據(jù)段。當(dāng)代碼段中有字符串操作指令時(shí),不僅要設(shè)置數(shù)據(jù),還必需設(shè)置附加段,而且必須將源串存放在數(shù)據(jù)段中,而把目的串放在附加段中。下面先給出程序框架,再介紹如何設(shè)置堆棧段,

21、以及程序結(jié)束后怎樣返回DOS操作系統(tǒng)。1. 程序框架例4.17 匯編語(yǔ)言程序框架。DATASEGMENT;數(shù)據(jù)段 XDB ? YDW ?DATAENDS;EXTRASEGMENT;附加段ALPHADB ?BETADW ?EXTRAENDS;STACKSEGMENT PART STACK STACK ;堆棧段STAPNDB 100 DUP(?);定義100字節(jié)空間TOPEQU LENGTH STAPNSTACKENDSCODESEGMENT;代碼段MAINPROC FAR;過(guò)程定義語(yǔ)句;說(shuō)明4個(gè)段寄存器分別與哪些段有關(guān)ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STAC

22、KSTART:MOV AX,STACK;設(shè)堆棧段寄存器SS: SPMOV SS,AXMOV SP,TOPPUSH DS;DS入棧保護(hù),返回DOS用SUB AX,AX;AX=0PUSHAX;段內(nèi)偏移量“0”入棧MOV AX,DATA;AX 數(shù)據(jù)段基址DATAMOV DS,AX;DS 數(shù)據(jù)段基址DATAMOV AX,EXTRAMOV ES,AX;ES 附加段基址EXTRA ;用戶(hù)要編寫(xiě)的程序內(nèi)容RET ;返回DOSMAINENDP;MAIN過(guò)程結(jié)束CODE ENDS ;代碼段結(jié)束END MAIN;整個(gè)源代碼結(jié)束1. 程序框架代碼段、數(shù)據(jù)段、附加段和堆棧段,都用段定義偽指令SEGMENT和ENDS定

23、義。數(shù)據(jù)段或附加段,用DB、DW等偽指令設(shè)置實(shí)際數(shù)值。堆棧段定義了100字節(jié)空間,其數(shù)值也可修改。代碼段用來(lái)存放可執(zhí)行的指令序列。這里用PROC FAR和ENDP偽指令將整個(gè)程序編寫(xiě)成一個(gè)遠(yuǎn)過(guò)程的形式,過(guò)程名為MAIN。最后一條指令語(yǔ)句為過(guò)程返回指令RET,使程序執(zhí)行完后返回到調(diào)用它的地方。MAIN過(guò)程中,首先用段分配偽指令A(yù)SSUME告訴匯編程序,4個(gè)段寄存器分別與哪些段相對(duì)應(yīng),但不能將段基地址裝入相應(yīng)的段寄存器中,還要給DS、ES和SS寄存器賦初值,CS則由操作系統(tǒng)賦初值。對(duì)于堆棧段,要給SS和SP賦初值,以設(shè)定堆棧。1. 程序框架除了程序框架中給出的設(shè)置堆棧的方法外,還可用以下語(yǔ)句來(lái)設(shè)置堆棧:STACK SEGMENT STA

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論