汇编语言程序设计一个小程序
在数据段的变量BUF中有10个字节型无符号的十进制数,它们以无序的方式存放着,设计一个程序将这些数据按由小到大的方式排列起来,并在屏幕上输出排好序的这10个数。(两数之间用空格分开)
2018-06-15 18:07
2018-06-18 08:07
2018-06-18 21:15
程序代码:
CODE SEGMENT
ASSUME CS:CODE
BUF DB 12,34,07,78,65,41,99,87,66,246
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 PROC NEAR
CLD
NEXT:
PUSH CX
LODSB
MOV AH,0
CALL PRINT_AX;印出AX值
MOV AH,2
MOV DL,20H ;显示空白
INT 21H
POP CX
LOOP NEXT
RET
DSPBCD ENDP
;===============================
;输出AX的ASCII到屏幕
PRINT_AX PROC NEAR
MOV CX,0 ;清0
MOV BX,10 ;除法准备
PPAX1:
MOV DX,0 ;清0
DIV BX ;AX /10 ,若1234 ,除10后,DL得余数4,
PUSH DX ;保存, AX=1234,依次保存4,3,2,1
INC CX ;累加个数
OR AX,AX ;是否已除尽
JNZ PPAX1 ;不是,再除
MOV BL,CL ;存个数
PPAX2:
POP DX ;后入先出,先印出第一数,然后第二....
OR DL,30H ;转ASCII
MOV AH,2 ;存入字串缓冲
INT 21H
LOOP PPAX2 ;下一个
RET
PRINT_AX ENDP
;===============================
; 单个字符串(或者字节数组)内部的排序(冒泡排序)
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
[此贴子已经被作者于2018-6-19 06:43编辑过]
2018-06-19 06:41
2018-06-20 17:54
2018-11-02 21:34
2018-11-13 13:03
2018-11-27 19:16