汇编语言综合题-1
一、题目要求
#去除字符串中的某个字符。
要求:输入和输出都要有必要的提示﹐且提示独占一行﹔输入要有边界判断。
1)输入任意大小写字母混合字符串string1 ,长度15~30个字符﹐按Enter 结束输入﹔
2)输入任意一个字符ch(大写或小写字母),Enter 结束输入;
3)将string1中字符ch进行大小写转换(例∶输入ch为小写a ,则将string1中所有小写a转换为大写A﹐其它字符内容位置不变)﹐输出变化后的字符串 string2 ;
4)将string1中的ch字符去除(例:ch为小写a ,则将string1中的所有a字符删去),输出变化后的字符串string3。
二、代码实现
DATAS SEGMENT
;此处输入数据段代码
MIN DW 15
MAX DW 30
char DB ?
num DW ?
shuru DB 'Please enter a mixed case string (15 <= length <= 30):$'
zifu DB 'Please enter a character ch : $'
conver DB 'Case converted String: $'
delete DB 'Delete the string after the ch character :$'
error DB 'error!$'
buf DB 30h
DB 0
DB 30h DUP(0)
DATAS ENDS
enterline macro ;宏定义,完成回车换行
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;换行
mov ah,2
int 21h
endm
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov dx,offset shuru
mov ah,9
int 21h;输出提示符
mov dx,offset buf
mov ah,10
int 21h ;输入字符串到buf
xor dx,dx ;边界判断
mov dl,buf+1
cmp dx,MIN
jb stop
cmp dx,MAX
ja stop
mov num,dx ;把长度给num
enterline
mov dx,offset zifu
mov ah,9
int 21h ;提示输入ch
mov ah,1 ;放在al
int 21h
xor ah,ah
mov char,al ;放在char
enterline
;大小写切换
xor si,si
mov bl,-20h
;panduan char
cmp char,41h;;大写
jb next2
cmp char,5ah
ja next2
;如果是小写就减20h
mov bl,20h
next2:
mov dx,offset conver
mov ah,9
int 21h
mov si,0
next1:
mov cl,buf[si+2] ;bl里面放字符
cmp char,cl
jne change ;如果相等就运算
add buf[si+2],bl
;输出
mov dl,buf[si+2]
mov ah,2
int 21h
sub buf[si+2],bl
;运算完之后再补齐,方便后面的计算
change:
cmp char,cl;再次判断
je tiaoguo ;相等就跳过,不相等就输出
mov dl,buf[si+2]
mov ah,2
int 21h
tiaoguo:
inc si
cmp si,num
jne next1
enterline
;delete
mov dx,offset delete
mov ah,9
int 21h
mov si,0
next3:
mov cl,buf[si+2] ;bl里面放字符
cmp char,cl
je del ;如果相等就运算
;输出
mov dl,buf[si+2]
mov ah,2
int 21h
del:
inc si
cmp si,num
jne next3
jmp next
stop:
enterline
mov dx,offset error
mov ah,9
int 21h
next:
MOV AH,4CH
INT 21H
CODES ENDS
END START