彙編基礎練習題17:綜合以上子函式,完成輸入八個數並排序重新輸出
阿新 • • 發佈:2018-12-30
彙編基礎練習題17:
綜合以上子函式,完成如下操作:
(1)用提示資訊提示使用者輸入8個數,每個數輸入後換行,在下一行輸入下一個數;
(2)輸入後在新的一行顯示這8個數;
(3)然後對這8個數排序;
(4)在新的一行顯示排序後的8個數。
Please input 8 number:
23a
46c
。。。
Before sort,the 8 nunber is: 23,46,…
After sort,the 8 nunber is: …
編譯工具:Masm for Windows 整合實驗環境2012.5
(附帶一個工具下載地址https://download.csdn.net/download/qq_36931762/10825773
有需要可以去下載)
程式碼思路:
---------------------------------------可愛的程式碼區別線----------------------------------
DATAS SEGMENT NUM DW 8 DUP(0) SINPUT DB 'Please input 8 number:$' SOUT1 DB 'Before sort,the 8 nunber is:$' SOUT2 DB 'After sort,the 8 nunber is:$' DATAS ENDS STACKS SEGMENT ;此處輸入堆疊段程式碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV SI,OFFSET SINPUT CALL COUTSTRING CALL COUTENTER MOV BX,0 ML: CMP BX,16 JE MEN CALL PIN MOV SI,OFFSET NUM MOV [SI+BX],AX CALL COUTENTER ADD BX,2 JMP ML MEN: MOV SI,OFFSET SOUT1 CALL COUTSTRING MOV BX,0 ML2: CMP BX,16 JE MEN2 MOV SI,OFFSET NUM MOV AX,[SI+BX] CALL PRINTAX CMP BX,14 JE NODOUHAO1 MOV DL,',' MOV AH,2 INT 21H NODOUHAO1: ADD BX,2 JMP ML2 MEN2: CALL COUTENTER MOV SI,OFFSET SOUT2 CALL COUTSTRING MOV BP,OFFSET NUM MOV SI,OFFSET NUM MOV DI,16;數字個數 CALL SORT MOV BX,0 ML3: CMP BX,DI JE MEN3 MOV AX,[NUM+BX] CALL PRINTAX CMP BX,14 JE NODOUHAO2 MOV DL,',' MOV AH,2 INT 21H NODOUHAO2: ADD BX,2 JMP ML3 MEN3: MOV AH,4CH INT 21H COUTSTRING PROC PUSH DX COUTL: MOV DL,[SI] CMP DL,'$' JE COUTEN MOV AH,2 INT 21H ADD SI,1 JMP COUTL COUTEN: POP DX RET COUTSTRING ENDP PIN PROC PUSH BX PUSH CX PUSH DX MOV CX,0 MOV DL,10 CIN: MOV AH,1 INT 21H SUB AL,48 MOV AH,0 MOV BX,AX MOV AX,CX CMP BX,9 JA EN CMP BX,0 JB EN MUL DL ADD AX,BX MOV CX,AX JMP CIN EN: POP DX POP CX POP BX RET PIN ENDP PRINTAX PROC PUSH BX PUSH CX PUSH DX MOV BL,10 MOV CL,0 CMP AX,10 JB PRINTF W: DIV BL PUSH AX INC CL MOV AH,0 CMP AX,0 JA W p: POP DX DEC CL MOV DL,DH ADD DL,48 MOV AH,2 INT 21H CMP CL,0 JNE P POP DX POP CX POP BX RET PRINTF: MOV DL,AL ADD DL,48 MOV AH,2 INT 21H POP DX POP CX POP BX RET PRINTAX ENDP COUTENTER PROC PUSH AX PUSH DX ;回車換行 MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H POP DX POP AX RET COUTENTER ENDP SORT PROC PUSH SI PUSH BP PUSH DI PUSH DX PUSH CX PUSH BX SUB DI,2 SL1: CMP BP,DI JE SEN MOV AX,DI SUB AX,BP MOV BX,0 SL2: CMP BX,AX JE SSEN MOV CX,[SI+BX] MOV DX,[SI+BX+2] CMP CX,DX JNA SSSEN MOV [SI+BX],DX MOV [SI+BX+2],CX ADD BX,2 JMP SL2 SSSEN: ADD BX,2 JMP SL2 SSEN: ADD BP,2 JMP SL1 SEN: POP BX POP CX POP DX POP DI POP BP POP SI RET SORT ENDP CODES ENDS END START
--------------------------------------------程式碼區別線----------------------------------
輸出結果:
看不懂歡迎提問啦,也歡迎提出我程式碼中的問題和提出程式碼優化方案,大家一起學習嘛。
原創看過隨手點個贊吧!(雖然我也不太知道點贊有啥用emmm給點鼓勵總是好的)嘻嘻