高分求汇编语言两个程序合并成一个,一个是另一个的子程序

;试试看:

assume cs:code, ds:data

data segment

msg1 db 'Before sort:$'

crlf db 0dh, 0ah, '$'

msg2 db 'After sort :$'

;----------------------------------

BUFSIZE DB 50 ;最多可键入50个字符.

ACTLEN DB ? ;实际键入的字符数.

CHARS DB 50 DUP(20H) ;实际键入的字符从此开始存放.

data ends

;-------------------------

code segment

start:

mov ax, data

mov ds, ax

mov dx, offset msg1

mov ah, 9

int 21h

MOV DX, OFFSET BUFSIZE ;键入缓冲区起始偏移地址送DX

MOV AH, 0AH

INT 21H ;输入字符串并送入缓冲区.

XOR CX, CX

MOV CL, ACTLEN ;取得输入的字符数.

MOV DX, OFFSET CHARS ;输入的字符串起始地址送DX

MOV BX, DX ;将字符串首地址送BX

ADD BX, CX ;取到字符串尾地址.

MOV BYTE PTR [BX], '$' ;在字符串尾插$

; MOV AH, 09H ;字符串显示功能.

; INT 21H ;显示键入的字符串.

ok:

mov dx, offset crlf

mov ah, 9

int 21h

mov dx, offset msg2

mov ah, 9

int 21h

;-----------------------

MOV CX, 15

mov si, offset CHARS

s:

push cx

mov di, si

inc di

s1:

mov al, [si]

cmp al, [di]

jb jx

xchg al, [di]

mov [si], al

jx:

inc di

loop s1

inc si

pop cx

loop s

;-----------------------

mov byte ptr [si+1], 24h

mov dx, offset CHARS

mov ah, 9

int 21h

mov ah, 4ch

int 21h

code ends

end start