微機(jī)原理-(第四章)-13.11.24_第1頁(yè)
微機(jī)原理-(第四章)-13.11.24_第2頁(yè)
微機(jī)原理-(第四章)-13.11.24_第3頁(yè)
微機(jī)原理-(第四章)-13.11.24_第4頁(yè)
微機(jī)原理-(第四章)-13.11.24_第5頁(yè)
已閱讀5頁(yè),還剩52頁(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、第四章 匯編語(yǔ)言程序設(shè)計(jì)v1.匯編語(yǔ)言程序格式v2.偽指令(指示性語(yǔ)句)v3.匯編語(yǔ)言上機(jī)程序v4.程序設(shè)計(jì)基本方法4.1 匯編語(yǔ)言的程序格式v4.1.1 匯編語(yǔ)言程序的結(jié)構(gòu)v4.1.2 匯編語(yǔ)言語(yǔ)句類型及格式v4.1.3 匯編語(yǔ)言的數(shù)據(jù)與表達(dá)式1源程序的一般格式vSTACK SEGMENT vSTACK ENDS vDATA SEGMENT vDATA ENDSvCODE SEGMENTv ASSUME CS:CODE, DS: DATA, SS:STACKvSTART: vCODE ENDSv END STARTv例4-1 編寫一個(gè)兩字相加的程序。DSEG SEGMENT ;定義數(shù)據(jù)段DA

2、TA1 DW 1234H ;定義被加數(shù)DATA2 DW 5678H ;定義加數(shù)DSEG ENDS ;數(shù)據(jù)段結(jié)束ESEG SEGMENT ;定義附加段SUM DW 2 DUP(?) ;定義存放結(jié)果區(qū)ESEG ENDS ;附加段結(jié)束CSEG SEGMENT ;定義代碼段;下面的語(yǔ)句說(shuō)明程序中定義的各段分別用哪個(gè)段寄存器尋址 ASSUME CS:CSEG,DS:DSEG,ES:ESEGSTART: MOV AX,DSEG ;START為程序開始執(zhí)行的啟動(dòng)標(biāo)號(hào) MOV DS,AX ;初始化DS MOV AX,ESEG MOV ES,AX ;初始化ES LEA SI,SUM ;存放結(jié)果的偏移地址送SI

3、MOV AX,DATA1 ;取被加數(shù) ADD AX,DATA2 ;兩數(shù)相加 MOV ES:SI,AX ;和送附加段的SUM單元中 HLTCSEG ENDS ;代碼段結(jié)束 END START ;源程序結(jié)束2源程序的結(jié)構(gòu)特點(diǎn)v(1)匯編語(yǔ)言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。v(2)段由若干語(yǔ)句組成,語(yǔ)句以指令為主體而構(gòu)成。一條語(yǔ)句寫在一行上,書寫時(shí)語(yǔ)句的各部分應(yīng)盡量對(duì)齊v(3)匯編語(yǔ)言程序中至少要有一個(gè)啟動(dòng)標(biāo)號(hào),作為程序開始執(zhí)行時(shí)目標(biāo)代碼的入口地址。啟動(dòng)標(biāo)號(hào)常用START、BEGIN、MAIN等命名。v(4)為增加程序的

4、可讀性,可在匯編語(yǔ)言語(yǔ)句“;”后加上注釋。4.1.2匯編語(yǔ)言語(yǔ)句類型及格式1匯編語(yǔ)言語(yǔ)句的類型(1)指令語(yǔ)句是可執(zhí)行語(yǔ)句,在匯編中要產(chǎn)生對(duì)應(yīng)的目標(biāo)代碼,CPU根據(jù)這些代碼才能執(zhí)行相應(yīng)的操作。(2)偽指令語(yǔ)句是不可執(zhí)行語(yǔ)句,在匯編中不產(chǎn)生目標(biāo)代碼,用于指示匯編程序如何匯編源程序,利用它定義和說(shuō)明常量和變量的屬性及存儲(chǔ)器單元的分配等。(3)宏指令語(yǔ)句是以一個(gè)宏名定義的一段指令序列,在匯編中凡是出現(xiàn)宏指令語(yǔ)句的地方,都會(huì)有相應(yīng)的指令語(yǔ)句序列的目標(biāo)代碼插入。2語(yǔ)句的格式 v匯編語(yǔ)言的格式 由匯編語(yǔ)言編寫的源程序是由許多語(yǔ)句(也可稱為匯編指令)組成的。每個(gè)語(yǔ)句由14個(gè)部分組成,其格式是: 標(biāo)號(hào) 指令助記

5、符 操作數(shù) ;注解 1.標(biāo)識(shí)符:給指令或某一存儲(chǔ)單元地址所起的名字??捎上铝凶址M成: 字母:A z ; 數(shù)字:0 9 ; 特殊字符:?、 、一、$ 。數(shù)字不能作標(biāo)識(shí)符的第一個(gè)字符,而圓點(diǎn)僅能用作第一個(gè)字符。標(biāo)識(shí)符最長(zhǎng)為31個(gè)字符。當(dāng)標(biāo)識(shí)符后跟冒號(hào)時(shí),表示是標(biāo)號(hào)。它代表該行指令的起始地址;當(dāng)標(biāo)識(shí)符后不帶冒號(hào)時(shí),表示變量;偽指令前的標(biāo)識(shí)符不加冒號(hào)。2.指令助記符:表示不同操作的指令,可以是8086的指令助記符,也可以是偽指令。3.操作數(shù): 指令執(zhí)行的對(duì)象。依指令的要求,可能有一個(gè)、兩個(gè)或者沒有。4.注解:該項(xiàng)可有可無(wú),是為源程序所加的注解,用于提高程序的可讀性。 4.1.3 匯編語(yǔ)言的數(shù)據(jù)與表達(dá)

6、式1常量數(shù)值常量、字符串常量、符號(hào)常量2變量例4-2用數(shù)據(jù)定義偽指令DB、DW、DD定義變量DATA SEGMENTDA1 DB 12H ;定義一個(gè)字節(jié)數(shù)據(jù)DA2 DD 0FEDCBA90H ;定義一個(gè)雙字?jǐn)?shù)據(jù)DA3 DW 5678H ;定義一個(gè)字?jǐn)?shù)據(jù)DATA ENDS3標(biāo)號(hào)4表達(dá)式和運(yùn)算符算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、 數(shù)值返回運(yùn)算符、修改屬性運(yùn)算符v匯編語(yǔ)言中的常數(shù) 匯編語(yǔ)言中的常數(shù)可以分?jǐn)?shù)值常數(shù)和字符串常數(shù)兩類。數(shù)值常數(shù)按其基數(shù)的不同,可有二進(jìn)制數(shù)、八進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)等幾種不同的表示形式,匯編語(yǔ)言中采用不同的后綴加以區(qū)分。vB:表示二進(jìn)制數(shù)。例如,10100101B。v

7、D:表示十進(jìn)制數(shù)。例如,278D或278。vQ:表示八進(jìn)制數(shù)。例如,567Q,263Q。vH:表示十六進(jìn)制數(shù)。例如,9AH,5678H。v字符串常數(shù)是由單引號(hào)括起來(lái)的一串字符。例如:THIS IS A STUDENT!12345v要指出的是,此處的12345其值并非是十進(jìn)制數(shù)12345,而是代表它們所對(duì)應(yīng)的ASCII碼,即31H,32H,33H,34H,35H。v匯編語(yǔ)言中的運(yùn)算符和表達(dá)式 在表達(dá)式中,運(yùn)算符充當(dāng)著重要的角色。8086宏匯編有算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、數(shù)值回送操作符和屬性操作符共5種。 數(shù)值回送(Value_returning)操作符可以把一些特征或存儲(chǔ)器地址的一部分

8、作為數(shù)值回送。共有5個(gè):SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求字節(jié)數(shù))和SIZE(求字節(jié)數(shù))。其中LENGTH和SIZE只對(duì)數(shù)據(jù)存儲(chǔ)器地址操作數(shù)有效。 屬性操作符可以用來(lái)建立和臨時(shí)改變變量或標(biāo)號(hào)的類型以及存儲(chǔ)器操作數(shù)的存儲(chǔ)單元類型,而忽略當(dāng)前的屬性。共有6個(gè):PTR、段屬性前綴、SHORT、THIS、HIGH和LOW。v匯編語(yǔ)言中的運(yùn)算符和表達(dá)式 算術(shù)運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符 數(shù)值回送運(yùn)算符屬性運(yùn)算符+(加法)AND(與)EQ(相等)TYPEPTR-(減法)OR(或)NE(不等)LENGTHTHIS*(乘法)XOR(異或) LT(小于)SIZE

