当前位置:文档之家› 小写字母转换为大写字母

小写字母转换为大写字母

?咀?汇编小程序:小写字母转换成大写字母2010-11-17 19:46转载自 xiamengy最终编辑 xiamengy实验内容:接收键入字符(以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即可


相关主题
文本预览
相关文档 最新文档