求一汇编实例

来源:百度知道 编辑:UC知道 时间:2024/06/18 06:21:39
题目要求:利用21H的1号功能,从键盘输入任意长度的字符串,以回车符结束;将输入的字符串存在数据段中;对输入的字符串按ASCII码从小到大排序(ASCII小者占低地址存放);将排好的字符利用INT 21H的9号功能显示在微机屏幕上

高手帮我弄个例子,最好注释比较详细一点的。如果能够实现功能追加30分,比较急!!谢谢了

.model small
.stack
.data
maxbyte db 255
realbyte db 0
buff db 255 dup(0)
.code
start: mov ax, @data
mov ds, ax

mov dx, offset maxbyte ;输入字符串存在buff中,maxbyte中最大可以输入的字符数,realbyte中是实际输入的字符数
mov ah, 0ah
int 21h

mov bx, offset buff
xor cx, cx
mov cl, realbyte
dec cx ;外层循环cyci从最后一个字符指向第一个字符,内层循环cycj从第一个字符指向后面
cyci: mov di, cx ;让DI指向还未比较的最后一个字符

xor si, si ;使SI指向还未比较的第一个字符
cycj: cmp si, di ;SI是否小于DI
jnb nexti ;不是,则进行下一个循环,让DI的值减一(通过LOOP指令使CX减一来实现)
mov al, [bx][si] ;将当前SI指向的字符放入AL中
cmp [bx][di], al ;SI指的字符是不是小于DI指的字符
jnb lab1 ;是则将SI加一,进行下一次比较
xchg [bx][di], al ;不是则交换DI与SI所指的字符
mov [bx][si], al
lab1:inc si
jmp cycj

nexti:loop cyci

mov cl,realbyte ;在字符串的末尾加上字符$以便使用09中断输出字符
mov si, cx
mov [bx][si], '$'
mov ah, 09h ;使用09中断输出字符
mov dx, bx
int 21h

mov