9、SHORT/(除法)NOT(非)GT(大于)OFFSETHIGHMOD(求余)LE(小于等于)SEGLOWGE(大于等于)v匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符vSEG運(yùn)算符:利用運(yùn)算符SEG可以得到一個(gè)標(biāo)號(hào)或變量的段基址v格式:SEG變量名或標(biāo)號(hào)名 v例如:已知數(shù)據(jù)段DATA從存儲(chǔ)器實(shí)際地址03000H開始,作如下定義后,用SEG運(yùn)算符求變量所在的段基址。vDATASEGMENT;定義數(shù)據(jù)段VAR1DB10H,18H,25H,34H;定義字節(jié)數(shù)據(jù)VAR2DW2300H,1200H;定義字?jǐn)?shù)據(jù)VAR3DD11002200H,33004400H;定義雙字?jǐn)?shù)據(jù)DATAENDS;數(shù)據(jù)段結(jié)束vMO

10、V BX,SEG VAR1匯編成: MOV BX,0300HvMOV CX,SEG VAR2匯編成: MOV CX,0300HvMOV DX,SEG VAR3匯編成; MOV DX,0300Hv匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符vOFFSET運(yùn)算符:利用運(yùn)算符OFFSET可以得到一個(gè)標(biāo)號(hào)或變量的偏移量。v使用格式:OFFSET 變量名或標(biāo)號(hào)名DATASEGMENT;定義數(shù)據(jù)段VAR1DB10H,18H,25H,34H;定義字節(jié)數(shù)據(jù)VAR2DW2300H,1200H;定義字?jǐn)?shù)據(jù)VAR3DD11002200H,33004400H;定義雙字?jǐn)?shù)據(jù)DATAENDS;數(shù)據(jù)段結(jié)束vMOV BX,OFF

11、SET VAR1匯編成: MOV BX,0000HvMOV CX,OFFSET VAR2匯編成: MOV CX,0004HvMOV DX,OFFSET VAR3匯編成: MOV DX,0008Hv匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符vTYPE運(yùn)算符:TYPE運(yùn)算符可加在變量、結(jié)構(gòu)或標(biāo)號(hào)的前面,所求出的是這些存儲(chǔ)器操作數(shù)的類型部分。運(yùn)算符TYPE的運(yùn)算結(jié)果是一個(gè)數(shù)值,這個(gè)數(shù)值與存儲(chǔ)器操作數(shù)類型屬性的對(duì)應(yīng)關(guān)系。MOV BX,TYPE VAR1 匯編成: MOV BX,1MOV CX,TYPE VAR2 匯編成: MOV CX,2MOV DX,TYPE VAR3 匯編成: MOV DX,4存儲(chǔ)操

12、作數(shù)類型 TYPE返回值字節(jié)數(shù)據(jù)BYTE(DB定義)1字?jǐn)?shù)據(jù)WORD(DW定義)2雙字?jǐn)?shù)據(jù)DWORD(DD定義)4v匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符vLENGTH運(yùn)算符:LENGTH運(yùn)算符放在數(shù)組變量的前面,可以求出該數(shù)組中所包含的變量的個(gè)數(shù)。 ARRAY1 DB 100DUP(?)ARRAY2 DW 10DUP(?) ARRAY3 DD 10DUP(?)下列指令:MOV BX,LENGTH ARRAY1匯編后:MOV BX,100MOV CX,LENGTH ARRAY2匯編后:MOV CX,10MOV DX,LENGTH ARRAY3匯編后:MOV DX,10v匯編語(yǔ)言中的運(yùn)算符和表

13、達(dá)式數(shù)值回送操作符vSIZE運(yùn)算符:如果一個(gè)變量已經(jīng)用重復(fù)操作符DUP加以說(shuō)明,則利用SIZE運(yùn)算符可以得到分配給該變量的字節(jié)總數(shù)。 ARRAY1 DB 100DUP(?)ARRAY2 DW 10DUP(?) ARRAY3 DD 10DUP(?)下列指令:MOV BX,SIZE ARRAY1匯編后:MOV BX,100MOV CX,SIZE ARRAY2匯編后:MOV CX,20MOV DX,SIZE ARRAY3匯編后:MOV DX,40v匯編語(yǔ)言中的運(yùn)算符和表達(dá)式屬性操作符vPTR運(yùn)算符:用來(lái)建立一個(gè)符號(hào)地址。其本身并不分配存儲(chǔ)器,只是用來(lái)給已分配的存儲(chǔ)器地址賦予另一種屬性,使該地址具有另

