汇编小程序:小写字母转换成大写字母
- 再创世纪·代码厨房
- 2007-11-22
- 761热度
- 11评论
实验内容:接收键入字符(以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
看不懂我 ,是电脑小白嘿嘿~~~~
看不懂我 ,是电脑小白嘿嘿~~~~
倒,这是什么语言啊-_-!!
呵呵。。汇编啊
呵呵。。汇编啊
大写字母转成小写字母~~~~~哪里有你说的-30h啊
大写字母转成小写字母~~~~~哪里有你说的-30h啊
呃。我的意思是说原来是减20H换成加20H。 SUB DL,20H ;大小写字母的ASCII码差32 就是这句里面SUB改成ADD就可以了。
回复tuanzi_love:呃。我的意思是说原来是减20H换成加20H。 SUB DL,20H ;大小写字母的ASCII码差32 就是这句里面SUB改成ADD就可以了。
哇!神了……用去写实验报告,可以不?
哇!神了……用去写实验报告,可以不?