有人问类似的问题,俺既然写出来,不妨发出来,后来的人也许就不用问了。
奇怪的是,代码选项里没有汇编
data segment
number dw 10 dup ( 0 ) ;输入的数据
inputmsg db 'please input:$'
outputmsg db 'after sort', 0dh, 0ah, '$'
data ends
stack segment stack para 'stack' stack
sta db 256 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax, data
mov ds, ax
;输入
mov cx, 10 ;输入10个数
mov si, offset number
begin:
call printstr
call inputval
inc si
inc si
loop begin
;排序开始,用冒泡排序
mov cx,9*2
mov si,offset number
Outer:
sub bx,bx
Inner:
mov ax,[bx+si]
cmp ax,[bx+si+02h]
jng Changed
push [bx+si+02h]
mov [bx+si+02h],ax
pop [bx+si]
Changed:
inc bx
inc bx
cmp bx,cx
jl Inner
dec cx
dec cx
jg Outer
;排序结束
;输出
mov ah, 9
lea dx, outputmsg
int 21h
mov cx, 10 ;输出10个数
mov si, offset number
begin1:
call printval
inc si
inc si
loop begin1
mov ah, 4ch
int 21h
;输入子程序,输入一个数据到WORD PTR ds:[si]中,使用前要将ds:si设置好
inputval proc
;local inputvalx,endinputx
push ax
push bx
push cx
push dx
mov cx,6
mov ax,0
mov word ptr ds:[ si ],ax
inputvalx:
mov ah,01h
int 21h
cmp al,13
jz endinputx
cmp al,'0'
jb nextinput
cmp al,'9'
ja nextinput
push ax
mov ax, word ptr ds:[ si ]
mov bx,10
mul bx
mov bx,ax
pop ax
mov ah,0
sub al,30h
add bx,ax
mov word ptr ds:[ si ],bx
nextinput:loop inputvalx
endinputx:
mov ah,02
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
inputval endp
;打印字符串子程序
printstr proc
push ax
push bx
push cx
push dx
lea dx, inputmsg
mov ah,09h
int 21h
mov ah,02h
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
printstr endp
;打印数字子程序,打印ds:[si]
printval proc
push ax
push bx
push cx
push dx
mov ax, word ptr ds:[si]
mov bx,10
mov dx,0
mov cx,5
printtemp2:
div bx
push dx
mov dx,0
loop printtemp2
pop ax
mov bh,al
pop ax
mov bl,al
pop ax
mov ch,al
pop ax
mov cl,al
pop ax
push ax
cmp bh,0
ja printt1
cmp bl,0
ja printt2
cmp ch,0
ja printt3
cmp cl,0
ja printt4
jmp printt5
printt1:
mov dl,bh
add dl,30h
mov ah,02h
int 21h
printt2:
mov dl,bl
add dl,30h
mov ah,02h
int 21h
printt3:
mov dl,ch
add dl,30h
mov ah,02h
int 21h
printt4:
mov dl,cl
add dl,30h
mov ah,02h
int 21h
printt5: pop ax
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
printval endp
code ends
end start
number dw 10 dup ( 0 ) ;输入的数据
inputmsg db 'please input:$'
outputmsg db 'after sort', 0dh, 0ah, '$'
data ends
stack segment stack para 'stack' stack
sta db 256 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax, data
mov ds, ax
;输入
mov cx, 10 ;输入10个数
mov si, offset number
begin:
call printstr
call inputval
inc si
inc si
loop begin
;排序开始,用冒泡排序
mov cx,9*2
mov si,offset number
Outer:
sub bx,bx
Inner:
mov ax,[bx+si]
cmp ax,[bx+si+02h]
jng Changed
push [bx+si+02h]
mov [bx+si+02h],ax
pop [bx+si]
Changed:
inc bx
inc bx
cmp bx,cx
jl Inner
dec cx
dec cx
jg Outer
;排序结束
;输出
mov ah, 9
lea dx, outputmsg
int 21h
mov cx, 10 ;输出10个数
mov si, offset number
begin1:
call printval
inc si
inc si
loop begin1
mov ah, 4ch
int 21h
;输入子程序,输入一个数据到WORD PTR ds:[si]中,使用前要将ds:si设置好
inputval proc
;local inputvalx,endinputx
push ax
push bx
push cx
push dx
mov cx,6
mov ax,0
mov word ptr ds:[ si ],ax
inputvalx:
mov ah,01h
int 21h
cmp al,13
jz endinputx
cmp al,'0'
jb nextinput
cmp al,'9'
ja nextinput
push ax
mov ax, word ptr ds:[ si ]
mov bx,10
mul bx
mov bx,ax
pop ax
mov ah,0
sub al,30h
add bx,ax
mov word ptr ds:[ si ],bx
nextinput:loop inputvalx
endinputx:
mov ah,02
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
inputval endp
;打印字符串子程序
printstr proc
push ax
push bx
push cx
push dx
lea dx, inputmsg
mov ah,09h
int 21h
mov ah,02h
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
printstr endp
;打印数字子程序,打印ds:[si]
printval proc
push ax
push bx
push cx
push dx
mov ax, word ptr ds:[si]
mov bx,10
mov dx,0
mov cx,5
printtemp2:
div bx
push dx
mov dx,0
loop printtemp2
pop ax
mov bh,al
pop ax
mov bl,al
pop ax
mov ch,al
pop ax
mov cl,al
pop ax
push ax
cmp bh,0
ja printt1
cmp bl,0
ja printt2
cmp ch,0
ja printt3
cmp cl,0
ja printt4
jmp printt5
printt1:
mov dl,bh
add dl,30h
mov ah,02h
int 21h
printt2:
mov dl,bl
add dl,30h
mov ah,02h
int 21h
printt3:
mov dl,ch
add dl,30h
mov ah,02h
int 21h
printt4:
mov dl,cl
add dl,30h
mov ah,02h
int 21h
printt5: pop ax
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dl,13
int 21h
mov dl,10
int 21h
pop dx
pop cx
pop bx
pop ax
ret
printval endp
code ends
end start