14、一種類型。 VAR1DB 10H,18H,25H,34HVAR2DW 1223H,1200HMOV AX, WORD PTR VAR1 執(zhí)行后:AX=1810HMOV BL, BYTE PTR VAR2 執(zhí)行后:BL=23H v例4-3 邏輯運(yùn)算符的應(yīng)用MOV AL,NOT 10101010B ;(AL)01010101BMOV AL,11110000B AND 10111101B ;(AL)10110000BMOV AL,10100000B OR 00000101B ;(AL)10100101Bv例4-4 關(guān)系運(yùn)算符的應(yīng)用MOV AX,5 EQ 101B ;(AX)0FFFFHMOV BH,

15、10H GT 16 ;(BH)0v例4-5 數(shù)值返回運(yùn)算符的應(yīng)用K1 DB 30H,31H,32HK2 DW 4041H,4043HK3 DW 20H DUP(0)K4 DD 50515253HMOV AL,TYPE K1 ;等效于MOV AL,1MOV AH,TYPE K2 ;等效于MOV AH,2MOV AL, LENGTH K3 ;(AL)20H,返回DUP前面的數(shù)值MOV CL, LENGTH K4 ;(CL)01HMOV BL, SIZE K3 ;(BL)40HMOV DL, SIZE K4 ;(DL)04Hv例4-6 段屬性運(yùn)算符的應(yīng)用MOV AX,ES:BX ;用附加段ES取代默

16、認(rèn)的數(shù)據(jù)段DSMOV BL,DS:BP ;用數(shù)據(jù)段DS取代默認(rèn)的堆棧段SSv例4-7 PTR運(yùn)算符的應(yīng)用N1 DB 3,6,9MOV AX,WORD PTR N1 ;臨時(shí)指定N1為字類型,(AX)0603Hv例4-8 THIS運(yùn)算符的應(yīng)用ABC EQU THIS BYTE ;從本語(yǔ)句開始變量ABC的類型屬性指定為字節(jié), 不管它原來(lái)的類型是什么v例4-9 HIGH和LOW運(yùn)算符的應(yīng)用NUM EQU 2456HMOV AL,HIGH NUM ;等效于 MOV AL,24HMOV BL,LOW NUM ;等效于 MOV BL,56H4.2偽指令v4.2.1 符號(hào)定義偽指令v4.2.2 數(shù)據(jù)定義偽指令

17、v4.2.3 段定義偽指令v4.2.4 段尋址偽指令v4.2.5 過(guò)程定義偽指令v4.2.6 模塊定義與連接偽指令v4.2.7 宏命令偽指令v4.2.8 其它偽指令4.2 偽指令偽指令用來(lái)對(duì)匯編程序進(jìn)行控制,對(duì)程序中的數(shù)據(jù)實(shí)現(xiàn)條件轉(zhuǎn)移、列表、存儲(chǔ)空間分配等處理,其格式和匯編指令一樣,但一般不產(chǎn)生目的代碼,即不直接命令CPU去執(zhí)行什么操作。 亦即它不像機(jī)器指令那樣是在程序運(yùn)行期間由計(jì)算機(jī)來(lái)執(zhí)行的,而是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作。4.2.1 符號(hào)定義偽指令1等值語(yǔ)句v例4-10 等值語(yǔ)句vCR EQU 0DH ;常量vTEN EQU 0AH ;常量vAA EQU ASCII_T

18、ABLE ;變量vVAR EQU TEN*2+1024 ;數(shù)值表達(dá)式vADR EQU ES:BP+DI+5 ;地址表達(dá)式vGOTO EQU JMP ;指令助記符2等號(hào)語(yǔ)句v例4-11 等號(hào)語(yǔ)句vNUM=488 ;定義NUM等于488vNUM=NUM+1 ;定義NUM等于4894.2.2 數(shù)據(jù)定義偽指令v例4-12DATA DB 11H,33H ;定義包含兩個(gè)元素的字節(jié)變量DATANUM DW 100*5+88;定義一個(gè)字類型變量NUM,其初值為表達(dá)式的值SUM DQ 0011223344556677 ;將4個(gè)字存入變量SUM。v例4-13STR1 DB COMPUTER ;定義一個(gè)字符串,字符

19、串的首地址為STR1STR2 DW AA,BC,DE ;給兩個(gè)字符組成的字符串分配兩個(gè)字節(jié)存儲(chǔ)單元DATA DW ?,?,? ;為DATA預(yù)留6個(gè)存儲(chǔ)單元v例4-14 DATA1 DB 20 DUP(?) ;為變量DATA1分配20個(gè)字節(jié)的空間,初值為任意值 DATA2 DW ? ;為變量DATA2分配2個(gè)字節(jié)的空間,初值為任意值 DATA3 DB 20 DUP(30H) ;為變量DATA3分配20個(gè)字節(jié)的空間,初值均為30H4.2.3 段定義偽指令v格式:段名 SEGMENT 定位類型 組合類型 類別名 段名 ENDSv1段名一個(gè)段開始和結(jié)尾的段名必須一致,否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤v2定位類型(1

20、)BYTE(2)WORD(3)PARA(4)PAGEv3組合類型(1)NONE(2)PUBLIC(3)COMMON(4)STACK(5)MEMORY(6)AT表達(dá)式v4. 類別名4.2.4 段尋址偽指令v格式:ASSUME 段寄存器名:段名,段寄存器名:段名,v例4-15 求從NUM開始的12個(gè)無(wú)符號(hào)字節(jié)數(shù)的和,結(jié)果放在SUM字單元中。DATA SEGMENT NUM DB 95H,83H,36H,2DH DB 33H,22H,1AH,34HDB 62H,45H,75H,49HSUM DW ?DATA ENDSSTACK SEGMENT DB 100 DUP(?)STACK ENDSCODE

21、SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK lBEGIN:MOV AX,DATAl MOV DS,AXl MOV ES,AXl MOV AX,STACKl MOV SS,AXl LEA SI,NUM lMOV CX,12 lXOR AX,AXlNEXT: ADD AL, SI lADC AH,0 lINC SIl LOOP NEXT l MOV SUM,AX l HLT lCODE ENDS END BEGIN 4.2.5 過(guò)程定義偽指令v格式:v過(guò)程名 PROC NEAR/FARv v RETv v RETv 過(guò)程名 ENDPl例4-16

22、編寫一個(gè)延時(shí)50ms的子程序lDELAY PROC ; 定義一個(gè)近過(guò)程l PUSH BX ;保護(hù)BX原來(lái)的內(nèi)容l PUSH CX ;保護(hù)CX原來(lái)的內(nèi)容l MOV BL,5 ;外循環(huán)次數(shù)lNEXT: MOV CX,2801 l ;內(nèi)循環(huán)次數(shù)(實(shí)現(xiàn)延時(shí)10ms)lW10MS:LOOP W10MS ;(CX)0則循環(huán)l DEC BL ;修改外循環(huán)計(jì)數(shù)值l JNZ NEXT ;(BX)0則進(jìn)行外循環(huán)lPOP CX ;恢復(fù)CX原來(lái)的內(nèi)容lPOP BX ;恢復(fù)BX原來(lái)的內(nèi)容l RET ;過(guò)程返回lDELAY ENDP ;過(guò)程結(jié)束4.2.6 模塊定義與連接偽指令1模塊定義偽指令格式:NAME 標(biāo)識(shí)符 END

23、 啟動(dòng)標(biāo)號(hào)2模塊連接偽指令(1)全局符號(hào)偽指令(2)引用偽指令v例4-17 編程利用乘法模塊計(jì)算X*Y。NAME MAINCALL ;主模塊 EXTRN WMUL:FARSTACK SEGMENT PARA STACK STACK DB 100 DUP(?)STACK ENDSDATA SEGMENT PARA DATAX DW 3355HY DW 8866HDATA ENDSCODE SEGMENT PARA CODEMAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK PUSH DS MOV AX,0 PUSH AX MOV AX,DATAl MOV

24、DS,AXl MOV AX,Xl MOV BX,Yl CALL WMUL ;調(diào)用外部過(guò)程WMULl RETlMAIN ENDPlCODE ENDSl END MAIN ;主模塊結(jié)束lNAME SUBMUL ;子模塊lCDESG SEGMENT PARA CODElWMUL PROC FAR ;定義遠(yuǎn)過(guò)程WMULl ASSUME CS:CDESGl PUBLIC WMUL ;定義WMUL為全局過(guò)程名l CALL MULAB ;嵌套調(diào)用l RET ;過(guò)程返回lWMUL ENDP ;過(guò)程結(jié)束lMULAB PROC ;定義一個(gè)近過(guò)程MULABl MUL BXl RETlMULAB ENDP ;過(guò)程結(jié)束

25、lCDESG ENDS ;代碼段結(jié)束l END ;子模塊結(jié)束4.2.7 宏命令偽指令v1宏定義例4-18 用宏指令定義兩個(gè)字節(jié)數(shù)相加,結(jié)果存入RESULT單元的操作。ADDM MACRO OPR1,OPR2,RESULT MOV AL,OPR1 ADD AL,OPR2 MOV RESULT,AL ENDMv2宏調(diào)用例4-19 將例4-18中的宏定義進(jìn)行宏調(diào)用、宏展開操作如下:ADDM 88,36,SUM ADDM BR,TAB,SUMl宏展開: l l+ MOV AL,88l+ ADD AL,36l+ MOV SUM,ALl l+ MOV AL,BRl+ ADD AL,TABl+ MOV SU

