B.大写字母全变成小写字母
;-------------------------------------
;宏定义1
;功能:把字符串中的大写改为小写.
;入口:字符串起始地址为STR_ADDR
; 字符串是以0结尾.
D2X MACRO STR_ADDR
LEA SI, STR_ADDR
LP1:MOV AL, [SI]
CMP AL, 0
JE FINI
CMP AL, 'A'
JB NEXT
CMP AL, 'Z'
JA NEXT
ADD AL, 20H
MOV [SI], AL
NEXT:
INC SI
JMP LP1
FINI:
ENDM
;-------------------------------------
;宏定义2
;功能:显示输出字符串.
;入口:字符串起始地址为STR_ADDR
; 字符串是以$结尾.
DISP_STR MACRO STR_ADDR
LEA DX, STR_ADDR
MOV AH, 9
INT 21H
ENDM
;-------------------------------------
;************************************************
DATA SEGMENT PARA PUBLIC 'DATA'
IN_M DB 255 ;限定输入字符个数.
N_SUM DB 0 ;实际输入的个数.
_TXT_ DB 256 DUP('$') ;输入文字区.
TIPS1 DB 7, 13, 10, 13, 10, 'Please input STR:', 13, 10, '$'
TIPS2 DB 7, 13, 10, 13, 10, 'The TXT is: ', 13, 10, '$'
TIPS3 DB 7, 13, 10, 13, 10, 'Please press any key... $'
DATA ENDS
;************************************************
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX, DATA
MOV DS, AX
;--------------------------------
DISP_STR TIPS1 ;宏调用:显示input
LEA DX, IN_M
MOV AH, 10 ;键盘输入字符串.
INT 21H
CMP N_SUM, 0 ;键入0个字符?.
JE EXIT ;退出.
DISP_STR TIPS2 ;宏调用:显示The TXT is
LEA SI, _TXT_
MOV BL, N_SUM
MOV BH, 0
ADD SI, BX
MOV BYTE PTR [SI], 0 ;在末尾添上0
D2X _TXT_ ;宏调用:大转小.
MOV BYTE PTR [SI], '$';在末尾添上$
DISP_STR _TXT_ ;宏调用:显示转换后的字符串.
EXIT:
DISP_STR TIPS3 ;宏调用:显示press any key
MOV AH, 1
INT 21H
MOV AH, 4CH ;结束程序.
INT 21H
CODE ENDS
;************************************************
END START
运行,显示如下:
c:\masm510>asdf
Please input STR:
lskdfsdDVODPFOKPDFKPXas,a;s;;svkspd9
The TXT is:
lskdfsddvodpfokpdfkpxas,a;s;;svkspd9
Please press any key...
c:\masm510>
哎,都是挺简单的初级题目,好久没写了,不过都是以前做过的。现在都不玩汇编了,都搞c了。
想学会汇编的话,一点一点啃,想完成作业抄的话,谁做完了你就抄袭一下就行了。
楼上很郁闷==