只为记录汇编实验(分支与循环程序设计)
题目:接收从键盘的字符,以“$”或回车结束 ,并将其中的小写字母转变为大写字母,然后在屏幕上显示。
代码如下:
;从屏幕上输入字符串,把字符串中所有的小写字母修改后输出在屏幕上
DATA SEGMENT
BUF DB 50 ;定义缓冲区
DB '?'
DB 50 DUP('?') ;开辟存储空间
CRLF DB 0DH,0AH,'$' ;定义换行
STR1 DW 'INPUT STRING:','$'
STR2 DW 'OUTPUT STRING:','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1 ;输入提示
MOV AH,9H
INT 21H
MOV DX,OFFSET BUF ;从键盘输入并把输入地址放入buf中
MOV AH,0AH
INT 21H
XOR CX,CX ;cx初始化
LEA SI,BUF+1 ;使si指向buf第一个位置,此处位置存储字符串长度
MOV CL,[SI] ;定义遍历次数
LEA SI,BUF+2
X:
MOV AL,[SI] ;把si中的内容放入al中
CMP AL,'a' ;al与小写字母a比较
JB NEXT ;小于则跳next
CMP AL,'z' ;al与小写字母z比较
JG NEXT ;大于则跳next
SUB AL,20H ;小写字母转换大写
MOV [SI],AL ;把修改后的大写字母赋值给[si]
NEXT:
INC SI ;使si地址自增1
LOOP X ;做循环,cl自减1 当cl=0时执行下一条语句,否则继续循环x
MOV [SI],'$' ;存储字符串结束语句,以防出现乱码
;若41行代码不写则在输入字符串后边加上$符号,这样也可以输出
;如果题目要求字符串以$结尾,则41行代码可删除
LEA DX,CRLF ;回车换行
MOV AH,09H
INT 21H
LEA DX,STR2 ;输出提示
MOV AH,09H
INT 21H
LEA DX,BUF+2 ;输出修改后的字符串
MOV AH,09H
INT 21H
MOV AH,4CH ;结束程序
INT 21H
CODE ENDS
END START