26、M,ALl l4宏的取消4.2.8 其它偽指令1定位偽指令例4-20 偽指令ORG和當(dāng)前位置計(jì)數(shù)器值符號(hào)$的應(yīng)用DATA SEGMENT ORG 30HDB1 DB 12H,34H ORG $ +20H STRING DB STRING DATA ENDS2方式選擇偽指令3簡(jiǎn)化的段定義偽指令 ;標(biāo)記簡(jiǎn)化段,各段順序由系統(tǒng)安排,用于主模塊前面;指明內(nèi)存使用模式,指示數(shù)據(jù)與代碼允許使用的長(zhǎng)度 ;定義數(shù)據(jù)段,隱含段名為DATA ;定義堆棧段,隱含段名為STACK,并形成SS及SP初值 ;定義代碼段,隱含段名為CODE ;匯編結(jié)束4.3 匯編語(yǔ)言程序上機(jī)過(guò)程v4.3.1 建立匯編語(yǔ)言的工作環(huán)境v4.3

27、.2 上機(jī)操作過(guò)程v4.3.3 DEBUG的使用方法4.3.1 建立匯編語(yǔ)言的工作環(huán)境v編輯程序,文件名 EDIT.COMv匯編程序,文件名 MASM.EXE v連接程序,文件名 LINK.EXE v調(diào)試程序,文件名 DEBUG.EXE vLIB.EXE,庫(kù)管理程序 vCREF.EXE,符號(hào)索引文件處理程序 vEXE2BIN.EXE,將EXE轉(zhuǎn)換為COM的文件格式轉(zhuǎn)換程序v匯編語(yǔ)言程序設(shè)計(jì)概述匯編語(yǔ)言源程序編輯程序匯編程序ASM或MASM連接程序LINK調(diào)試程序DEBUG修 改出錯(cuò)出錯(cuò).ASM.OBJ.EXEEDIT.EXE4.3.2 上機(jī)操作過(guò)程v1編輯1.對(duì)編輯完成的源程序在存盤時(shí)擴(kuò)展名必

28、須加寫.ASM2.一定要嚴(yán)格遵守匯編語(yǔ)言書寫格式及段結(jié)構(gòu)的格式來(lái)編寫程序v2匯編匯編過(guò)程就是將匯編語(yǔ)言源程序轉(zhuǎn)換成機(jī)器能夠識(shí)別的目標(biāo)代碼程序,即OBJ的二進(jìn)制文件。還可生成擴(kuò)展名為.LST的列表文件,擴(kuò)展名為.CRF的符號(hào)索引文件。v3連接v所謂連接是用連接程序LINK.EXE把若干個(gè)經(jīng)匯編后產(chǎn)生的.OBJ文件及指定的庫(kù)文件連接起來(lái),產(chǎn)生可執(zhí)行的.EXE文件。v4調(diào)試4.3.3 DEBUG的使用方法v1DEBUG的運(yùn)行v2DEBUG的主要命令D,顯示內(nèi)存單元內(nèi)容;U,反匯編命令;R,顯示與修改寄存器內(nèi)容;E,修改內(nèi)存單元內(nèi)容;A,匯編命令;T、P,單步執(zhí)行指令;G,連續(xù)執(zhí)行指令;N,指定裝入文

29、件名或?qū)懭胛募?;L,裝入N指定的文件;W,將指定內(nèi)容寫入N指定的文件;Q,退出DEBUG程序,返回操作系統(tǒng)狀態(tài)。4.4程序設(shè)計(jì)基本方法v4.4.1 程序設(shè)計(jì)概述v4.4.2 順序結(jié)構(gòu)程序設(shè)計(jì)v4.4.3 分支結(jié)構(gòu)程序設(shè)計(jì)v4.4.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)v4.4.5 子程序設(shè)計(jì)v4.4.6 程序設(shè)計(jì)舉例 4.4.1 程序設(shè)計(jì)概述v1程序設(shè)計(jì)的步驟(1)分析問(wèn)題 (2)建立數(shù)學(xué)模型 (3)確定算法。 (4)繪制流程圖 (5)分配內(nèi)存空間 (6)編制程序與靜態(tài)檢查。 (7)上機(jī)調(diào)試 (8)試運(yùn)行和分析結(jié)果 (9)整理資料投入運(yùn)行v2返回DOS的方法MOV AH,4C00H ;功能號(hào)送AHINT 21

