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这个字眼有点别扭··该怎么办呢?
_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
纯帮顶
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这个字眼有点别扭··该怎么办呢?
_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
纯帮顶
well,另外一种方法
and 0xEF,al;转换为大写
or 0x10,al;转换为小写。
0101 0000;小写a
0101 1010;小写z
0110 0001;大写A
0111 1010;大写Z