汇编语言实验多个字符串排序
题目要求是:编写程序实现输入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