汇编语言程序设计一个小程序
在数据段的变量BUF中有10个字节型无符号的十进制数,它们以无序的方式存放着,设计一个程序将这些数据按由小到大的方式排列起来,并在屏幕上输出排好序的这10个数。(两数之间用空格分开)
回复 2楼 Valenciax
CODE SEGMENTASSUME CS:CODE
BUF DB 12H,34H,07H,78H,65H,41H,99H,87H,66H,52H
N EQU $-BUF
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,BUF
MOV CX,N
CALL SORT
LEA SI,BUF
MOV CX,N
CALL DSPBCD
MOV AH,4CH
INT 21H
;===============================
DSPBCD:
PUSH AX
PUSH CX
PUSH DX
PUSH SI
CLD
@BCD1:
LODSB
ROR AL,4
PUSH AX
MOV DL,AL
AND DL,0FH
OR DL,30H
MOV AH,2
INT 21H
POP AX
ROR AL,4
MOV DL,AL
AND DL,0FH
OR DL,30H
MOV AH,2
INT 21H
MOV DL,'H'
INT 21H
MOV DL,32
INT 21H
MOV DL,32
INT 21H
LOOP @BCD1
POP SI
POP DX
POP CX
POP AX
RET
;===============================
; 单个字符串(或者字节数组)内部的排序(冒泡排序)
SORT PROC NEAR
; 串长度置入cx,串首地址置入 si
PUSH AX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
PUSH CX
POP DX
DEC DX
@SORTL1:
MOV CX,DX
MOV DI,SI
@SORTL2:
MOV AL,[DI+1]
CMP AL,[DI]
JA @SORTNEXT ; 无符号 升序
XCHG AL,[DI]
MOV [DI+1],AL
@SORTNEXT:
INC DI
LOOP @SORTL2
DEC DX
JNZ @SORTL1
POPF
POP DI
POP SI
POP DX
POP CX
POP AX
RET
SORT ENDP
;===============================================================
CODE ENDS
END START