题目:已知字符串STRING以‘$’为结束标志;统计其中大写字母的个数,结果送到COUNT单元,并把该字符串中的大写字母变成小写字母,其它字符保持不变。要求分别在屏幕上输出原字符串以及修改后的字符串。
应掌握:1:字符串长度的获取以及循环次数的设置,2:指令指针寄存器的使用,3:比较指令以及条件转移指令,4:大写字母转小写字母就是加上20H。
代码:
DATA SEGMENT
STRING DB 'aJHCjxgfGFAHBVgafbGF $'
NEW_STR DB 40 DUP('$')
COUNT DB 0
NUM EQU $-STRING ;获取STRING中的字符个数
CRLF DB 0DH,0AH,'$' ;换行
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX ;设置DS
LEA DI,NEW_STR ;将新字符串首地址送到DI
LEA SI,STRING-1 ;将原字符串首地址减一后送到SI
MOV CX,0
MOV CX,NUM ;设置循环次数
NEXT:
INC SI ;移动指针
MOV AL,[SI] ;将原字符串第一个元素送到AL
CMP AL,'$' ;AL与$比较
JZ OVER ;若AL内容为$,则显示字符串,结束程序
CMP AL,'A' ;将AL内容和A比较
JB NEXT1 ;若AL内容比A小,则AL不是大写字母,跳到NEXT1
CMP AL,'Z' ;将AL内容和Z比较
JA NEXT1 ;若AL内容比Z大,则AL不是大写字母,跳到NEXT1
ADD AL,20H ;将AL中的大写字母加上20H后转成小写字母
INC COUNT ;COUNT单元加一
NEXT1:
MOV [DI],AL ;AL内容不是大写字母,将其送到新字符串中
INC DI ;移动新串指针
LOOP NEXT ;循环NEXT
OVER:
LEA DX,STRING ;在屏幕上显示旧字符串
MOV AH,09H
INT 21H
LEA DX,CRLF ;换行
MOV AH,09H
INT 21H
LEA DX,NEW_STR ;在屏幕上显示新字符串
MOV AH,09H
INT 21H
MOV AH,09H ;返回DOS
INT 21H
CODE ENDS
END START
运行结果: