首先键盘输入字符串数,然后逐个输入字符串,最后按字母首序输出字符串。
include io.inc
.model small
.stack
.data
CHARS DB 50 DUP(20H),'$' ;实际键入的字符从此开始存放.
set db 20 dup(20H)
.code
.startup
mov ah,01 ;从标准输入设备输入字符
int 21h
and al,0fh
;dec al
mov ah,0
mov cx,ax
push cx
push cx
;inc cx
;call disprw
xor bx,bx
mov bx,offset CHARS
xor bp,bp
mov bp,offset set
again:
push cx
mov ax,bx
call readmsg
inc ax
;and al,0fh
mov byte ptr [bp],al
inc bp
dec ax
add bx,ax
inc bx
pop cx
;call disprw
loop again
inc bp
mov byte ptr [bp],'$'
;mov al,set
;call disphb
;mov ah,9 ;执行显示操作
;int 21h
;inc bx
;MOV BYTE PTR [BX], '$'
;lea dx,CHARS
;mov ah,9 ;执行显示操作
;int 21h
pop si
xor bx,bx
xor ax,ax
mov cx,26
xor ah,ah
mov ah,61h
loop2:
push cx
;pop cx
mov cx,si
mov bx,offset CHARS
mov bp,offset set
loop1:
mov al,[bx]
cmp al,ah
;push ax
;push bx
;call disprw
;call disprf
;pop bx
;pop ax
jnz done
push ax
push bx
mov ax,bx
call dispmsg
PUSH AX
PUSH DX
MOV AH, 02H ;输出单个字符.
MOV DL, 0DH ;0D是回车符的zhiASCII码.
INT 21H ;输出.
MOV AH, 02H
MOV DL, 0AH ;0A是换行符的ASCII码.
INT 21H
POP DX
POP AX
;call disprw
pop bx
pop ax
done:
add bl,[bp]
inc bp
;call disprw
loop loop1
inc ah
pop cx
loop loop2
MOV AH,4CH
INT 21H
.exit
end
运行结果: