




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、程序設(shè)計(jì)步驟1、分析問(wèn)題,確定算法。2、畫(huà)出程序流程3、正確、合理運(yùn)用存儲(chǔ)器和存放器。4、編寫(xiě)程序。5、調(diào)試程序。第9章 分支程序設(shè)計(jì)順序程序構(gòu)造指令1指令2指令n指令n+1 :第9章 分支程序設(shè)計(jì)將X中的數(shù)存入AX開(kāi)場(chǎng)終了將AX左移1位存入BX將AX左移2位將AX存入Z將AX與BX相加存入AXX+Y存入AXZ=10*(X+Y);設(shè)置數(shù)據(jù)段設(shè)置數(shù)據(jù)段DATA SEGMENT X DW 20H ;變量變量X Y DW 12H ;變量變量Y Z DW ? ;變量變量ZDATA ENDS;設(shè)置堆棧段設(shè)置堆棧段STACK1 SEGMENT PARA STACK DB 10H DUP(0)STACK
2、1 ENDS ;設(shè)置代碼段設(shè)置代碼段CODE SEGMENTASSUME CS: CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, X ADD AX, Y SAL AX, 1 MOV BX, AX MOV CL, 2 SAL AX, CL ADD AX, BX MOV Y, AX MOV AH, 4CH INT 21HCODE ENDS END START二、分支程序設(shè)計(jì)斷定條件分支程序1分支程序2斷定條件分支程序YYNN單分支 雙分支 斷定條件分支程序1分支程序2分支程序n.條件1條件2條件n多分支 RD1 TARGET1:JMP TAR
3、GET1 TARGET2: RD2 JMP TARGET2(a)正向轉(zhuǎn)移(b)負(fù)向轉(zhuǎn)移段內(nèi)轉(zhuǎn)移的直接尋址方式短轉(zhuǎn)移:RD1127或RD2-128JMPSHORT TARGET1、無(wú)條件轉(zhuǎn)移: JMP 目的1直接尋址方式段內(nèi)轉(zhuǎn)移JMP TARGETCOSEG1 SEGMENT COSEG2 SEGMENTTARGET: JMP FAR PTR TARGETCOSEG1 ENDS COSEG2 ENDS段內(nèi)轉(zhuǎn)移:段內(nèi)轉(zhuǎn)移:JMPCX JMPWORD PTR BX 或或 JMPBX段間轉(zhuǎn)移:段間轉(zhuǎn)移:JMPDWORD PTR BX1、無(wú)條件轉(zhuǎn)移: JMP 目的2間接尋址方式段間轉(zhuǎn)移2 2、條件轉(zhuǎn)移、
4、條件轉(zhuǎn)移 RD3 NEXT1:JXX NEXT1 NEXT2: RD4 JXX NEXT2(a)正向轉(zhuǎn)移(b)負(fù)向轉(zhuǎn)移JXX 目的目的條件轉(zhuǎn)移指令及其判別條件 1 0 1 0 1 0 1 0 1 0JOJNOJSJNSJZ/JEJNZ/JNEJP/JPEJNP/JPOJCJNC簡(jiǎn)單條件轉(zhuǎn)移指令條件組合關(guān)系判別條件 OF SF ZF PF CF條件轉(zhuǎn)移指令種類條件組合關(guān)系判別條件 OF SF ZF PF CF條件轉(zhuǎn)移指令種類(a=b)AND ZF=0(a=b) OR ZF=1(ab)AND ZF=0(ab) OR ZF=0 a b 0 a b 1 a b 0 a b 1JG/JNLEJGE/JN
5、LJL/JNGEJLE/JNG帶件符轉(zhuǎn)號(hào)移數(shù)指條令A(yù)NDORANDOR 0 0 1 0 0 1 1 1JA/JNBEJAE/JNBJB/JNAEJBE/JNA無(wú)件符轉(zhuǎn)號(hào)移數(shù)指條令條件轉(zhuǎn)移指令及其判別條件分支程序設(shè)計(jì)舉例1、兩分支程序設(shè)計(jì)方法2、多分支程序設(shè)計(jì)方法n1條件轉(zhuǎn)移法n2地址表法n3跳轉(zhuǎn)表二、分支程序設(shè)計(jì)程序如下:程序如下: TEST DA1, 01H JENEXT INC DA1NEXT: 測(cè)試DA1的第0位(DA1)0=0?DA1=(DA1)+1 Y N(b)試編制一程序段,把試編制一程序段,把DA1DA1字節(jié)單元中數(shù)據(jù)變?yōu)榕紨?shù)。字節(jié)單元中數(shù)據(jù)變?yōu)榕紨?shù)。兩分支程序設(shè)計(jì)方法兩分支程序
6、設(shè)計(jì)方法試編制一程序,實(shí)現(xiàn)兩個(gè)存儲(chǔ)區(qū)之間的數(shù)據(jù)傳送。:0000H0FFFFH源存儲(chǔ)區(qū)目的存儲(chǔ)區(qū):0000H0FFFFH源存儲(chǔ)區(qū)目的存儲(chǔ)區(qū):0000H源存儲(chǔ)區(qū)目的存儲(chǔ)區(qū)0FFFFH(a)(b)(c)兩存儲(chǔ)區(qū)之間的三種情況兩分支程序設(shè)計(jì)方法兩分支程序設(shè)計(jì)方法開(kāi)場(chǎng) SI=源存儲(chǔ)區(qū)首址 DI=目的存儲(chǔ)區(qū)首址 CX(DI)?(CX)=0?構(gòu)成末址:SI=(SI)+(CX)-1DI=(DI)+(CX)-1終了SI=(SI)-1DI=(DI)-1 FLAG2 兩存儲(chǔ)區(qū)之間數(shù)據(jù)傳送流程(DI)=(SI)CX=(CX)-1CX=(CX)-1DI=(SI)SI=(SI)+1DI=(DI)+1(CX)=0? N N
7、 Y Y FLAG3 源程序如下:源程序如下:DATA SEGMENT ORG 20HSTRING1 DB 5 DUP( ASSEMBLE LANGUAGE IS USEFUL) ORG $+20H ADDR1 DW STRING1+10H ;源空間首地址源空間首地址 ADDR2 DW STRING1+2 ;目的空間首地址目的空間首地址 COUNT DW 10H ;待傳送字節(jié)數(shù)待傳送字節(jié)數(shù)DATA ENDSSTACK1 SEGMENT PARA STACK DB 30H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MO
8、V AX, DATA MOV DS, AX MOV SI, ADDR1 ;將源空間的首地址存入將源空間的首地址存入SI存放器中存放器中 MOV DI, ADDR2 ;將目的空間的首地址存入將目的空間的首地址存入DI存放器中存放器中 MOV CX, COUNT ;將傳送的字節(jié)數(shù)存入將傳送的字節(jié)數(shù)存入CX存放器中存放器中 CMP SI, DI ;將源空間與目的空間的首地址將源空間與目的空間的首地址 JA FLAG2 ;假設(shè)源空間首地址大,從首地址開(kāi)場(chǎng)傳數(shù),跳轉(zhuǎn)相應(yīng)程序假設(shè)源空間首地址大,從首地址開(kāi)場(chǎng)傳數(shù),跳轉(zhuǎn)相應(yīng)程序 ADD SI, CX ;假設(shè)目的空間首地址大,需從末地址開(kāi)場(chǎng),構(gòu)成末地址假設(shè)目的
9、空間首地址大,需從末地址開(kāi)場(chǎng),構(gòu)成末地址 ADD DI, CXFLAG1: MOV AL, SI-1 ;本段程序?qū)崿F(xiàn)從首地址開(kāi)場(chǎng)傳數(shù)本段程序?qū)崿F(xiàn)從首地址開(kāi)場(chǎng)傳數(shù) MOV DI-1, AL DEC SI DEC DI DEC CX JNE FLAG1 JMP FLAG3FLAG2: MOV AL, SI ;本段程序?qū)崿F(xiàn)從末地址開(kāi)場(chǎng)傳數(shù)本段程序?qū)崿F(xiàn)從末地址開(kāi)場(chǎng)傳數(shù) MOV DI, AL INC SI INC DI DEC CX JNE FLAG2FLAG3: MOV AH, 4CH INT 21H CODE ENDS END START1、條件轉(zhuǎn)移法、條件轉(zhuǎn)移法多分支程序設(shè)計(jì)方法多分支程序設(shè)計(jì)方法
10、 條件1分支程序1Y 條件2分支程序2 條件n分支程序nNNYYN多分支程序設(shè)計(jì)方法多分支程序設(shè)計(jì)方法2、地址表法、地址表法4FLAG1低8位FLAG1高8位FLAG2低8位FLAG2高8位NUM程序1入口地址FLAG5低8位FLAG5高8位程序2入口地址程序5入口地址ADDRTABADDRTAB+2ADDRTAB+8入口地址=地址表首地址+參數(shù)-12 實(shí)現(xiàn)程序如下:實(shí)現(xiàn)程序如下: DATA SEGMENT NUM DB 4 ADDRTAB DW FLAG1, FLAG2, FLAG3, FLAG4, FLAG5 STRING1 DB HELLO WORLD!, 0AH, 0DH, $ STR
11、ING2 DB I LOVE THIS GAME, 0AH, 0DH, $ STRING3 DB COMPUTER SCIENCE, 0AH, 0DH, $ STRING4 DB ASSEMBLE LANGUAGE, 0AH, 0DH, $ STRING5 DB COMPUTER ORGANIZATION, 0AH, 0DH, $ DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MO
12、V AH,0 MOV AL, NUM DEC AL SHL AL,1 MOV SI, AX MOV BX, ADDRESSTABSI ;取轉(zhuǎn)移的入口地址取轉(zhuǎn)移的入口地址 JMP BX ;跳轉(zhuǎn)到對(duì)應(yīng)的分支處置程序跳轉(zhuǎn)到對(duì)應(yīng)的分支處置程序 FLAG1: MOV DX, OFFSET STRING1 JMP SHOW FLAG2: MOV DX, OFFSET STRING2 JMP SHOW FLAG3: MOV DX, OFFSET STRING3 JMP SHOW FLAG4: MOV DX, OFFSET STRING4 JMP SHOW FLAG5: MOV DX, OFFSET STRI
13、NG5 JMP SHOW SHOW: MOV AH, 09H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START多分支程序設(shè)計(jì)方法多分支程序設(shè)計(jì)方法3、跳轉(zhuǎn)表法、跳轉(zhuǎn)表法JUMP_TABJMP FLAG1JMP FLAG2JMP FLAG5實(shí)現(xiàn)程序如下:實(shí)現(xiàn)程序如下: DATA SEGMENT NUM DB 2 STRING1 DB HELLO WORLD!, 0AH, 0DH, $ STRING2 DB I LOVE THIS GAME, 0AH, 0DH, $ STRING3 DB COMPUTER SCIENCE, 0AH, 0DH, $ ST
14、RING4 DB ASSEMBLE LANGUAGE, 0AH, 0DH, $ STRING5 DB COMPUTER ORGANIZATION, 0AH, 0DH, $ DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AH,0 MOV AL, NUM DEC AL MOV BL,AL SHL AL,1 ADD AL,BL ADD AX, OFFSET JUMP_TAB JM
15、P AX JUMP_TAB: JMP FLAG1 JMP FLAG2 JMP FLAG3 JMP FLAG4 JMP FLAG5 FLAG1: MOV DX, OFFSET STRING1 JMP SHOW FLAG2: MOV DX, OFFSET STRING2 JMP SHOW FLAG3: MOV DX, OFFSET STRING3 JMP SHOWFLAG4: MOV DX, OFFSET STRING4 JMP SHOWFLAG5: MOV DX, OFFSET STRING5 JMP SHOW SHOW: MOV AH, 09H INT 21H MOV AH, 4CH INT
16、21H CODE ENDS END STARTN循環(huán)終了任務(wù)部分修正部分終了處置部分初始化部分初始化部分Y控制部分初始化部分任務(wù)部分修正部分循環(huán)終了終了處置部分Y控制部分N第10章 循環(huán)程序設(shè)計(jì)一、循環(huán)程序根本構(gòu)造 循環(huán)程序構(gòu)造1、初始化部分設(shè)置地址指針、計(jì)數(shù)器初值2、任務(wù)部分3、修正部分4、控制部分用計(jì)數(shù)控制循環(huán)用條件控制循環(huán)5、終了處置部分第10章 循環(huán)程序設(shè)計(jì)二、循環(huán)控制方法1、用計(jì)數(shù)控制循環(huán)運(yùn)用計(jì)數(shù)器,到達(dá)計(jì)數(shù)器預(yù)定值,循環(huán)終了。要求循環(huán)次數(shù)知。計(jì)數(shù)器可以遞增、遞減可以選用存放器、也可用存儲(chǔ)單元第10章 循環(huán)程序設(shè)計(jì)用正計(jì)數(shù)法,計(jì)算數(shù)組ARRAY一切單元的和 累加和、計(jì)數(shù)器、數(shù)組指針清
17、0開(kāi)場(chǎng)終了累加計(jì)數(shù)器=循環(huán)次數(shù)數(shù)?YN數(shù)組指針、計(jì)數(shù)器加1 DATA SEGMENT ARRAY DB 1,2,3,4,5,6,7,8,9,10 COUNT EQU $-ARRAY SUM DW ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX, DATA MOV DS, AX XOR AX,AX ;AX存放器清0,累加用 MOV CX,0 ;計(jì)數(shù)器CX清0 MOV SI, 0 ;數(shù)組指針清0 NEXT: ADD
18、AL,ARRAYSI ;數(shù)組累加 INC SI ;數(shù)組指針后移 INC CX ;計(jì)數(shù)器加1 CMP CX,COUNT ;計(jì)數(shù)器值與循環(huán)次數(shù)比較 JL NEXT ;假設(shè)小于,繼續(xù)循環(huán) MOV BYTE PTR SUM,AL ;將累計(jì)和存入變量 MOV AH, 4CH INT 21H CODE ENDS END START2、用條件控制循環(huán)找出一個(gè)終止循環(huán)的條件,每循環(huán)一次,對(duì)條件進(jìn)展一次檢測(cè)。滿足終止循環(huán)的條件,退出循環(huán),否那么繼續(xù)。通常選用條件轉(zhuǎn)移指令來(lái)控制循環(huán)能否終了。二、循環(huán)控制方法第10章 循環(huán)程序設(shè)計(jì) 編寫(xiě)程序,求解兔子繁衍問(wèn)題,給出到指定只兔子數(shù)時(shí),需求多少個(gè)月。 開(kāi)場(chǎng)終了新數(shù)給定數(shù)
19、?YN月數(shù)CX初始化數(shù)列初始化交換AX, BX產(chǎn)生新的斐波那契數(shù)月數(shù)加1存儲(chǔ)月數(shù)時(shí)間時(shí)間初生初生兔子兔子成熟成熟兔子兔子兔子兔子總數(shù)總數(shù)1 1 1 1 0 0 1 1 2 2 0 0 1 1 1 1 3 3 1 1 1 1 2 2 4 4 1 1 2 2 3 3 5 5 2 2 3 3 5 5 6 6 3 3 5 5 8 8 7 7 5 5 8 8 13 13 8 8 8 8 13 13 21 21 9 9 13 13 21 21 34 34 10 10 21 21 34 34 55 55 實(shí)現(xiàn)程序如下:實(shí)現(xiàn)程序如下: DATA SEGMENT RABBITNUM DW 650 ;存放兔子只數(shù)
20、存放兔子只數(shù) MONTHNUM DB ? ;存放月數(shù)存放月數(shù) DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP (?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS, AX XOR CX,CX ;計(jì)數(shù)器清計(jì)數(shù)器清0 MOV AX,0 ;斐波那契數(shù)初始值斐波那契數(shù)初始值 MOV BX,1 NEXT: XCHG AX,BX ADD AX,BX ;產(chǎn)生一個(gè)新的斐波那契數(shù) INC CL ;計(jì)數(shù)器加1 CMP AX,RABBITNUM ;比較產(chǎn)生的新數(shù)與給定數(shù)
21、 JAE RESULT ;假設(shè)大于或等于,終了 JMP NEXT ;小于,繼續(xù)循環(huán) RESULT: MOV MONTHNUM,CL MOV AH,4CH INT 21H CODE ENDS END START 1、內(nèi)循環(huán)必需完好地包含在外循環(huán)內(nèi),二者不可以相互交叉。2、當(dāng)從外循環(huán)再次進(jìn)入內(nèi)循環(huán)時(shí),內(nèi)循環(huán)的初始條件要重新設(shè)置。3、一個(gè)外循環(huán)中可以包含多個(gè)內(nèi)循環(huán),這些內(nèi)循環(huán)可以嵌套,也可以并列存在。4、當(dāng)內(nèi)外循環(huán)都采用CX存放器作為計(jì)數(shù)器時(shí),由外循環(huán)進(jìn)入內(nèi)循環(huán)時(shí),要保管外循環(huán)的次數(shù),可以經(jīng)過(guò)壓入堆棧、存入其它存放器或存儲(chǔ)器中實(shí)現(xiàn)。5、當(dāng)外層循環(huán)要求內(nèi)層循環(huán)在不同條件下反復(fù)執(zhí)行時(shí),外循環(huán)中應(yīng)該包括對(duì)
22、內(nèi)循環(huán)部分參數(shù)的修正部分。三、多重循環(huán)程序設(shè)計(jì)第10章 循環(huán)程序設(shè)計(jì)開(kāi)場(chǎng)終了 CX=0?YN行號(hào)J=0,乘法表指針DI=0外循環(huán)次數(shù)CX=9外循環(huán)次數(shù)CX入棧行號(hào)J加1I*J存入乘法表修正指針DI加1列號(hào)I=0,內(nèi)循環(huán)次數(shù)CX=9列號(hào)I加1內(nèi)循環(huán)次數(shù)CX減1恢復(fù)外循環(huán)次數(shù)外循環(huán)次數(shù)CX減1 CX=0?YN DATA SEGMENT MULTABLE DB 9*9 DUP(0) DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP (?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV
23、AX,DATA MOV DS, AX MOV BH,0 ;將行號(hào)初值存入BH XOR DI, DI ;將乘法表的指針清0 MOV CX,9 ;外循環(huán)次數(shù)為9 OUTERLOP: PUSH CX ;將外循環(huán)次數(shù)入棧維護(hù) INC BH ;行號(hào)加1 MOV BL,0 ;將列號(hào)初值存入BL MOV CX,9 ;內(nèi)循環(huán)次數(shù)為9INNERLOP:INC BL ;列號(hào)加1 MOV AL,BH ;將行號(hào)存入AL MUL BL ;將行號(hào)*列號(hào)存入AL MOV MULTABLEDI,AL ;將AL存入乘法表中 INC DI ;修正乘法表指針 LOOP INNERLOP ;內(nèi)循環(huán)控制語(yǔ)句 POP CX ;恢復(fù)外循環(huán)
24、次數(shù) LOOP OUTERLOP ;外循環(huán)控制語(yǔ)句 MOV AH,4CH INT 21H CODE ENDS END START第11章 子程序設(shè)計(jì)子程序的順應(yīng)范圍:1多次反復(fù)運(yùn)用的程序段。如程序中多次出現(xiàn)的數(shù)值轉(zhuǎn)換、碼值轉(zhuǎn)換等2具有特殊功能的程序段。如求解某一問(wèn)題時(shí),涉及到的復(fù)雜的數(shù)學(xué)計(jì)算,以及排序或查找等一些需求用到的算法問(wèn)題。3具有通用性的程序段。如一些對(duì)文件的操作,字符串的操作等4中斷效力程序。5系統(tǒng)調(diào)用程序。如DOS調(diào)用,BIOS調(diào)用等。重點(diǎn)n過(guò)程定義n過(guò)程調(diào)用n過(guò)程前往程序構(gòu)造n過(guò)程n主調(diào)過(guò)程主程序n被調(diào)過(guò)程子程序第11章 子程序設(shè)計(jì)過(guò)程定義過(guò)程名PROC類型語(yǔ)句語(yǔ)句過(guò)程名ENDP
25、NEARFAR第11章 子程序設(shè)計(jì)過(guò)程調(diào)用CALL 過(guò)程名前往地址入棧轉(zhuǎn)移到過(guò)程名所代表的入口地址段內(nèi)段間直接調(diào)用間接調(diào)用CALL INPUTCALL BXCALL WORD PTR BXCALL FAR PTR INPUTCALL OUTPUTCALL DWORD PTR BX第11章 子程序設(shè)計(jì)過(guò)程前往RET過(guò)程前往地址從棧中彈出到 IP (CS)中前往原來(lái)的調(diào)用點(diǎn)段內(nèi)段間前往指令段內(nèi)段間帶立刻數(shù)前往指令RETRET n第11章 子程序設(shè)計(jì)子程序設(shè)計(jì)方法1、適度地劃分并確定子程序功能具有獨(dú)立功能的程序作為一個(gè)模塊多次出現(xiàn)的程序段獨(dú)立出來(lái)2、選擇適當(dāng)?shù)膮⒘總魉屯緩?、信息的保管4、編寫(xiě)子程序
26、的文字闡明(1)在調(diào)用程序中保管信息 :PUSHPUSHPUSHCALLPOPPOPPOP :AXBXCXSUB_PROCCXBXAX;保管信息;調(diào)用子程序;恢復(fù)信息信息的保管(2)在子程序中保管信息SUB_PTOC1SUB_PROC1PROCPUSH BXPUSH CXPUSH SIPUSH BP : :POP BPPOP SIPOP CXPOP BXRETENDP子程序功能的指令序列信息的保管編寫(xiě)子程序的文字闡明1子程序名。2子程序的功能描畫(huà)。3子程序的入口參數(shù)和出口參數(shù)。4子程序中運(yùn)用了哪些存放器、存儲(chǔ)單元。5子程序中能否調(diào)用其他子程序。第11章 子程序設(shè)計(jì)參數(shù)傳送n 用存放器傳送適宜參
27、數(shù)較少情況n 用參數(shù)表傳送適宜參數(shù)較多情況n 用堆棧傳送適宜參數(shù)多情況第11章 子程序設(shè)計(jì)UPTOLW PROC PUSHF CMP AL, A JB UP1 CMP AL, Z JA UP1 ADD AL, a-AUP1: POPF RETUPTOLW ENDP把大寫(xiě)字母改為小寫(xiě)字母;子程序名:UPTOLW;功能:大寫(xiě)轉(zhuǎn)換小寫(xiě);入口參數(shù):AL=待轉(zhuǎn)字符;出口參數(shù):AL中放轉(zhuǎn)換完字符MOV AL, RCALL UPTOLWMOV DL, AL過(guò)程調(diào)用存放器傳送用減奇數(shù)法求平方根子程序流程21) 12(NKNK286415131197531開(kāi)場(chǎng)終了 夠減?Y存放器入棧維護(hù)平方根加1減奇數(shù)構(gòu)成下一
28、個(gè)奇數(shù)N平方根初始化奇數(shù)初始化恢復(fù)存放器實(shí)現(xiàn)程序?yàn)椋?DATA SEGMENT ARRAY DW 8101,3600,2510,100 COUNT EQU($-ARRAY)/2 ROOT DB COUNT DUP(0) DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV SI,0 MOV DI,0 NEXT: MOV AX, ARRAYSI ;從數(shù)組中依次取出被
29、開(kāi)方數(shù) CALL GETSQRT ;調(diào)用子程序求平方根 MOV ROOTDI,BL ;將平方根存入ROOT數(shù)組中 ADD SI,2 ;修正指針,指向下一個(gè)被開(kāi)方數(shù) INC DI ;修正指針,用于存放下一個(gè)平方根 LOOP NEXT MOV AH, 4CH INT 21H GETSQRT PROC PUSH AX ;將子程序中用到的存放器入棧維護(hù) PUSH DX MOV BL,0 ;平方根初始化 MOV DX,1 ;奇數(shù)初始化SUB1: SUB AX, DX ;進(jìn)展減奇數(shù) JB EXIT ;假設(shè)不夠減,終了 INC BL ;夠減,BL加1 ADD DX,2 ;構(gòu)成下一個(gè)奇數(shù) JMP SUB1 E
30、XIT: POP DX ;恢復(fù)存放器 POP AX RET ENDP ENDS END START過(guò)程調(diào)用存儲(chǔ)單元同上題DATA SEGMENT ARRAY DW 8101,3600,2510,100 COUNT EQU($-ARRAY)/2 ROOT DB COUNT DUP(0) RADICAND DW ? SQUA_ROOT DB ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX
31、,COUNT過(guò)程調(diào)用存儲(chǔ)單元 MOV SI,0 MOV DI,0NEXT: MOV AX,ARRAYSI ;從數(shù)組中依次取出被開(kāi)方數(shù) MOV RADICAND,AX CALL GETSQRT ;調(diào)用子程序求平方根 MOV BL, SQUA_ROOT ;將平方根存入ROOT數(shù)組中 MOV ROOTDI,BL ADD SI,2 ;修正指針,指向下一個(gè)被開(kāi)方數(shù) INC DI ;修正指針,用于存放下一個(gè)平方根 LOOP NEXT MOV AH,4CH INT 21H GETSQRT PROC PUSH AX ;將子程序中用到的存放器入棧維護(hù) PUSH DX過(guò)程調(diào)用存儲(chǔ)單元 MOV AX,RADICAN
32、D MOV SQUA_ROOT,0 ;平方根初始化 MOV DX,1 ;奇數(shù)初始化SUB1: SUB AX,DX ;進(jìn)展減奇數(shù) JB EXIT ;假設(shè)不夠減,終了 INC SQUA_ROOT ;夠減,BL加1 ADD DX,2 ;構(gòu)成下一個(gè)奇數(shù) JMP SUB1 EXIT: POP DX ;恢復(fù)存放器 POP AX RET ENDP ENDS END STARTARY DW -86, 420, 7, ,40COUNT DW 100SUM DW ?TAB DW 3 DUP(?)MOV TAB, OFFSET ARYMOV TAB+2, OFFSET COUNTMOV TAB+4, OFFSET
33、SUMLEA BX, TABCALL PADDMOV DX, SUM .PADD PROC MOV SI, BX MOV DI, BX+2 MOV CX, DI MOV DI, BX+4 XOR AX, AXL: ADD AX, SI ADD SI, 2 LOOP L MOV DI, AX RETPADD ENDP過(guò)程調(diào)用參數(shù)表傳送利用地址表傳送參數(shù),實(shí)現(xiàn)數(shù)組ARRAY單元的累加。DATA SEGMENT ARRAY DW 21,22,23,24,25,26,27 COUNT DW ($-ARRAY)/2 RESULT DW ? ADDRESS DW 3 DUP(0) ;定義地址表DATA E
34、NDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX 利用地址表傳送參數(shù),實(shí)現(xiàn)數(shù)組ARRAY單元的累加。MOV ADDRESS, OFFSET ARRAY ;將ARRAY的地址存入地址表MOV ADDRESS+2,OFFSET COUNT;將COUNT的地址存入地址表MOV ADDRESS+4,OFFSET RESULT;將RESULT的地址存入地址表MOV BX,OFFSET ADDRESS ;將地址表的地址裝入B
35、XCALL SUM_PROC ;調(diào)用求和子程序MOV AH,4CHINT 21HSUM_PROC PROCPUSH AX ;將子程序中用到的存放器入棧維護(hù)PUSH BXPUSH SIPUSH DIMOV SI,BX ;將ARRAY的地址取出,存入SIMOV DI,BX+2 ;將COUNT的地址取出,存入DIMOV CX,DI ;將COUNT的內(nèi)容取出,存入CX作為計(jì)數(shù)器MOV DI,BX+4 ;將RESULT的地址取出,存入DI利用地址表傳送參數(shù),實(shí)現(xiàn)數(shù)組ARRAY單元的累加。 XOR AX,AX ;AX存放器初始化 LOP: ADD AX,SI ;累加 ADD SI,2 ;修正指針,移到下一
36、單元 LOOP LOP MOV DI,AX ;將結(jié)果保管到RESULT中 POP DI ;恢復(fù)存放器 POP SI POP CX POP AX RET ENDP ENDS END START過(guò)程調(diào)用用棧傳送參數(shù)n在主調(diào)程序中壓入?yún)?shù)n參數(shù)和前往地址在棧中的位置n在被調(diào)過(guò)程中讀取參數(shù)n在主調(diào)程序中讀取前往的參數(shù)用棧傳送參數(shù)處置要點(diǎn)壓入?yún)?shù)CALL從棧中彈出壓入的參數(shù)用BP間址方式取出參數(shù)處置RET主調(diào)程序被調(diào)過(guò)程p參數(shù)壓入順序與取出順序相反p參數(shù)的個(gè)數(shù)和類型按事先商定存取p調(diào)用終了時(shí),從棧中去除壓入的參數(shù)利用堆棧傳送參數(shù),實(shí)現(xiàn)數(shù)組ARRAY單元的累加。 SPARRAY首地址COUNT內(nèi)容RESU
37、LT地址SP前往地址ARRAY首地址COUNT內(nèi)容RESULT地址SPBP前往地址AXSIDIARRAY首地址COUNT內(nèi)容RESULT地址BPSP前往地址ARRAY首地址COUNT內(nèi)容RESULT地址SP DATA SEGMENT ARRAY DW 21,22,23,24,25,26,27 COUNT DW ($-ARRAY)/2 RESULT DW ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,A
38、X MOV AX, OFFSET ARRAY ;將ARRAY的地址入棧 PUSH AX MOV AX,COUNT ;將COUNT入棧 PUSH AX MOV AX,OFFSET RESULT ;將RESULT的地址入棧 PUSH AX CALL SUM_PROC ;調(diào)用求和子程序調(diào)用求和子程序 MOV AH,4CH INT 21H SUM_PROC PROC PUSH AX ;將子程序中用到的存放器入棧維護(hù)將子程序中用到的存放器入棧維護(hù) PUSH SI PUSH DI PUSH BP MOV BP,SP MOV SI,BP+14 ;將將ARRAY的地址取出,存入的地址取出,存入SI MOV C
39、X,BP+12 ;將將COUNT的內(nèi)容取出,存入的內(nèi)容取出,存入CX MOV DI,BP+10 ;將將RESULT的地址取出,存入的地址取出,存入DI XOR AX,AX ;AX存放器初始化存放器初始化 LOP: ADD AX,SI ;累加累加 ADD SI,2 ;修正指針,移到下一單元修正指針,移到下一單元 LOOP LOP MOV DI,AX ;將結(jié)果保管到RESULT中 POP BP POP DI ;恢復(fù)存放器 POP SI POP AX RET 6 ENDP ENDS END START系統(tǒng)功能調(diào)用由OS提供的一組實(shí)現(xiàn)特殊功能的子程序供程序員在程序中調(diào)用,以減輕編程任務(wù)量。系統(tǒng)功能調(diào)用
40、有兩種,一種稱為DOS功能調(diào)用,另一種稱為BIOS功能調(diào)用。運(yùn)用程序外設(shè)硬件接口BIOSDOS第12章 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用采用軟中斷指令 INT n 其中:n為中斷類型碼 1PUSHF,TF、IF清0,CS、IP入棧 2按中斷類型碼n,從中斷向量表對(duì)應(yīng)位置取出將要調(diào)用的功能子程序的入口地址CS,IP 3功能子程序前往:IRETDOS功能調(diào)用調(diào)用方法: 入口參數(shù) 子程序編號(hào)送AH INT 21HDOS功能調(diào)用根本I/O功能調(diào)用 功能 入口參數(shù) 出口參數(shù) 闡明 鍵盤(pán)輸入 AH = 1AL=字符ASCII碼字符顯示控制臺(tái)輸入 AH = 8同1號(hào)無(wú)顯示顯示輸出 AH = 2 DL = 字符ASC
41、II碼打印輸出 AH = 5 DL = 字符ASCII碼直接控制臺(tái) AH = 6,7 ZF=0,AL=字符ASCII碼輸入/輸出 DL = 0FFH/字符碼ZF=1無(wú)鍵按下字符串輸出 AH = 9字符串須以$終了 DS:DX=串首址字符串輸入 AH = 0AH首先定義緩沖區(qū) DS:DX=串首址(1) 從鍵盤(pán)輸入一個(gè)字符(功能號(hào)=1) MOV AH,1 ;等待按鍵 INT 21H ;字符回顯 (2) 從鍵盤(pán)輸入一個(gè)字符,無(wú)顯示(功能號(hào)=8) MOV AH,8 INT 21H DOS功能調(diào)用 例:程序中有時(shí)需求用戶對(duì)提示做出應(yīng)對(duì) GET_KEY: MOV AH,1;等待鍵入字符 INT 21H;結(jié)
42、果在AL中 CMP AL,Y ;是Y? JZ YES ;是,轉(zhuǎn)YES CMP AL,N ;是N? JZ NO ;是,轉(zhuǎn)NO JMP GET_KEY;否那么繼續(xù)等待輸入 YES: NO: (3) 在顯示器上顯示一個(gè)字符(功能號(hào)=2) MOV DL, MOV AH, 2 INT 21H 例:在顯示器上顯示一個(gè)字符A MOV DL, A ;或MOV DL, 41H MOV AH, 2 INT 21HDOS功能調(diào)用4MOV DL,0FFH;鍵盤(pán)輸入 MOV AH,6 INT 21H MOV DL,24H;屏幕輸出 MOV AH,6 INT 21HDOS功能調(diào)用(5)顯示字符串(功能號(hào)=9) LEA D
43、X, MOV AH, 9 INT 21H留意:被顯示的字符串必需以$終了。DOS功能調(diào)用DATA SEGMENT BUF DB HOW DO YOU DO?$ .DATA ENDS.MOV AX,DATAMOV DS,AX.MOV DX,OFFSET BUFMOV AH,9INT 21H. 例:顯示一字符串(6)輸入字符串(功能號(hào)=0AH) 此功能調(diào)用從鍵盤(pán)輸入一串字符并把它存入用戶指定的緩沖區(qū)中。LEA DX, MOV AH, 0AHINT 21H DOS功能調(diào)用(預(yù)留的預(yù)留的N1個(gè)字節(jié)的存儲(chǔ)單元個(gè)字節(jié)的存儲(chǔ)單元) 0DHN2N1 N1: 緩沖區(qū)長(zhǎng)度(最大鍵入字符數(shù)) N2: 實(shí)踐鍵入的字符數(shù)(不包括回車符) 用戶定義的輸入字符串的緩沖區(qū)格
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能服務(wù)機(jī)器人技術(shù)創(chuàng)新考核試卷
- 機(jī)械式停車設(shè)備故障預(yù)防與診斷技巧考核試卷
- 木材采運(yùn)的數(shù)字化轉(zhuǎn)型與智能化考核試卷
- 中介居間費(fèi)合同范本
- 房主房子出租合同范本
- 維修農(nóng)村管道合同范本
- 畜牧產(chǎn)品加工與供應(yīng)合作協(xié)議
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用研發(fā)生產(chǎn)合同書(shū)
- 電信運(yùn)營(yíng)商合作協(xié)議具體內(nèi)容
- 工作計(jì)劃-項(xiàng)目推進(jìn)階段詳細(xì)工作安排
- 學(xué)校食堂“三同三公開(kāi)”制度實(shí)施方案
- 跨學(xué)科主題學(xué)習(xí)的意義與設(shè)計(jì)思路
- 2025年浙江國(guó)企臺(tái)州黃巖站場(chǎng)管理服務(wù)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年醫(yī)院財(cái)務(wù)工作計(jì)劃(2篇)
- DB32T 4969-2024大型醫(yī)用設(shè)備使用監(jiān)督管理平臺(tái)基礎(chǔ)數(shù)據(jù)采集規(guī)范
- 2025年大連長(zhǎng)興開(kāi)發(fā)建設(shè)限公司工作人員公開(kāi)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 教科版三年級(jí)下冊(cè)科學(xué)全冊(cè)單元教材分析
- 《物理學(xué)的發(fā)展史》課件
- 2025年廣東廣州市海珠區(qū)官洲街道辦事處政府雇員招聘5人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《道路交通安全法》課件完整版
- 加快形成農(nóng)業(yè)新質(zhì)生產(chǎn)力
評(píng)論
0/150
提交評(píng)論