30、H ;返回DOSv3程序的基本結(jié)構(gòu)順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu) 順序結(jié)構(gòu)順序結(jié)構(gòu)對(duì)應(yīng)簡(jiǎn)單程序,順序執(zhí)行,無(wú)轉(zhuǎn)移、無(wú)循環(huán)。指令指針指令指針I(yè)P值線性增加。值線性增加。4.4.2 順序結(jié)構(gòu)程序設(shè)計(jì)v順序程序設(shè)計(jì) 對(duì)于一些簡(jiǎn)單的數(shù)據(jù)處理,只要把完成處理的各個(gè)步驟用匯編語(yǔ)言描述清楚,讓計(jì)算機(jī)按指令編寫的次序從頭到尾一條條執(zhí)行即可,這樣的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。 Eg1.已知X和Y是數(shù)據(jù)段中的兩個(gè)無(wú)符號(hào)字節(jié)單元,用程序完成表達(dá)式Z=(X2Y2)/2的計(jì)算。分析:分析: DATA SEGMENTXDB 15YDB 34ZDW ?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DAT

31、ASTART:MOV AX,DATAMOV DS,AX;初始化數(shù)據(jù)段MOVAL,X;X中的內(nèi)容送ALMULAL;計(jì)算XXMOVBX,AX;XX乘積送BXMOV AL,Y;Y中的內(nèi)容送ALMULAL;計(jì)算YYADDAX,BX;計(jì)算X2Y2SHRAX,1;計(jì)算(X2Y2)/2MOV Z,AX;結(jié)果送Z單元MOV AH,4CHINT21H;返回DOSCODEENDSENDSTART;匯編結(jié)束 eg2. 在存儲(chǔ)變量DAT1開始有兩個(gè)字節(jié)的無(wú)符號(hào)加數(shù),在存儲(chǔ)變量DAT2開始有兩個(gè)字節(jié)的無(wú)符號(hào)被加數(shù),求兩個(gè)數(shù)和放入DAT3單元中,設(shè)二進(jìn)制數(shù)在存儲(chǔ)單元存放的順序,低字節(jié)數(shù)放在低地址上,高字節(jié)數(shù)放在高地址上。

32、 分析:多字節(jié)相加,應(yīng)先從低字節(jié)開始相加,然后高字節(jié)相加。 源程序如下: DATA SEGMENT DAT1 DB 5EH,89H DAT2 DB 40H,0ABH DAT3 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,0 ;位移量初值 MOV AL,DAT1SI ;取被加數(shù) ADD AL,DAT2SI ;二數(shù)相加 MOV DAT3SI,AL INC SI ;調(diào)整位移量 MOV AL,DAT1SI ;取被加數(shù)高位 ADC AL,DAT2SI ;帶進(jìn)位加 MOV DAT

33、3SI,AL MOV AH ,4CH ;程序結(jié)束返回DOS INT 21H CODE ENDS END START4.4.3 分支結(jié)構(gòu)程序設(shè)計(jì)圖圖4-2 兩路分支結(jié)構(gòu)圖兩路分支結(jié)構(gòu)圖T程序段1條件F程序段2圖圖4-3 多路分支結(jié)構(gòu)圖多路分支結(jié)構(gòu)圖程序段1多路條件程序段2程序段n依據(jù)不同條件分支到各程序段,有雙分支和多分支兩種。IP值受標(biāo)志位的影響而跳變值受標(biāo)志位的影響而跳變分支程序是利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某分支程序是利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)條件是否滿足,來(lái)改變程序執(zhí)行一指令后,根據(jù)條件是否滿足,來(lái)改變程序執(zhí)行的次序。在程序設(shè)計(jì)中經(jīng)常會(huì)遇到各種判斷和比的次序。在程序

34、設(shè)計(jì)中經(jīng)常會(huì)遇到各種判斷和比較,較,例如例如“相等相等”和和“不相等不相等”;“正正”和和“負(fù)負(fù)”;“大于大于”和和“小于小于”;“滿足條件滿足條件”和和“不滿足條件不滿足條件”等等,這些判斷和比較在程序中等等,這些判斷和比較在程序中都可以組成各種不同的邏輯框,并產(chǎn)生相應(yīng)的分都可以組成各種不同的邏輯框,并產(chǎn)生相應(yīng)的分支程序。支程序。 Eg .編程實(shí)現(xiàn)使鍵盤上A、B、F六個(gè)字母鍵成為6個(gè)輸入命令,使之分別對(duì)應(yīng)6個(gè)具有不同算法的控制子程序: 分析:首先要從鍵盤輸入一個(gè)字符,再依次用A、B、F的ASCII碼作為測(cè)試條件,使?jié)M足條件的轉(zhuǎn)向相應(yīng)的控制子程序。設(shè)6個(gè)控制子程序的入口地址分別為PA、PB、P

35、F。流程圖如下:匯編語(yǔ)言程序如下: MOV AH,l INT 21H ;1號(hào)功能調(diào)用,鍵盤接收 CMP AL,A JE PA ;鍵值為A,轉(zhuǎn)PA子程序 CMP AL,B JE PB ;鍵值為B,轉(zhuǎn)PB子程序 CMP AL,F(xiàn) JE PF HLT ;鍵值非A、B、F,停止 PA: ;A號(hào)控制子程序入口 PB: ;B號(hào)控制子程序入口 PF: ;F號(hào)控制子程序入口 4.4.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)體先判斷后執(zhí)行循環(huán)結(jié)構(gòu)先判斷后執(zhí)行循環(huán)結(jié)構(gòu)循環(huán)初始化NY循環(huán)控制部分循環(huán)初始化循環(huán)體N循環(huán)控制部分Y先執(zhí)行后判斷循環(huán)結(jié)構(gòu)先執(zhí)行后判斷循環(huán)結(jié)構(gòu) 實(shí)現(xiàn)那些需要重復(fù)做的工作。IP值因計(jì)數(shù)器值因計(jì)數(shù)器CX中中的值不

36、為零而循環(huán)。的值不為零而循環(huán)。v循環(huán)程序是強(qiáng)制CPU重復(fù)執(zhí)行某一指令系列的一種程序結(jié)構(gòu)形式,它可以使許多重復(fù)工作的程序大為簡(jiǎn)化,而且減少內(nèi)存空間。被重復(fù)執(zhí)行的部分稱作循環(huán)體,要想把循環(huán)體多次執(zhí)行,就必須在循環(huán)體的前后有相應(yīng)的指令實(shí)現(xiàn)循環(huán)控制。 循環(huán)程序一般由4部分組成:初始化、循環(huán)體、循環(huán)控制和循環(huán)結(jié)束處理。開始初始化循環(huán)體循環(huán)控制判斷結(jié)束處理結(jié)束是否開始外循環(huán)初始化內(nèi)循環(huán)初始化內(nèi)循環(huán)體內(nèi)控制外循環(huán)體外控制結(jié)束是是否否Eg1 若有一串無(wú)符號(hào)數(shù),放在NUM開始的單元中,要求編制匯編語(yǔ)言程序,將其中的最大值找出來(lái),且放到存儲(chǔ)單元MAX中,這串?dāng)?shù)的長(zhǎng)度已存放在COUNT單元。DATASEGMENTC

37、OUNTDW20NUMDW7,9,12,14,1,3,28,55,121,44,15,45,34,67,87,90,32,43,59,60MAXDW?DATAENDSSTACK SEGMENT PARA STACK STACKDB 20 DUP (?)STACK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROC FARPUSHDSMOV AX,0PUSH AXMOVAX,DATAMOVDS,AXMOVBX,OFFSET NUMMOVCX,COUNTMOVAX,BXINCBXINCBXLOOP1:CMPAX,BXJAELOOP2(無(wú)符號(hào)

38、數(shù)高于或等于轉(zhuǎn)移)MOV AX,BXLOOP2:INCBXINCBXDEC CXJNZLOOP1(不等于零轉(zhuǎn)移)MOV MAX,AXRETMAINENDPCODE ENDSENDMAIN 4.4.5 子程序設(shè)計(jì)vEg1 通過(guò)寄存器傳遞參數(shù),將數(shù)據(jù)塊BUF1中的內(nèi)容傳遞到數(shù)據(jù)塊BUF2中DATA SEGMENT BUF1 DB 11,22,33,99 CUNT EQU $-BUF1 BUF2 DB CUNT DUP(?) DATA ENDS STACK SEGMENT TOS DW 128H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACKl MOV SS,AXl MOV SP,OFFSETl l LEA SI,BUF1l LEA DI,BUF2l MOV CX,CUNTl CALL SUB1l lSUB1 PROClDON: MOV AL,SIl MOV DI,ALl INC SIl INC DIl L

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論