?? 輸入一組十進制數,按從小到大到順序輸出。.txt
字號:
輸入一組十進制數,按從小到大到順序輸出。
輸入:126,78,456,3,890 (注意“,”這個逗號)
輸出:3,78,126,456,890
STACK SEGMENT STACK
DB 128 DUP(0)
STACK ENDS
DATA SEGMENT
ARR DW 50 DUP(?) ;存放輸入的數
STR DW 50 DUP(?) ;輸出字符串
COUNT DW ? ;輸入數的個數
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SI,ARR
MOV DI,0 ;DI用來標志是否輸入了回車
L1: CALL DCB ;將輸入的十進制數化為二進制存在BX
INC COUNT
MOV [SI],BX
CMP DI,0 ;有回車是,輸入結束
JNZ L2
ADD SI,2
JMP L1
L2: CALL BBB ;回車換行
SUB COUNT,1 ;將輸入個數減1
CALL SORTP ;采用冒泡排序法
ADD COUNT,1 ;輸入個數加1,即為原輸入個數
MOV CX,COUNT
LEA DI,ARR
LEA SI,STR
L3: MOV AX,[DI]
CALL BCD ;將AX中的進制數化為十進制依次存在[SI]
ADD DI,2
LOOP L3
DEC SI ;去掉最后一個","號
MOV [SI], BYTE PTR 0DH
MOV [SI+1], BYTE PTR 0AH
MOV [SI+2], BYTE PTR '$'
LEA DX,STR
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
BBB PROC
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
BBB ENDP
DCB PROC
PUSH AX
PUSH CX
MOV BX,0
NEW: MOV AH,1
INT 21H
CMP AL,',' ;如果是分號,則輸入一個十進制數結束
JZ NDIG
CMP AL,0DH ;如果是回車,則置DI為1輸入結束
JNZ NHC
MOV DI,1
NDIG: POP CX
POP AX
RET
NHC: CMP AL,30H
JL NDIG
CMP AL,39H
JG NDIG
AND AL,0FH
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEW
DCB ENDP
BCD PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,10
MOV CX,0
R1: MOV DX,0
DIV BX
PUSH DX
INC CX
OR AX,AX
JNZ R1
R2: POP AX
CMP AL,10
JB R3
ADD AL,7H
R3: ADD AL,30H
MOV [SI],AL
INC SI
LOOP R2
MOV [SI],BYTE PTR ',' ;每個數后放一個','號
INC SI
POP DX
POP CX
POP BX
POP AX
RET
BCD ENDP
SORTP PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DI
PUSH SI
MOV DI,OFFSET ARR
MOV BX,-1 ;設標志-1
LOOPOUT:CMP BX,-1
JNE SORTEND ;標志不為-1,則排序完成
XOR BX,BX ;0->BX
MOV CX,COUNT
MOV SI,DI
LOOPIN: MOV AX,[SI]
CMP AX,[SI+2] ;兩兩比較
JLE NOCHANGE ;如果<=則不交換
XCHG [SI+2],AX ;否則交換
MOV [SI],AX
MOV BX,-1 ;置BX為-1,標示有交換
NOCHANGE:ADD SI,2
LOOP LOOPIN ;判斷本次排序是否完成
JMP LOOPOUT
SORTEND:POP SI
POP DI
POP CX
POP BX
POP AX
RET
SORTP ENDP
CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -