版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,微型計(jì)算機(jī)原理及其應(yīng)用第四章:匯編語(yǔ)言程序設(shè)計(jì),合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,2,第四章:匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言的基本要素 偽指令 匯編語(yǔ)言程序設(shè)計(jì),3,第四章:匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言的基本要素 偽指令 匯編語(yǔ)言程序設(shè)計(jì),4,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言的格式 匯編語(yǔ)言中的常數(shù) 匯編語(yǔ)言中的運(yùn)算符和表達(dá)式,5,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言的格式 匯編語(yǔ)言中的常數(shù) 匯編語(yǔ)言中的運(yùn)算符和表達(dá)式,6,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言的格式 由匯編語(yǔ)言編寫的源程序是由許多語(yǔ)句(也可稱為匯編指令)組成的。每個(gè)語(yǔ)句由14個(gè)部分
2、組成,其格式是: 標(biāo)號(hào) 指令助記符 操作數(shù) ;注解 標(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)。 指令助記符:表示不同操作的指令,可以是8086的指令助記符,也可以是偽指令。 操作數(shù): 指令執(zhí)行的對(duì)象。依指令的要求,可能有一個(gè)、兩個(gè)或者沒(méi)有。 注解:該項(xiàng)可有可無(wú),是為源程序所加的注解,用于提高程序的可讀性。,7,第四章
3、:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言的格式 匯編語(yǔ)言中的常數(shù) 匯編語(yǔ)言中的運(yùn)算符和表達(dá)式,8,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(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ū)分。 B:表示二進(jìn)制數(shù)。例如,10100101B。 D:表示十進(jìn)制數(shù)。例如,278D或278。 Q:表示八進(jìn)制數(shù)。例如,567Q,263Q。 H:表示十六進(jìn)制數(shù)。例如,9AH,5678H。 字符串常數(shù)是由單引號(hào)括起來(lái)的一串字符。例如:THIS IS A STUDEN
4、T!12345 要指出的是,此處的12345其值并非是十進(jìn)制數(shù)12345,而是代表它們所對(duì)應(yīng)的ASCII碼,即31H,32H,33H,34H,35H。,9,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(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ǔ)器地址的一部分作為數(shù)值回送。共有5個(gè):SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求字節(jié)數(shù))和SIZE(求字節(jié)數(shù))。其中LENGTH和SIZ
5、E只對(duì)數(shù)據(jù)存儲(chǔ)器地址操作數(shù)有效。 屬性操作符可以用來(lái)建立和臨時(shí)改變變量或標(biāo)號(hào)的類型以及存儲(chǔ)器操作數(shù)的存儲(chǔ)單元類型,而忽略當(dāng)前的屬性。共有6個(gè):PTR、段屬性前綴、SHORT、THIS、HIGH和LOW。,10,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式,11,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符 SEG運(yùn)算符:利用運(yùn)算符SEG可以得到一個(gè)標(biāo)號(hào)或變量的段基址 格式:SEG變量名或標(biāo)號(hào)名 例如:已知數(shù)據(jù)段DATA從存儲(chǔ)器實(shí)際地址03000H開始,作如下定義后,用SEG運(yùn)算符求變量所在的段基址。 DATASEGMENT;定義
6、數(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é)束 MOV BX,SEG VAR1匯編成: MOV BX,0300H MOV CX,SEG VAR2匯編成: MOV CX,0300H MOV DX,SEG VAR3匯編成; MOV DX,0300H,12,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符 OFFSET運(yùn)算符:利用運(yùn)算符OFFSET可以得到一個(gè)標(biāo)號(hào)或變量的偏移量。 使用格式:OFFSET
7、變量名或標(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é)束 MOV BX,OFFSET VAR1匯編成: MOV BX,0000H MOV CX,OFFSET VAR2匯編成: MOV CX,0004H MOV DX,OFFSET VAR3匯編成: MOV DX,0008H,13,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符 TYPE運(yùn)算符:TYPE運(yùn)算符可加在變量、結(jié)構(gòu)或標(biāo)號(hào)的前面,所求出的是這些存儲(chǔ)器操
8、作數(shù)的類型部分。運(yùn)算符TYPE的運(yùn)算結(jié)果是一個(gè)數(shù)值,這個(gè)數(shù)值與存儲(chǔ)器操作數(shù)類型屬性的對(duì)應(yīng)關(guān)系。 MOV BX,TYPE VAR1 匯編成: MOV BX,1 MOV CX,TYPE VAR2 匯編成: MOV CX,2 MOV DX,TYPE VAR3 匯編成: MOV DX,4,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,14,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符 LENGTH運(yùn)算符:LENGTH運(yùn)算符放在數(shù)組變量的前面,可以求出該數(shù)組中所包含的變量的個(gè)數(shù)。 ARRAY1 DB 100DUP(?) ARRAY2 DW 10DUP(?) ARRA
9、Y3 DD 10DUP(?) 下列指令: MOV BX,LENGTH ARRAY1匯編后:MOV BX,100 MOV CX,LENGTH ARRAY2匯編后:MOV CX,10 MOV DX,LENGTH ARRAY3匯編后:MOV DX,10,15,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式數(shù)值回送操作符 SIZE運(yùn)算符:如果一個(gè)變量已經(jīng)用重復(fù)操作符DUP加以說(shuō)明,則利用SIZE運(yùn)算符可以得到分配給該變量的字節(jié)總數(shù)。 ARRAY1 DB 100DUP(?) ARRAY2 DW 10DUP(?) ARRAY3 DD 10DUP(?) 下列指令: MOV BX,SI
10、ZE ARRAY1匯編后:MOV BX,100 MOV CX,SIZE ARRAY2匯編后:MOV CX,20 MOV DX,SIZE ARRAY3匯編后:MOV DX,40,16,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言的基本要素,匯編語(yǔ)言中的運(yùn)算符和表達(dá)式屬性操作符 PTR運(yùn)算符:用來(lái)建立一個(gè)符號(hào)地址。其本身并不分配存儲(chǔ)器,只是用來(lái)給已分配的存儲(chǔ)器地址賦予另一種屬性,使該地址具有另一種類型。 VAR1DB 10H,18H,25H,34H VAR2DW 1223H,1200H MOV AX, WORD PTR VAR1 執(zhí)行后:AX=1810H MOV BL, BYTE PTR VAR2 執(zhí)行后:B
11、L=23H,17,第四章:匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言的基本要素 偽指令 匯編語(yǔ)言程序設(shè)計(jì),18,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,偽指令用來(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編期間由匯編程序處理的操作。,19,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,20,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽
12、指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,21,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 該類偽指令用來(lái)定義存貯空間及其所存數(shù)據(jù)的長(zhǎng)度。 DB:定義字節(jié),即每個(gè)數(shù)據(jù)是1個(gè)字節(jié)。 DW:定義字,即每個(gè)數(shù)據(jù)占1個(gè)字(2個(gè)字節(jié))。 DD:定義雙字,即每個(gè)數(shù)據(jù)占2個(gè)字。低字部分在低地址,高字部分在高地址。 DQ:定義4字長(zhǎng),即每個(gè)數(shù)據(jù)占4個(gè)字。 DT:定義10個(gè)字節(jié)長(zhǎng),用于壓縮式十進(jìn)制數(shù)據(jù)。 例如:DATA1 DB 10H,6,78H,100 表示從DATA1單元開始連續(xù)存放10H,6,78H,100,共
13、占4個(gè)字節(jié)地址。,22,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 DATA1DB20H DATA2DW0240H,1000H DATA3DB(-1*3),(15/5) DATA4DD12345H DATA5DB0123 DATA6DWAB,C,D DATA7DB? DATA8DD? DATA9DB5DUP(00) DATA10DW3DUP(?),23,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,24,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,符號(hào)定義偽指令 EQU偽指令給符號(hào)定義一個(gè)
14、值。在程序中,凡是出現(xiàn)該符號(hào)的地方,匯編時(shí)均用其值代替,如: COUNTEQU100;COUNT代替常數(shù)100 SUMEQU30*25;SUM代替數(shù)值表達(dá)式 CEQUCX;C代替寄存器CX MEQUMOV;M代替指令助記符MOV 需要注意的是,一個(gè)符號(hào)一經(jīng)EQU偽指令賦值后,在整個(gè)程序中,不允許再對(duì)同一符號(hào)重新賦值。,25,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,26,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,段定義偽指令 段定義偽指令的用途是在匯編語(yǔ)言程序中定義邏輯段,用它來(lái)指定段的
15、名稱和范圍,并指明段的定位類型、組合類型及類別。常用的段定義為指令有SEGMENT和ENDS。 段名 SEGMENT 定位類型 組合類型 類別 (段內(nèi)語(yǔ)句系列)段名 ENDS,27,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,段定義偽指令 DATA1 SEGMENT DATA1 ENDS STACK1 SEGMENT STACK STACK1 ENDS CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1,SS:STACK1 MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX CODE1 ENDS,28,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)
16、偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,29,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,設(shè)定段寄存器偽指令 設(shè)定段寄存器偽指令用來(lái)通知匯編程序哪一個(gè)段寄存器是該段的段寄存器,以便對(duì)使用變量或標(biāo)號(hào)的指令匯編出正確的目的代碼。常用的段定義為指令有ASSUME。 ASSUME 段寄存器:段名,段寄存器:段名, 注意:由于ASSUME偽指令只指明某一個(gè)段地址應(yīng)存于哪一個(gè)段寄存器中,并沒(méi)有包含將段地址送入該寄存器的操作。因此要將真實(shí)段地址裝入段寄存器還需用匯編指令來(lái)實(shí)現(xiàn)。這一步是不可缺少的。,30,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,設(shè)定
17、段寄存器偽指令 DATA1 SEGMENT DATA1 ENDS STACK1 SEGMENT STACK STACK1 ENDS CODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1,SS:STACK1 MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX CODE1 ENDS,31,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,32,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義過(guò)程偽指令 在程序設(shè)計(jì)中,可將具有一定功能的程序段
18、看成為一個(gè)過(guò)程(相當(dāng)于一個(gè)子程序),它可以被別的程序調(diào)用。一個(gè)過(guò)程由偽指令PROC和ENDP來(lái)定義。 過(guò)程名 PROC 類型 過(guò)程體 RET 過(guò)程名 ENDP 其中過(guò)程名是為過(guò)程所起的名稱,不能省略,過(guò)程的類型由FAR(遠(yuǎn)過(guò)程,為段間調(diào)用)和NEAR(近過(guò)程,在本段內(nèi)調(diào)用)來(lái)確定,如果缺省類型,則該過(guò)程就默認(rèn)為近過(guò)程。ENDP表示過(guò)程結(jié)束。過(guò)程體內(nèi)至少應(yīng)有一條RET指令,以便返回被調(diào)用處。過(guò)程可以嵌套,也可以遞歸使用。,33,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義過(guò)程偽指令 DELAYPROC MOVBL,10 DELY:MOVCX,2801 WAIT:LOOPWAIT DECBL JNZDEL
19、Y RET DELAYENDP,34,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,35,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,宏指令 在匯編語(yǔ)言書寫的源程序中,若有的程序段要多次使用,為了簡(jiǎn)化程序書寫,該程序段可以用一條宏指令來(lái)代替,而匯編程序匯編到該宏指令時(shí),仍會(huì)產(chǎn)生源程序所需的代碼。 宏指令的一般格式為: 宏指令名 MACRO 形式參量表 宏體 ENDM 例如:SHIFT MACRO MOV CL,4 SAL AL,Cl ENDM,36,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指
20、令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,37,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,ORG偽指令 ORG偽指令規(guī)定了在某一段內(nèi),程序或數(shù)據(jù)代碼存放的起始偏移地址。 一般格式: ORG 例如: DATASEGMENT BUFF1DB23,56H,EOF ORG2000H BUFF2DBSTRING DATAENDS,38,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,定義數(shù)據(jù)偽指令 符號(hào)定義偽指令 段定義偽指令 設(shè)定段寄存器偽指令 定義過(guò)程的偽指令 宏指令 ORG偽指令 匯編結(jié)束偽指令END,39,第四章:匯編語(yǔ)言程序設(shè)計(jì)偽指令,匯編結(jié)束偽
21、指令END 該偽指令表示源程序的結(jié)束令匯編程序停止匯編。因此,任何一個(gè)完整的源程序均應(yīng)有END指令。 一般格式: END 表達(dá)式 其中表達(dá)式表示該匯編程序的啟動(dòng)地址。例如: END START ;表明該程序的啟動(dòng)地址為START。,40,第四章:匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言的基本要素 偽指令 匯編語(yǔ)言程序設(shè)計(jì),41,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),42,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),43,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序
22、設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 1編寫源程序 在弄清問(wèn)題的要求,確定方案后,匯編語(yǔ)言程序設(shè)計(jì)者便可依據(jù)前面的指令系統(tǒng)和匯編語(yǔ)言的規(guī)定,逐個(gè)模塊地編寫匯編語(yǔ)言源程序。 2源程序輸入微型機(jī) 在編輯軟件EDIT.EXE或其他編輯軟件的支持下,將源程序輸入到計(jì)算機(jī)中。通常,匯編語(yǔ)言源程序的擴(kuò)展名為 ASM。 3匯編 利用匯編程序(或宏匯編程序)(ASM或MASM)對(duì)匯編語(yǔ)言源程序進(jìn)行匯編,產(chǎn)生擴(kuò)展名為OBJ的可重定位的目的代碼。 4連接 利用連接程序(LINK)可將一個(gè)或多個(gè)擴(kuò)展名為OBJ文件進(jìn)行連接,生成擴(kuò)展名為擴(kuò)展名為EXE的可執(zhí)行文件。 5調(diào)試 對(duì)于稍大一些的程序來(lái)說(shuō),經(jīng)過(guò)上述步驟所獲得的 EXE可
23、執(zhí)行文件,在運(yùn)行過(guò)程中難免無(wú)錯(cuò)。調(diào)試匯編程序最常用的工具是動(dòng)態(tài)調(diào)試程序DEBUG。,44,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述,45,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),46,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),順序程序設(shè)計(jì) 對(duì)于一些簡(jiǎn)單的數(shù)據(jù)處理,只要把完成處理的各個(gè)步驟用匯編語(yǔ)言描述清楚,讓計(jì)算機(jī)按指令編寫的次序從頭到尾一條條執(zhí)行即可,這樣的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。 【例4-1】已知X和Y是數(shù)據(jù)段中的兩個(gè)無(wú)符號(hào)字節(jié)單元,用程序完成表達(dá)式Z=(X2Y2)/2的計(jì)算。,47,第四章:
24、匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),順序程序設(shè)計(jì) DATASEGMENT XDB 15 YDB 34 ZDW ? DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX;初始化數(shù)據(jù)段 MOVAL,X;X中的內(nèi)容送AL MULAL;計(jì)算XX MOVBX,AX;XX乘積送BX MOV AL,Y;Y中的內(nèi)容送AL MULAL;計(jì)算YY ADDAX,BX;計(jì)算X2Y2 SHRAX,1;計(jì)算(X2Y2)/2 MOV Z,AX;結(jié)果送Z單元 MOV AH,4CH INT21H;返回DOS CODEENDS ENDSTART
25、;匯編結(jié)束,48,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),順序程序設(shè)計(jì) 【例4-2】從鍵盤讀入兩個(gè)一位數(shù)(按鍵時(shí)保證按下的是數(shù)字鍵),顯示它們的積。先后從鍵盤上讀取兩個(gè)按鍵,分別減去30H得到它們對(duì)應(yīng)的數(shù)值,然后相乘分解成十位數(shù)字與個(gè)位數(shù)字,轉(zhuǎn)換成ASC碼后依次輸出即可。為了輸入輸出效果的直觀,有必要在每次按鍵后回車換行。 CODESEGMENT ASSUMECS:CODE MAIN:MOV AH,1 INT21H;讀入第1個(gè)數(shù)字 MOVBL,AL;保存在BL中 MOVAH,2 MOVDL,13 INT21H;回車 MOVDL,10 INT 21H;換行 MOVAH,1 INT21H;讀入第
26、2個(gè)數(shù)字 SUBAL,30H;第2個(gè)數(shù)字轉(zhuǎn)換成十進(jìn)制數(shù) SUBBL,30H;第1個(gè)數(shù)字轉(zhuǎn)換成十進(jìn)制數(shù) MULBL;兩個(gè)數(shù)相乘,積在AX中,49,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),順序程序設(shè)計(jì) MOVBL,10; DIVBL;積除以10取商送AL,余數(shù)在AH中 ADDAX,3030H;轉(zhuǎn)換成相應(yīng)的ASC碼 MOVBX,AX;保存在BX中 MOVAH,2 MOVDL,13 INT21H;回車 MOVDL,10 INT21H;換行 MOV DL,BL MOVAH,2 INT21H;輸出十位數(shù) MOVDL,BH INT21H;輸出個(gè)位數(shù) MOVAH,4CH INT21H;返回DOS CODEE
27、NDS ENDMAIN;程序結(jié)束,50,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),51,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),選擇程序設(shè)計(jì) 選擇程序是利用條件轉(zhuǎn)移指令,使程序執(zhí)行到某一指令后,根據(jù)條件是否滿足,來(lái)改變程序執(zhí)行的次序。在程序設(shè)計(jì)中經(jīng)常會(huì)遇到各種判斷和比較,例如“相等”和“不相等”;“正”和“負(fù)”;“大于”和“小于”;“滿足條件”和“不滿足條件”等等,這些判斷和比較在程序中都可以組成各種不同的邏輯框,并產(chǎn)生相應(yīng)的分支程序。,52,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),選擇程序設(shè)計(jì) 1 當(dāng)X0 【例4
28、-3】符號(hào)函數(shù)Y=0當(dāng)X=0 (128X+127) 1 當(dāng)X0 設(shè)任意給定的X存放在XX單元,計(jì)算出函數(shù)Y值要求存放在YY單元。,53,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),選擇程序設(shè)計(jì),54,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),55,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),循環(huán)程序設(shè)計(jì) 循環(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)程序一
29、般由4部分組成:初始化、循環(huán)體、循環(huán)控制和循環(huán)結(jié)束處理。,56,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),循環(huán)程序設(shè)計(jì) 【例4-4】現(xiàn)將以AREA1為首地址的100個(gè)字節(jié)數(shù)據(jù)搬移到以AREA2為首地址的內(nèi)存中去。,57,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),循環(huán)程序設(shè)計(jì) 【例4-5】若有一串無(wú)符號(hào)數(shù),放在NUM開始的單元中,要求編制匯編語(yǔ)言程序,將其中的最大值找出來(lái),且放到存儲(chǔ)單元MAX中,這串?dāng)?shù)的長(zhǎng)度已存放在COUNT單元。 DATASEGMENT COUNTDW20 NUMDW7,9,12,14,1,3,28,55,121,44,15,45,34,67,87,90,32,43,59,6
30、0 MAXDW? DATAENDS STACKSEGMENT PARA STACK STACK DB20 DUP (?) STACKENDS CODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK MAINPROCFAR PUSHDS MOVAX,0 PUSH AX,58,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),循環(huán)程序設(shè)計(jì) MOVAX,DATA MOVDS,AX MOVBX,OFFSET NUM MOVCX,COUNT MOVAX,BX INCBX INCBX LOOP1:CMPAX,BX JAELOOP2 MOVAX,BX LOOP2:INCBX INCBX
31、 DECCX JNZLOOP1 MOVMAX,AX RET MAINENDP CODEENDS ENDMAIN,59,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),循環(huán)程序設(shè)計(jì) 【例4-6】設(shè)計(jì)一個(gè)100ms的軟件延時(shí)程序。采用多重循環(huán)程序,內(nèi)循環(huán)完成10ms的延時(shí),外層循環(huán)10次即可。,CODESENGMET ASSUMECS:CODE START:MOVDL,10 DELAY1:MOVCX,2800H DELAY2:LOOPDELAY2 DECDL JNZDELAY1 MOVAH,4CH INT21H CODEENDS ENDSTART,60,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序設(shè)計(jì)概述 順序程序設(shè)計(jì) 選擇程序設(shè)計(jì) 循環(huán)程序設(shè)計(jì) 子程序設(shè)計(jì),61,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),子程序設(shè)計(jì)格式和調(diào)用 子程序名 PROC 類型 指令序列 子程序名 ENDP 子程序調(diào)用與子程序返回由CALL和RET指令實(shí)現(xiàn)。子程序調(diào)用方式有近程調(diào)用、遠(yuǎn)程調(diào)用、直接調(diào)用和間接調(diào)用。,62,第四章:匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序設(shè)計(jì),子程序設(shè)計(jì)保護(hù)
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院運(yùn)營(yíng)規(guī)范制度
- 賣場(chǎng)運(yùn)營(yíng)現(xiàn)場(chǎng)管理制度
- 食品運(yùn)營(yíng)管理制度
- 園區(qū)一體化運(yùn)營(yíng)制度
- 2026陜西榆林市米脂縣銀城工程科技有限責(zé)任公司招聘3人備考題庫(kù)及參考答案詳解一套
- 2026福建同安第一中學(xué)附屬學(xué)校校園招聘?jìng)淇碱}庫(kù)及完整答案詳解
- 2026河南鄭州新鄭雙語(yǔ)學(xué)校招聘12人備考題庫(kù)完整答案詳解
- 2026遼寧沈陽(yáng)理工大學(xué)招聘高層次人才94人備考題庫(kù)(第一批)及1套完整答案詳解
- 2026重慶忠縣招聘社區(qū)工作者28人備考題庫(kù)及完整答案詳解一套
- 2026黑龍江二龍濤濕地省級(jí)自然保護(hù)區(qū)管護(hù)中心公益性崗位招聘5人備考題庫(kù)及完整答案詳解
- 記賬實(shí)操-村會(huì)計(jì)賬務(wù)處理分錄SOP
- 市政工程述職報(bào)告
- 公文寫作實(shí)例培訓(xùn)
- 2026年中考語(yǔ)文一輪復(fù)習(xí):統(tǒng)編教材古詩(shī)詞曲鑒賞85篇 ??急乇持R(shí)點(diǎn)匯編
- 海事組織航標(biāo)知識(shí)培訓(xùn)課件
- 網(wǎng)吧安全生產(chǎn)知識(shí)培訓(xùn)課件
- 2025-2030高端汽車品牌營(yíng)銷策略與消費(fèi)者畫像分析報(bào)告
- 心肺復(fù)蘇指南2025版
- 發(fā)酵車間安全知識(shí)培訓(xùn)課件
- 2026屆江西省南昌一中英語(yǔ)高三上期末教學(xué)質(zhì)量檢測(cè)試題
- 電梯井消防知識(shí)培訓(xùn)總結(jié)課件
評(píng)論
0/150
提交評(píng)論