回复 6# 一年前挖下的坑
来自1年之后的填坑:- ;Code By 老刘
- ;编译环境: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
复制代码
|