📄 zy5.asm
字号:
DATA SEGMENT
A DW 10 DUP(?)
MESS DB "Input array: $"
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE, DS:DATA
START:
PUSH DS
SUB AX, AX
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV AH, 9
LEA DX, MESS
INT 21H
LEA SI, A
MOV CX, 10
INPUT:
PUSH CX
CALL DECIBIN
MOV [SI], BX
ADD SI, 2
POP CX
LOOP INPUT
CALL CRLF
CALL SORT
LEA SI, A
MOV CX, 10
OUTPUT:
MOV BX, [SI]
CALL BINIDEC
CALL CRLF
ADD SI, 2
LOOP OUTPUT
RET
MAIN ENDP
SORT PROC NEAR
MOV CX, 10
DEC CX
LOOP1:
MOV DI, CX
MOV BX, 0
LOOP2:
MOV AX, A[BX]
CMP AX, A[BX+2]
JL CONTINUE
XCHG AX, A[BX+2]
MOV A[BX], AX
CONTINUE:
ADD BX, 2
LOOP LOOP2
MOV CX, DI
LOOP LOOP1
RET
SORT ENDP
DECIBIN PROC NEAR
MOV BX, 0
NEWCHAR:
MOV AH, 1
INT 21H
SUB AL, 30H
CMP AL, 0
JB EXIT1
CMP AL, 9
JA EXIT1
CBW
XCHG AX, BX
MOV CX, 10D
MUL CX
XCHG AX, BX
ADD BX, AX
JMP NEWCHAR
EXIT1:
RET
DECIBIN ENDP
BINIDEC PROC NEAR
CMP BX, 0
JNE NZ
MOV DL, '0'
MOV AH, 2
INT 21H
RET
NZ:
PUSH BX
PUSH CX
PUSH SI
PUSH DI
MOV DI, 0
MOV CX, 10000D
CALL DEC_DIV
MOV CX, 1000D
CALL DEC_DIV
MOV CX, 100D
CALL DEC_DIV
MOV CX, 10D
CALL DEC_DIV
MOV CX, 1
CALL DEC_DIV
POP DI
POP SI
POP CX
POP BX
RET
BINIDEC ENDP
DEC_DIV PROC NEAR
MOV AX, BX
MOV DX, 0
DIV CX
MOV BX, DX
MOV DL, AL
ADD DL, 30H
CMP DL, '0'
JE DONE
MOV DI, 1
DONE:
CMP DI, 1
JNE EXIT2
MOV AH, 2
INT 21H
EXIT2:
RET
DEC_DIV ENDP
CRLF PROC NEAR
MOV DL, 0DH
MOV AH, 2
INT 21H
MOV DL, 0AH
INT 21H
RET
CRLF ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -