汇编小程序:小写字母转换成大写字母

实验内容:接收键入字符(以CTRL-C为结束),将小写字母变为大写字母,并在屏幕上显示。

DATAS SEGMENT
MESSAGE DB 'Welcome to the system!',13,10,13,10


DB 'The function of the program is changing small letters to capital letters.',13,10
DB 'If you enter capital letters or numbers there will be no changes.',13,10,13,10
DB 'Please enter a string.',13,10,'$'
CR    DB 13,10,'$' ;回车换行
STRING DB 100
DB 0
DB 80 DUP(0) ;定义缓冲区
AGAIN DB 'Do you want to try again?(Y or N)',13,10,'$'
ERROR DB 'ERROR!',13,10,'Please enter the right commomds.',13,10,'$' ;错误提示
DATAS ENDS

STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:
HEAD:
MOV AX,DATAS
MOV DS,AX
LEA DX,MESSAGE ;输出提示语
MOV AH,09H
INT 21H
LEA DX,STRING
MOV AH,0AH
INT 21H    ;把字符串输入到BUF区
LEA DX,CR
MOV AH,09H
INT 21H    ;以上为回车换行
LEA SI,STRING+2 ;把字符串首地址存入BX
MOV CL,STRING+1 ;把字符个数存CX
MOV CH,0

NEXT1:
MOV DL,[SI]
CMP DL,'a'
JB    NEXT2
CMP DL,'z'
JA    NEXT2   ;ASCII码小于a和大于z的跳过,其余的减32
SUB DL,20H   ;大小写字母的ASCII码差32

NEXT2:
MOV AH,02H
INT 21H
INC SI    ;BX自加,判断下一个字符
DEC CX    ;CX自减,最终将是0
JNE NEXT1   ;CX非零时,跳回NEXT1
MOV DX,OFFSET CR ;输出回车换行
MOV AH,09H
INT 21H
JMP   EXIT

OVERFLOW:      ;错误提示
LEA   DX,CR
MOV   AH,09H
INT   21H
LEA   DX,ERROR
MOV   AH,09H
INT   21H

EXIT:
LEA DX,CR
MOV AH,09H
INT 21H
LEA   DX,AGAIN ;提示是否再试一次
MOV   AH,09H
INT   21H
MOV   AH,01H
INT   21H
PUSH AX
LEA DX,CR
MOV AH,09H
INT 21H
POP   AX
CMP   AL,'Y'
JZ   HEAD
CMP   AL,'y'
JZ   HEAD
CMP   AL,'N'
JZ   OVER
CMP   AL,'n'
JZ   OVER
JMP   OVERFLOW

OVER:
MOV AH,4CH
INT 21H

CODES ENDS
END START

如果需要把大写字母转乘小写的,只要把代码中-20H变为+20H即可。

 

本文原地址:http://hi.baidu.com/xiamengy/blog/item/aaba89019d2f3cd5267fb52a.html