非我莫属 发表于 2012-11-12 19:41:19

排序编程求指导

小甲鱼,我看到了20了,可是在另一本教材上遇到一个问题,不知道如何编,希望小甲鱼指导一下。问题:在以BUF为首址的字存储区中存放有N个带符号数,现要将它们按由大到小的顺序排列后存放回原存储区中,如何编程呢?

s0512 发表于 2012-11-16 11:12:06

这个我喜欢。。。。等下写后上传!嘿嘿!!

s0512 发表于 2012-11-16 17:28:47

assume cs:code,ds:data
data segment
    dw 12,3,56,58,6,32,20,5
s_s dw 16 dup (0)
data ends

code segment
start:
            mov ax,data
            mov ds,ax
            mov ax,0b800h
            mov es,ax
            
            mov bx,0
            mov si,0
            mov di,0
            
            ;-------------------寄存器初始化
            call dtoc
            call show_str
            ;-------------------显示未排序字符
            mov cx,8
;xh:         call paixu
;            loop xh
            ;--------------------排序完成
            call dtoc
            call show_str
            ;--------------------显示已排序字符
            mov ah,01
            int 21h
;P

s0512 发表于 2012-11-16 18:32:14


记得结贴给分哈{:5_101:}

s0512 发表于 2012-11-16 18:33:57

assume cs:code,ds:data
data segment
dw 12,3,56,58,6,32,20,5
s_s dw 16 dup (0)
data ends

code segment
start:
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax

mov bx,0
mov si,0
mov di,0

;-------------------寄存器初始化
call dtoc
call show_str
;-------------------显示未排序字符
mov cx,7
p_p: call paixu
loop p_p
;--------------------排序完成
call dtoc
mov di,160
call show_str
;--------------------显示已排序字符
mov ah,01
int 21h

;========================Show_str显示字符↓========================
show_str:
push si
push di
push bx
;---------------------保存寄存器数据
mov bx,offset s_s
s_l: mov al,ds:
cmp al,0
je s_esc
mov es:,al
inc di
mov es:,2
inc di
inc bx
jmp s_l
s_esc: pop bx
pop di
pop si
ret
;=========================DToC字符换ASCII↓===========================
dtoc: ;把DATA数据中的8WROD数据转成
;字符,一次一个,循环8次
;写到要要s_s空间中,以0结尾
push bx
push cx
push si
push di
push bp

mov bx,10
;---------------------除数
xor di,di ;0
xor bp,bp
mov cx,8
mov bp,offset s_s
d_zxh: mov ax,ds:

;---------------------主循环

push cx

xor dx,dx
d_xh: div bx
;cmp al,0
;je d_esc
add dx,30h
inc di

push dx
xor dx,dx
cmp al,0
jne d_xh

d_esc:

mov cx,di
d_cz: pop ax
mov ds:,ax

add bp,1
loop d_cz
mov byte ptr ds:,3
add bp,1
xor di,di

pop cx
add si,2
loop d_zxh
pop bp
pop di
pop si
pop cx
pop bx
ret
;=========================PAIXU排序↓=============================
paixu:
push si
push cx
mov cx,7
xh:

mov ax,ds:
mov dx,ds:2
cmp ax,dx
ja p_jh
jmp p_esc
p_jh: mov ds:2,ax
mov ds:,dx
p_esc:





add si,2
loop xh
pop cx
pop si
ret ;
code ends
end start
纯手写的哦~~
多给些分我也不会介意!!{:5_95:}
页: [1]
查看完整版本: 排序编程求指导