求教汇编语言编程问题! 急!急!急!急! 30
小弟有急用,送30个积分作为感谢!题目是:编写一个子程序,根据入口参数AL的取值(=0.1.2),分别实现大写字母转换成小写'小写字母转换成大写或大小写字母互换等功能.要...
小弟有急用,送30个积分作为感谢!题目是:
编写一个子程序,根据入口参数AL的取值(=0.1.2),分别实现大写字母转换成小写'小写字母转换成大写或大小写字母互换等功能.要转换的字符串在STRING中,用0表示结束! 展开
编写一个子程序,根据入口参数AL的取值(=0.1.2),分别实现大写字母转换成小写'小写字母转换成大写或大小写字母互换等功能.要转换的字符串在STRING中,用0表示结束! 展开
1个回答
展开全部
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
两年没有去读汇编了,楼主,不好意思,这不是我的原创.
网上搜的,只供参考.
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
两年没有去读汇编了,楼主,不好意思,这不是我的原创.
网上搜的,只供参考.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询