当前位置: 代码迷 >> 汇编语言 >> 编译语言实验多个字符串排序
  详细解决方案

编译语言实验多个字符串排序

热度:338   发布时间:2016-05-02 04:53:22.0
汇编语言实验多个字符串排序
题目要求是:编写程序实现输入10个学生的姓名存放在变量student_name,按升序排列姓名,并输出到屏幕。
下面是我写的程序,但是运行后会显示乱码,求帮助!!!(本人新生,求高手指教)

date segment
    student_name    db 'dfese$'
                    db 'apryu$'
                    db 'hfteu$'
                    db 'kyutr$'
                    db 'sarmk$'
                    db 'kluiy$'
                    db 'dgrhy$'
                    db 'vdbni$'
                    db 'luydg$'
                    db 'hkaer$'
date ends
;stacks segment
;    db 20 dup(?)
;    tos label bytle
;stacks ends
code segment
    assume    ds:date,cs:code,es:date
start:
    mov ax,date
    mov ds,ax
    mov es,ax

    
    mov cx,10    ;定义最外层循环变量为10
loop1:
    mov bp,cx    ;给CX做备?
    mov bx,0    ;初始化bx
loop2:
    mov al,student_name[bx]
    cmp al,student_name[bx+1*6]        ;目前只能对每个字符串的第一个元素进行比较
    ja change

continue:
    add bx,6
    loop loop2
    mov cx,bp
    loop loop1
    jmp end_change
    
change:        ;进行交换字符串
    mov sp,bx    ;给bx的值做备份
    mov dx,cx    ;给CX做备份
    mov cx,5    ;每个字符串5个字符
    
loop3:
    mov al,student_name[bx]
    xchg student_name[bx+1*6],al
    mov student_name[bx],al
    inc bx
    loop loop3
    mov cx,dx    ;还原CX的值
    mov bx,sp    ;还原BX的值

    jmp continue
    
end_change:
    mov bx,0
    mov cx,10
printf:
next:
    mov dl,student_name[bx]    ;显示一个字符
    mov ah,2
    int 21h
    
    add bx,1                ;为显示下一个字符做准备
  相关解决方案