版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、應(yīng)用程序示例應(yīng)用程序示例 代碼轉(zhuǎn)換代碼轉(zhuǎn)換 代碼轉(zhuǎn)換是程序設(shè)計(jì)中的常見(jiàn)問(wèn)題。代碼轉(zhuǎn)換是程序設(shè)計(jì)中的常見(jiàn)問(wèn)題。 由于涉及到鍵盤輸入、屏幕顯示、打印機(jī)輸出由于涉及到鍵盤輸入、屏幕顯示、打印機(jī)輸出等等I/O操作往往都是處理字符的操作往往都是處理字符的ASCII碼值碼值; 作為對(duì)比:在計(jì)算機(jī)內(nèi)部,指令運(yùn)算的對(duì)象和作為對(duì)比:在計(jì)算機(jī)內(nèi)部,指令運(yùn)算的對(duì)象和結(jié)果都是二進(jìn)制編碼:結(jié)果都是二進(jìn)制編碼:一串一串0、1代碼代碼。 輸出顯示的格式可能是二進(jìn)制數(shù)、十進(jìn)制數(shù)或輸出顯示的格式可能是二進(jìn)制數(shù)、十進(jìn)制數(shù)或者十六進(jìn)制數(shù),所以很多場(chǎng)合都要進(jìn)行者十六進(jìn)制數(shù),所以很多場(chǎng)合都要進(jìn)行代碼轉(zhuǎn)代碼轉(zhuǎn)換換。 例例把鍵盤上輸入的一
2、位十進(jìn)制數(shù)把鍵盤上輸入的一位十進(jìn)制數(shù)(ASCII碼碼)以二進(jìn)制以二進(jìn)制方式顯示方式顯示(ASCII碼碼) 。 EXE格式程序清單格式程序清單 DATA SEGMENT USE16 MESG1 DB Please Enter!,0DH,0AH,$ MESG2 DB -Error!$ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H MOV AH,1 INT 21H ;輸入一個(gè)字符輸入一個(gè)字符 CMP AL,39H J
3、A ERROR ;如果大于如果大于39H則出錯(cuò)則出錯(cuò) CMP AL,30H JB ERROR ;或或JC:如果小于如果小于30H同樣出錯(cuò)同樣出錯(cuò) SUB AL,30H ;或或AND AL,0FH MOV BL,AL MOV AH,2 MOV DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXIT ERROR:MOV AH,9 MOV DX,OFFSET MESG2 INT 21HEXIT:MOV AH,4CH INT 21H DISP PROC MOV CX,8 LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV
4、DL,1 NEXT:MOV AH,2 INT 21H LOOP LAST RET DISP ENDP CODE ENDS END BEGCOM格式程序清單格式程序清單 .486 CODE SEGMENT USE16 ASSUME CS:CODE ORG 100H START:JMP BEG MESG1 DB Please Enter!,0DH,0AH,$ MESG2 DB -Error!$ BEG: MOV AH,9 MOV DX,OFFSET MESG1 INT 21H MOV AH,1 INT 21H CMP AL,39H JA ERROR CMP AL,30H JB ERROR SUB
5、AL,30H MOV BL,AL MOV AH,2 MOV DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXIT ERROR:MOV AH,9 MOV DX,OFFSET MESG2 INT 21H EXIT:MOV AH,4CH INT 21H ;- DISP PROC MOV CX,8 LAST:MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1 NEXT:MOV AH,2 INT 21H LOOP LAST RET DISP ENDP CODE ENDS END START 就本例而言,就本例而言,COM文
6、件體積為文件體積為110個(gè)字節(jié),而個(gè)字節(jié),而EXE文件為文件為625個(gè)字節(jié)。個(gè)字節(jié)。 顯然,顯然,COM文件比文件比EXE文件大大節(jié)省了空間。文件大大節(jié)省了空間。 例例 把兩個(gè)字節(jié)存儲(chǔ)單元把兩個(gè)字節(jié)存儲(chǔ)單元X和和X+1中中低低4位位存儲(chǔ)的兩個(gè)存儲(chǔ)的兩個(gè)0到到9之之間的數(shù)間的數(shù)(非壓縮非壓縮BCD碼碼) 合并成一個(gè)合并成一個(gè)壓縮壓縮BCD碼碼,結(jié)果存放到,結(jié)果存放到字節(jié)單元字節(jié)單元Y中。中。 解解:程序如下程序如下: DATA SEGMENT;數(shù)據(jù)段數(shù)據(jù)段 X DB 5,7 Y DB ? DATA ENDS CODE SEGMENT ;代碼段代碼段 ASSUME CS:CODE,DS:DATA
7、START PROC FAR ;定義定義FAR類型過(guò)程類型過(guò)程 PUSH DS ;預(yù)留返回預(yù)留返回DOS地址地址 MOV AX,0 PUSH AX MOV AX,DATA ;初始化初始化DS MOV DS,AX MOV AL,X ;取取BCD碼的高碼的高4位數(shù)位數(shù) MOV CL,4 SHL AL,CL MOV BL,X+1 ;取取BCD碼的低碼的低4位位 AND BL,0FH OR AL,BL ;合并結(jié)果合并結(jié)果 ;能否改為能否改為XOR或或ADD MOV Y,AL ;存存BCD碼到碼到Y(jié)單元單元 RET START ENDP CODE ENDS END START ;源程序結(jié)束源程序結(jié)束例例
8、 把一個(gè)字單元的把一個(gè)字單元的4位位BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)。碼轉(zhuǎn)換成二進(jìn)制數(shù)。 CODE SEGMENT USE16 ASSUME CS:CODE BCD_NUM DW 4567H ; 4567H = 7+10*(6+10*(5+10*(4+10*0) ) ) BEG:MOV CX,4 MOV AX,0 ;存放中間結(jié)果存放中間結(jié)果 AGAIN:ROL BCD_NUM,4 MOV BX,BCD_NUM AND BX,000FH ;依次取出依次取出BCD_NUM的千、百、的千、百、十、個(gè)位的十、個(gè)位的BCD碼碼 CALL MUL10 LOOP AGAIN DISP:MOV BP,AX MOV CX
9、,16 LAST:MOV AL,0 RCL BP,1 ADC AL,0 MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H MUL10 PROC MOV DX,10 MUL DX ADD AX,BX ;乘積的高乘積的高16位存放在位存放在DX,始終為,始終為0 RET MUL10 ENDP CODE ENDS END BEG 特例:一個(gè)不大于特例:一個(gè)不大于99的的BCD數(shù)可以直接用數(shù)可以直接用AAD指令求出等值的二進(jìn)制數(shù)。指令求出等值的二進(jìn)制數(shù)。 MOV AX,0908H AAD進(jìn)制轉(zhuǎn)換進(jìn)制轉(zhuǎn)換 進(jìn)制轉(zhuǎn)換過(guò)程中經(jīng)常利用代碼轉(zhuǎn)換。進(jìn)制轉(zhuǎn)換過(guò)程中經(jīng)常利
10、用代碼轉(zhuǎn)換。例例把一個(gè)把一個(gè)16位二進(jìn)制數(shù)轉(zhuǎn)換成位二進(jìn)制數(shù)轉(zhuǎn)換成十六十六進(jìn)制數(shù)顯示。進(jìn)制數(shù)顯示。 .486 DATA SEGMENT USE16 NUM DW 01011B ;1A2BH BUF DB 4 DUP(?),H$ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF ;存放轉(zhuǎn)換后的存放轉(zhuǎn)換后的16進(jìn)制數(shù)進(jìn)制數(shù)ASCII碼碼 MOV DX,NUM ;取出二進(jìn)制數(shù)取出二進(jìn)制數(shù) SAL EDX,16 MOV CX,4 ;一個(gè)一個(gè) 16位二進(jìn)制數(shù)包括位二
11、進(jìn)制數(shù)包括4位位16進(jìn)制數(shù)進(jìn)制數(shù) LP: ROL EDX,4 ;圖示圖示EDX/DX/DL變化變化 AND DL,0FH ;DL低低4位二進(jìn)制必定位二進(jìn)制必定介于介于015 CMP DL,10 JB NEXT NEXT:ADD DL,30H; 09的的ASCII介于介于30H39H、與數(shù)值、與數(shù)值09相差相差30H MOV SI,DL INC SI LOOP LP MOV DX,NUM ;取出二進(jìn)制數(shù)取出二進(jìn)制數(shù) SAL EDX,16 MOV CX,4 ;一個(gè)一個(gè) 16位二進(jìn)制數(shù)包括位二進(jìn)制數(shù)包括4位位16進(jìn)制數(shù)進(jìn)制數(shù) LP: ROL EDX,4 ;圖示圖示EDX/DX/DL變化變化 AND
12、DL,0FH ;DL低低4位二進(jìn)制必定位二進(jìn)制必定介于介于015 CMP DL,10 JB NEXT ADD DL,7 ;A的的ASCII與與10相差相差:37H NEXT:ADD DL,30H; 09的的ASCII介于介于30H39H、與數(shù)值、與數(shù)值09相差相差30H MOV SI,DL INC SI LOOP LP MOV AH,9 MOV DX,OFFSET BUF INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG例例二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)顯示。二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)顯示。 二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)有多種方法,即比較二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)有多種方法,
13、即比較法、恢復(fù)余數(shù)法和除法求余。法、恢復(fù)余數(shù)法和除法求余。 8位位二進(jìn)制數(shù)轉(zhuǎn)換二進(jìn)制數(shù)轉(zhuǎn)換比較法比較法程序清單程序清單 思路:需要注意:必須事先確定:操作數(shù)的思路:需要注意:必須事先確定:操作數(shù)的字字長(zhǎng)長(zhǎng)! CMPDISP MACRO NN LOCAL LAST,NEXT MOV DL,0 LAST:CMP BEN,NN JC NEXT INC DL SUB BEN,NN JMP LAST NEXT:ADD DL,30H MOV AH,2 INT 21H ENDM CODE SEGMENT USE16 ASSUME CS:CODE BEN DB 10101110B ;等于十進(jìn)制數(shù)等于十進(jìn)制數(shù)1
14、74 BEG:CMPDISP 100 ;求求百位百位上的數(shù)字上的數(shù)字 CMPDISP 10 ;求求十位十位上的數(shù)字上的數(shù)字 CMPDISP 1 ;求求個(gè)位個(gè)位上的數(shù)字上的數(shù)字 MOV AH,4CH INT 21H CODE ENDS END BEG 特例:一個(gè)不大于特例:一個(gè)不大于99的二進(jìn)制數(shù),轉(zhuǎn)換成十進(jìn)制的二進(jìn)制數(shù),轉(zhuǎn)換成十進(jìn)制數(shù)顯示更簡(jiǎn)單。數(shù)顯示更簡(jiǎn)單。 MOV AX,01100010B;AH=0,AL=98 AAM ;AH=09H,AL=08H ADD AX,3030H ;AH-39H,AL=38H PUSH AX ROL AX,8 ;AH=38H,AL=39H MOV AH,0EH
15、INT 10H ;0E號(hào)號(hào)10H的的BIOS調(diào)用等價(jià)調(diào)用等價(jià)與與2號(hào)號(hào)DOS功能調(diào)用,顯示一個(gè)字符功能調(diào)用,顯示一個(gè)字符(其其ASCII碼放碼放在在AL中中) POP AX MOV AH,0EH INT 10H 除法求余法除法求余法。把一個(gè)。把一個(gè)32位二進(jìn)制數(shù)轉(zhuǎn)換成位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制十進(jìn)制數(shù)、并顯示數(shù)、并顯示在顯示器上。在顯示器上。 .486 CODE SEGMENT USE16 ASSUME CS:CODE NUM32 DD 3456789000 BEG:MOV EAX,NUM32 MOV EBX,10 ;除數(shù)是除數(shù)是32位位10,能否視為能否視為16位的位的10? ;注意:注意:必須
16、把必須把10視為視為32位數(shù)位數(shù)!如果把除數(shù)!如果把除數(shù)10視為視為16位位,則商用,則商用16位放不下。位放不下。 MOV CX,0 ;動(dòng)態(tài)統(tǒng)計(jì)動(dòng)態(tài)統(tǒng)計(jì):將要顯示將要顯示的十進(jìn)制數(shù)的位數(shù)!的十進(jìn)制數(shù)的位數(shù)! 高位的高位的0無(wú)需顯示,但如果無(wú)需顯示,但如果32位數(shù)是全位數(shù)是全0則要顯示唯一的一位則要顯示唯一的一位0; 因此因此CX至少為至少為1 LAST: MOV EDX,0 ;被除數(shù)被除數(shù)64位、高半部分為位、高半部分為0 DIV EBX ;除法結(jié)果的除法結(jié)果的余數(shù)余數(shù)在在EDX PUSH DX ;保存余數(shù)保存余數(shù) ;余數(shù)本來(lái)存放在余數(shù)本來(lái)存放在32位的位的EDX; ;因?yàn)橛鄶?shù)因?yàn)橛鄶?shù) h
17、?折半查找算法的流程折半查找算法的流程= 例在例在有序表有序表中用中用折半查找折半查找法法(二分法二分法)查找指查找指定元素定元素a(關(guān)鍵字關(guān)鍵字)。 STACKSG SEGMENT STACK S DW 64 DUP(ST) STACKSG ENDS DATA SEGMENT BUF DB 30H,31H,32H,33H,34H,35H,36H,37H, 38H,39H,41H,42H,43H,44H,45H ;有序表有序表 COUNT EQU $-BUF ;表項(xiàng)數(shù)表項(xiàng)數(shù) CHAR DB ? ;要查找的關(guān)鍵字要查找的關(guān)鍵字 MARK DW 0 ;查找次數(shù)查找次數(shù) PROMPT DB NO F
18、OUND$ ;未找到:提示信息未找到:提示信息 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DW:DATA,SS:STACKSG MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,1 ;輸入要查找數(shù)的字符輸入要查找數(shù)的字符 INT 21H MOV CHAR,AL ;保存要找的數(shù)保存要找的數(shù) LEA SI,BUF ;表起始地址,初始化:區(qū)間表起始地址,初始化:區(qū)間下限下限(左)(左) MOV CX,COUNT ;數(shù)據(jù)個(gè)數(shù)數(shù)據(jù)個(gè)數(shù) MOV DX,SI ADD DX,CX ;最后一個(gè)數(shù)的地址最后一個(gè)數(shù)的地址加加1 MOV DI,DX
19、 ;初始化:區(qū)間初始化:區(qū)間上限上限(右)(右) MOV DX,0 ;查找次數(shù):初始化為查找次數(shù):初始化為0CMP AL,SI ;判斷:是否等于判斷:是否等于下邊界下邊界 JB NOFID ;小于最小數(shù):找不到小于最小數(shù):找不到 JE FOUND ;恰好等于最小數(shù)、找到恰好等于最小數(shù)、找到 CMP AL,DI-1 ;判斷:判斷:上邊界上邊界元素元素 JA NOFID ;大于最大數(shù):找不到大于最大數(shù):找不到 JE FOUND ;恰好等于最大數(shù)、找到恰好等于最大數(shù)、找到 MOV DX,1 ; 統(tǒng)計(jì):查找次數(shù)、準(zhǔn)備:折半統(tǒng)計(jì):查找次數(shù)、準(zhǔn)備:折半 MOV AL,CHAR ;要查找的數(shù)要查找的數(shù) C1
20、:MOV BX,SI ;準(zhǔn)備:準(zhǔn)備:折半折半 ADD BX,DI SHR BX,1 ;折半、除以折半、除以2 CMP AL,BX ;比較:關(guān)鍵字與中間元素比較:關(guān)鍵字與中間元素 JZ FOUND ;恰好等于中間元素:找到恰好等于中間元素:找到 PUSHF ;保留保留CMP AL,BX的狀態(tài)的狀態(tài) CMP BX,SI ;中間指針下限嗎?中間指針下限嗎? JZ NOFID ;是:找不到、查找結(jié)束是:找不到、查找結(jié)束 POPF ;恢復(fù)恢復(fù)CMP AL,BX的狀態(tài)的狀態(tài) JL LESS ;關(guān)鍵字可能在左半?yún)^(qū)關(guān)鍵字可能在左半?yún)^(qū) MOV SI,BX ;關(guān)鍵字可能在關(guān)鍵字可能在右半?yún)^(qū):調(diào)整下限右半?yún)^(qū):調(diào)整下
21、限 JMP SHORT NEXT LESS: MOV DI,BX ;左半?yún)^(qū):調(diào)整上限左半?yún)^(qū):調(diào)整上限 NEXT: INC DX ;查找次數(shù)加查找次數(shù)加1 JMP C1 NOFID: LEA DX,PROMPT ;顯示未找到提示信息顯示未找到提示信息 MOV AH,9 INT 21H JMP SHORT EXIT FOUND: MOV MARK,DX ;保存查找次數(shù)保存查找次數(shù) PUSH DX MOV AH,2 ;顯示找到的數(shù)顯示找到的數(shù) MOV DL,BX INT 21H MOV CL,10;查找次數(shù)不超過(guò)查找次數(shù)不超過(guò)99次次 POP AX DIV CL ;把查找次數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)把查找次數(shù)
22、轉(zhuǎn)換成十進(jìn)制數(shù) OR AX,3030H ;轉(zhuǎn)換成轉(zhuǎn)換成ASCII碼碼 MOV DL,AL PUSH AXMOV AH,2;顯示查找次數(shù)的高位顯示查找次數(shù)的高位 INT 21H POP AX MOV DL,AH MOV AH,2;顯示查找次數(shù)的低位顯示查找次數(shù)的低位 INT 21H EXIT: MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END MAIN例例:查找查找(有序表有序表) 對(duì)半查找對(duì)半查找 從從BUF開始的數(shù)據(jù)區(qū)存有一個(gè)開始的數(shù)據(jù)區(qū)存有一個(gè)有序有序數(shù)列。查詢數(shù)列。查詢其中是否有一個(gè)數(shù)等于從鍵盤上輸入位于存儲(chǔ)其中是否有一個(gè)數(shù)等于從鍵盤上輸入位于存儲(chǔ)
23、單元單元KEY的數(shù)。的數(shù)。 DISP MACRO VAR MOV AH,9 MOV DX,OFFSET VAR INT 21H ENDM DATA SEGMENT USE16 BUF DB ABCDEFGHIJKLMNOPQRSTUVWXYZ COUNT EQU $-BUF KEY DB ? LAST DW BUF NEXT DW BUF+COUNT MESG DB Input.$ OK DB -FOUND!$ NO DB -NOT FOUND!$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEG:MOV AX,DATA MOV DS,AX D
24、ISP MESG MOV AH,1 INT 21H MOV KEY,AL AGAIN:MOV BX,LAST ADD BX,NEXT RCR BX,1 MOV AL,KEY CMP AL,BX JE FOUND CMP BX,LAST JE FAIL CMP AL,BX JNC GREAT MOV NEXT,BX JMP AGAIN GREAT:MOV LAST,BX JMP AGAIN FOUND:DISP OK JMP EXIT FAIL:DISP NO EXIT:MOV AH,4CH INT 21H CODE ENDS END BEG 例例.自定義一個(gè)按自定義一個(gè)按降序排列降序排列的字型
25、數(shù)組,在數(shù)組中的字型數(shù)組,在數(shù)組中查查找找指定的數(shù)字,若找到在屏幕上顯示指定的數(shù)字,若找到在屏幕上顯示“Duplication!”,否則插入該數(shù)字在適當(dāng)位置并,否則插入該數(shù)字在適當(dāng)位置并繼續(xù)保持?jǐn)?shù)組有序,且顯示繼續(xù)保持?jǐn)?shù)組有序,且顯示“Inserted!”。 DATA SEGMENT PRT DB Duplication,$ INS DB Inserted!,$ X DW ? ;為數(shù)據(jù)移動(dòng)預(yù)留空間為數(shù)據(jù)移動(dòng)預(yù)留空間 TAB DW 889,754,589,546,52,31 ;降序數(shù)組降序數(shù)組 CT EQU ($-TAB)/2 ;元素個(gè)數(shù)元素個(gè)數(shù) N DW 234 ;要插入的數(shù)字要插入的數(shù)字 D
26、ATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,TAB;裝入表首址裝入表首址 MOV AX,N;要插入的數(shù)字要插入的數(shù)字 MOV CX,CT;個(gè)數(shù)個(gè)數(shù)CLD REPNZ SCASW JE A;找到轉(zhuǎn)找到轉(zhuǎn) MOV SI,0 COMPARE:CMP TABSI,AX ;比較比較 JL B ;小于轉(zhuǎn)小于轉(zhuǎn) MOV BX,TABSI ;元素前移為插入的數(shù)字騰位置元素前移為插入的數(shù)字騰位置 MOV TAB
27、SI-2,BX ADD SI,2 ;修改地址指針修改地址指針 JMP SHORT COMPARE A: MOV AH,9H LEA DX,PRT INT 21H JMP EXIT B: MOV TABSI-2,AX ;插入元素插入元素 MOV AH,9 LEA DX,INS INT 21H EXIT: RET MAIN ENDP CODE ENDS END MAIN例例:排序排序 例自定義一個(gè)例自定義一個(gè)ARY字型數(shù)組,元素個(gè)數(shù)為字型數(shù)組,元素個(gè)數(shù)為CT。請(qǐng)編制程序使該數(shù)組中的數(shù)據(jù)按。請(qǐng)編制程序使該數(shù)組中的數(shù)據(jù)按降序排降序排列列。起泡排序法流程圖起泡排序法流程圖Y Y置地址指針置地址指針初始化
28、外循環(huán)次數(shù)初始化外循環(huán)次數(shù)DIDI置內(nèi)循環(huán)次數(shù)置內(nèi)循環(huán)次數(shù)CXCXA Ai iAAi i1 1? ?A Ai iAAi i1 1修改地址指針指向下一元素修改地址指針指向下一元素修改內(nèi)循環(huán)次數(shù)修改內(nèi)循環(huán)次數(shù)CXCX1CX1CXCXCX0 0?Y YN NN N修改外循環(huán)次數(shù)修改外循環(huán)次數(shù)DIDI1DI1DIDIDI0 0?N NY Y 開始開始 結(jié)束結(jié)束 STACKSGSEGMENT STACK S DW 64 DUP(ST) STACKSG ENDS DATA SEGMENT ARY DW 5,7,1,4,3,6,9,8,2 ;數(shù)組,流程圖中為數(shù)組,流程圖中為A CT EQU ($-ARY)/
29、2 ;元素個(gè)數(shù)元素個(gè)數(shù) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSG MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV DI,CT-1;初始化外循環(huán)次數(shù)初始化外循環(huán)次數(shù) LOP1: MOV CX,DI;置內(nèi)循環(huán)次數(shù)置內(nèi)循環(huán)次數(shù) MOV BX,0 ;置地址指針置地址指針 LOP2:MOV AX,ARYBX CMP AX,ARYBX+2;兩數(shù)比較兩數(shù)比較 JGE CONT ;次序正確轉(zhuǎn)次序正確轉(zhuǎn) ;次序不正確互換位置次序不正確互換位置 XCHG AX,ARYBX+2 MOV ARYBX,AX CONT
30、:ADD BX,2 ;修改地址指針修改地址指針 LOOP LOP2;內(nèi)循環(huán)控制內(nèi)循環(huán)控制 DEC DI ;修改外循環(huán)次數(shù)修改外循環(huán)次數(shù) JNZ LOP1 ;外循環(huán)控制外循環(huán)控制 MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END MAIN 這種算法的缺點(diǎn)是無(wú)論是否早已排好序,但都這種算法的缺點(diǎn)是無(wú)論是否早已排好序,但都必須運(yùn)行到(必須運(yùn)行到(CT1)遍才結(jié)束。為了提高效)遍才結(jié)束。為了提高效率可以修改此算法,這里不再討論。率可以修改此算法,這里不再討論。例例:排序從小到大排序從小到大 排序排序是數(shù)據(jù)處理中較為常見(jiàn)的問(wèn)題。所謂排序,是數(shù)據(jù)處理中較為常見(jiàn)的問(wèn)題
31、。所謂排序,就是對(duì)若干毫無(wú)規(guī)則的數(shù)據(jù)進(jìn)行整理,按其數(shù)就是對(duì)若干毫無(wú)規(guī)則的數(shù)據(jù)進(jìn)行整理,按其數(shù)值大小,從小到大或者從大到小重新排列,使值大小,從小到大或者從大到小重新排列,使它們成為一組有序的數(shù)列,為以后的快速查詢、它們成為一組有序的數(shù)列,為以后的快速查詢、數(shù)據(jù)增刪作準(zhǔn)備。數(shù)據(jù)增刪作準(zhǔn)備。 假設(shè)內(nèi)存中從假設(shè)內(nèi)存中從BUF單元開始有若干單字節(jié)無(wú)符單元開始有若干單字節(jié)無(wú)符號(hào)數(shù),要求把它們按其數(shù)值大小,號(hào)數(shù),要求把它們按其數(shù)值大小,從小到大從小到大重重新排列。新排列。 算法分析算法分析 (1)排序的關(guān)鍵性措施是進(jìn)行數(shù)的比較。設(shè)置排序的關(guān)鍵性措施是進(jìn)行數(shù)的比較。設(shè)置一個(gè)交換標(biāo)志一個(gè)交換標(biāo)志(FLAG單元單元),每一輪比較開始,每一輪比較開始,首先令交換標(biāo)志首先令交換標(biāo)志FLAC0,然后進(jìn)行若干次,然后進(jìn)行若干次相鄰兩單元的數(shù)的比較,第相鄰兩單元的數(shù)的比較,第1輪共進(jìn)行輪共進(jìn)行N-1次次比較,即比較比較,即比較BUF和和BUF+1單元的數(shù),比較單元的數(shù),比較BUF +1和和BUF + 2單元的數(shù),比較單元的數(shù),比較BUF + 2和和BUF + 3單元的數(shù)單元的數(shù) 。每次比較之后,把小。每次比較之后,把小數(shù)存入低地址單元,大數(shù)存入高地址單元。數(shù)存入低地址單元,大數(shù)存入高地址單元。 排序過(guò)程中,只要發(fā)生一次數(shù)據(jù)交換,就令交排序過(guò)程中,只要發(fā)生一次數(shù)據(jù)交換,就令交換標(biāo)
溫馨提示
- 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èi)生經(jīng)濟(jì)管理系統(tǒng)》課件
- 寒假自習(xí)課 25春初中道德與法治八年級(jí)下冊(cè)教學(xué)課件 第一單元 大單元整體設(shè)計(jì)
- 銀行宣傳推廣總結(jié)
- 《皮膚生理學(xué)》課件
- 六一活動(dòng)方案范文六篇
- 八年級(jí)英語(yǔ)上冊(cè)(人教版)期末專項(xiàng)練習(xí)-閱讀理解之記敘文20篇 含答案 含解析
- 游戲數(shù)據(jù)分析模型-洞察分析
- 虛擬現(xiàn)實(shí)顯示技術(shù)演進(jìn)-洞察分析
- 水下作業(yè)安全評(píng)估-洞察分析
- 通信設(shè)備軟件知識(shí)產(chǎn)權(quán)保護(hù)-洞察分析
- 環(huán)衛(wèi)清掃保潔、垃圾清運(yùn)及綠化服務(wù)投標(biāo)方案(技術(shù)標(biāo) )
- 13-4管道(設(shè)備)沖洗消毒試驗(yàn)記錄
- 農(nóng)田臨水臨電施工方案范本
- 千字文毛筆楷書描紅字帖-米字格A4版
- 重金屬礦山生態(tài)治理與環(huán)境修復(fù)技術(shù)進(jìn)展
- HR主題分享9-繪制學(xué)習(xí)地圖
- 成長(zhǎng)需要挫折演講稿(20篇)
- 職工學(xué)歷教育補(bǔ)貼申請(qǐng)書
- GB/T 42915-2023銅精礦及主要含銅物料鑒別規(guī)范
- 高三英語(yǔ)二輪復(fù)習(xí)讀后續(xù)寫之彈鋼琴的媽媽講義
- s7et200mp自動(dòng)化系統(tǒng)手冊(cè)
評(píng)論
0/150
提交評(píng)論