DATAS SEGMENT
DB 2,5,6,8,3,7,4,9,2,6,1
DATAS ENDS
stack segment
dw 8 dup(0)
stack ends
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX , DATAS
MOV DS , AX
mov di , 0
mov ax , stack
mov ss , ax
mov sp , 10h
;输出原来排序
mov cx, 11
mov bx,0
call label2
;把DATAS中的数从小到大排序
mov cx , 11
mov si , 10
call SORT
;换行
mov dl, 10
MOV AH,6
inc di
INT 21H
mov dl, 13
MOV AH,6
INT 21H
;输出新排序
mov cx, 11
mov bx,0
call label2
MOV AH,4CH
INT 21H
;-------------------------------------------------------------------------------
;功能:将数据段中的数据由小到大排序
;参数:ds:si指向数据段,cx代表数据段的长度
;返回:ds:si指向数据段
;------------------------------------------------------------------------------
sort:
mov dx , cx
dec dx
sort_loop1:
push cx
dec cx
mov si , dx
sort_loop2:
mov al , ds:[si]
mov bl , ds:[si-1]
cmp al , bl
jnb s
mov ds:[si-1] , al
mov ds:[si] , bl
s:
dec si
loop sort_loop2
pop cx
loop sort_loop1
ret
;输出排序子程序
label2:
mov dl, [bx]
add dl, 30H
MOV AH,6
INT 21H
INC BX
loop label2
ret
;ret
CODES ENDS
END START
我在调试的中看见已经将数据段中的数据排好序,可就是输不出来,怎么回事呢?求助啊
汇编 排序 输出
------解决方案--------------------
堆栈开的好小
------解决方案--------------------
排序功能不对吧?看到的好像还是没排过的吗,输出,倒是有的唉。