关于大写字母转换成小写字母

时间:2021-06-05 09:16:18
缓冲区BUFFER中存放有字符串,以0为结束标志。编写程序,把字符串中的大写字母转换成小写字母?应该怎么用汇编语言编写呢?或者给点提示也行啊····

5 个解决方案

#1


大小写字母 ASC 码差32

#2


你先查一下ascii表 了解大写字母与小写字母的上限与下限  判断是大写字母,+30 是小写字母 就不动 

#3


DATA SEGMENT
_X DB  81 DUP(?)
M DW ?
N EQU 0
_L DB 0AH,0DH,"PLEASE ENTER LETTERS:",'$',0DH,0AH
_M DB 0AH,0DH,"                     ",'$',0AH,0DH
DATA ENDS
CODE SEGMENT 
ASSUME  CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,N
    MOV CX,81
;*********************
LL:     LEA DX, _L
        MOV AH,09H
        INT 21H
;**********************
L1:     MOV AH, 01H
INT 21H
CMP AL,' '
JZ L
        CMP AL,40H
        JNG LL
        CMP AL,7BH
        JGE LL
        CMP AL,5BH
        JNG _TURNL
        CMP AL,60H
        JNG LL
        JG  _ALLOW
_TURNL: OR AL,20H       
_ALLOW: MOV _X[BX],AL
INC BX
;***********************

LOOP L1
;***********************

L: MOV AX,0
LEA DX,_M
MOV AH,09H
INT 21H

;**********************
MOV M,BX
        CMP M,0
        JZ  L4
        MOV BX,0
LEA BX,_X
MOV CX,M
L2:  MOV DL,DS:[BX]
MOV AH,02H
INT 21H 
INC BX
LOOP L2
L4: MOV AH,4CH
INT 21H
CODE    ENDS
        END START
现在我把程序写出来给你们看看(想了一天,LZ比较菜,想的时间很多),但是这里没有涉及到缓冲区BUFFER,虽然能正确实现该程序的要求(把大写字母转换成小写,而小写的不用转换),但是我还是觉得没有见到BUFFER这个字眼有点别扭··该怎么办呢?

#4


各位快点来指导一下啊·····

#5


引用 2 楼 yiyilove97 的回复:
你先查一下ascii表 了解大写字母与小写字母的上限与下限  判断是大写字母,+30 是小写字母 就不动 

纯帮顶

well,另外一种方法
and 0xEF,al;转换为大写

or  0x10,al;转换为小写。

0101 0000;小写a
0101 1010;小写z

0110 0001;大写A
0111 1010;大写Z

#1


大小写字母 ASC 码差32

#2


你先查一下ascii表 了解大写字母与小写字母的上限与下限  判断是大写字母,+30 是小写字母 就不动 

#3


DATA SEGMENT
_X DB  81 DUP(?)
M DW ?
N EQU 0
_L DB 0AH,0DH,"PLEASE ENTER LETTERS:",'$',0DH,0AH
_M DB 0AH,0DH,"                     ",'$',0AH,0DH
DATA ENDS
CODE SEGMENT 
ASSUME  CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,N
    MOV CX,81
;*********************
LL:     LEA DX, _L
        MOV AH,09H
        INT 21H
;**********************
L1:     MOV AH, 01H
INT 21H
CMP AL,' '
JZ L
        CMP AL,40H
        JNG LL
        CMP AL,7BH
        JGE LL
        CMP AL,5BH
        JNG _TURNL
        CMP AL,60H
        JNG LL
        JG  _ALLOW
_TURNL: OR AL,20H       
_ALLOW: MOV _X[BX],AL
INC BX
;***********************

LOOP L1
;***********************

L: MOV AX,0
LEA DX,_M
MOV AH,09H
INT 21H

;**********************
MOV M,BX
        CMP M,0
        JZ  L4
        MOV BX,0
LEA BX,_X
MOV CX,M
L2:  MOV DL,DS:[BX]
MOV AH,02H
INT 21H 
INC BX
LOOP L2
L4: MOV AH,4CH
INT 21H
CODE    ENDS
        END START
现在我把程序写出来给你们看看(想了一天,LZ比较菜,想的时间很多),但是这里没有涉及到缓冲区BUFFER,虽然能正确实现该程序的要求(把大写字母转换成小写,而小写的不用转换),但是我还是觉得没有见到BUFFER这个字眼有点别扭··该怎么办呢?

#4


各位快点来指导一下啊·····

#5


引用 2 楼 yiyilove97 的回复:
你先查一下ascii表 了解大写字母与小写字母的上限与下限  判断是大写字母,+30 是小写字母 就不动 

纯帮顶

well,另外一种方法
and 0xEF,al;转换为大写

or  0x10,al;转换为小写。

0101 0000;小写a
0101 1010;小写z

0110 0001;大写A
0111 1010;大写Z