现在的位置: 首页 > 综合 > 正文

汇编输入排序输出示例

2014年02月06日 ⁄ 综合 ⁄ 共 2779字 ⁄ 字号 评论关闭

有人问类似的问题,俺既然写出来,不妨发出来,后来的人也许就不用问了。

奇怪的是,代码选项里没有汇编

 

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
    

 

抱歉!评论已关闭.