首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2013-07-01 
汇编语言实验多个字符串排序题目要求是:编写程序实现输入10个学生的姓名存放在变量student_name,按升序排

汇编语言实验多个字符串排序
题目要求是:编写程序实现输入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                ;为显示下一个字符做准备


    mov dl,student_name[bx]
    cmp dl,'$'                ;判断是否到一个字符串末尾
    jne next
    add bx,6                ;为显示下一个字符串做准备
    
    mov dl,0ah    ;换行        
    mov dl,2h
    int 21h
    mov dl,0dh    ;回车
    mov dl,2h
    int 21h
    
    loop printf
    
    mov ax,4c00h    ;退出
    int 21h
    
code ends
    end start 汇编语言 字符串 排序
[解决办法]
add bx,6                ;为显示下一个字符串做准备
******************************
这句应该改为  add bx,1


另外回车换行的显示中语句
mov al,2h都错写成mov dl,2h

热点排行