[Asm] 纯文本查看 复制代码 ;Code By 老刘
;题目链接:http://www.bathome.net/thread-43785-1-1.html
;编译环境:MASM32 SDK
;编译指令:ml /coff 字母按大小写归并.ASM /link /subsystem:console
;调用方法:CMD传参,参数1为要处理的字符串。
;其他:非大小写字母的字符将被丢弃;传入字符串长度最长为126字符。
Include Masm32rt.INC
.Data?
Arg db 128 dup (?)
UpperCaseString db 128 dup (?)
LowerCaseString db 128 dup (?)
NewString db 128 dup (?)
.Code
Start:
Invoke ArgClC,1,Offset Arg
.If Eax == 1
Mov Esi,Offset Arg
Mov Ecx,Offset LowerCaseString
Mov Edx,Offset UpperCaseString
.While Al != 0 ;分割为两个字符串
LodSB
.If Al >= 41h && Al <= 5Ah
Mov Byte Ptr [Edx],Al
Inc Edx
.ElseIf Al >= 61h && Al <= 7Ah
Mov Byte Ptr [Ecx],Al
Inc Ecx
.EndIf
.EndW
;合并到同一个字符串中。
Mov Edi,Offset NewString
;处理小写字符串
Sub Ecx,Offset LowerCaseString
Mov Esi,Offset LowerCaseString
Rep MovSB
;处理大写字符串
Sub Edx,Offset UpperCaseString
Mov Ecx,Edx
Mov Esi,Offset UpperCaseString
Rep MovSB
;字符串结尾
Mov Al,0Ah
StoSB
Xor EAX,EAX
StoSB
;回显字符串
Invoke StdOut,Offset NewString
.EndIf
Invoke ExitProcess,NULL
End Start
End |