DATAS SEGMENT
string db 100, ? , 100 dup(?)
string2 db 100, ? , 100 dup(?)
temp db 0ah, 0dh, '$'
info db 'input : $'
info0 db 'select: $'
m0 db 'please select an operation: ', 0ah, 0dh, '$'
m1 db '1. remove previous *', 0ah, 0dh, '$'
m2 db '2. remove mid *', 0ah, 0dh, '$'
m3 db '3. remove hinder *', 0ah, 0dh, '$'
m4 db '4. remove all *', 0ah, 0dh, '$'
m5 db '5. exit', 0ah, 0dh, '$'
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
MOV AX, DATAS
MOV DS, AX
; 键盘输入一个包含若干个 ‘*’ 的字符串
; 5个子程序,显示菜单,显示1-4操作,分别为,将字符串前,中,后的*,所有的*去掉,输入5程序退出
; 菜单
call meau
; 输入字符串
call pin
lop:
lea dx, info0
mov ah, 09h
int 21H
; 输入操作
mov ah, 01h
int 21H
; 换行
lea dx, temp
mov ah, 09h
int 21H
cmp al, 31h
je l1
cmp al, 32h
je l2
cmp al, 33h
je l3
cmp al, 34h
je l4
cmp al, 35h
je ex0
l1:
call func1
jmp lop
l2:
call func2
jmp lop
l3:
call func3
jmp lop
l4:
call func4
jmp lop
ex0:
call func_and
; 输出字符串
call pout
jmp exit
; 将去掉*后的字符串合并
func_and proc
; si 为 string 第一个字符的偏移地址
mov al, 2
mov ah, 0
mov si, ax
; di 为 string2 第一个字符位置的偏移地址
mov al, 2
mov ah, 0
mov di, ax
mov cl, string + 1
mov ch, 0
lopp:
cmp string[si], 0
je exx
mov al, string[si]
mov string2[di], al
inc di
exx:
inc si
loop lopp
mov string2[di], '$'
ret
func_and endp
; 功能1,去掉前面的*
func1 proc
mov al, 2
mov AH, 0
mov si, ax
lop1:
cmp string[si], '*'
jne ex1
mov string[si], 0
inc si
jmp lop1
ex1:
ret
func1 endp
; 功能2,去掉中间的*
func2 proc
mov al, 2
mov ah, 0
mov si, ax
; 找第一个非*的位置
lop2:
cmp string[si], '*'
jne ex2
inc si
jmp lop2
ex2:
; 找最后一个非*的位置
mov al, string + 1
add al, 1
mov ah, 0
mov di, ax
lop22:
cmp string[di], '*'
jne ex22
dec di
jmp lop22
ex22:
mov cx, di
sub cx, si
lop222:
cmp string[si], '*'
jne e0
mov string[si], 0
e0:
inc si
loop lop222
ret
func2 endp
; 功能3,去掉后面的*
func3 proc
mov al, string + 1
add al, 1
mov AH, 0
mov si, ax
lop3:
cmp string[si], '*'
jne ex3
mov string[si], 0
dec si
jmp lop3
ex3:
ret
func3 endp
; 功能4,去掉全部的*
func4 proc
call func1
call func2
call func3
ret
func4 endp
; 菜单
meau proc
lea dx, m0
mov ah, 09h
int 21H
lea dx, m1
mov ah, 09h
int 21H
lea dx, m2
mov ah, 09h
int 21H
lea dx, m3
mov ah, 09h
int 21H
lea dx, m4
mov ah, 09h
int 21H
lea dx, m5
mov ah, 09h
int 21H
ret
meau endp
; 字符串输出
pout proc
lea dx, string2 + 2
mov ah, 09h
int 21h
ret
pout endp
; 字符串输入
pin proc
lea dx, info
mov ah, 09h
int 21h
lea DX, string
mov ah, 0ah
int 21h
lea dx, temp
mov ah, 09h
int 21h
mov al, string + 1
add al, 2
mov ah, 0
mov si, ax
mov string[si], '$'
ret
pin endp
exit:
mov AH, 4CH
INT 21H
CODES ENDS
END START
怎样才能让程序运行时,在菜单上选择1-4,然后回车直接输出结果,输入5时,退出程序呀?谢谢大家!