用汇编写个简单的火星文转换器
参考一个javascript的思路写的 很简单 只能做简单替换 大家看看吧 核心代码帖一下 呵呵
程序代码:
.code ;在字符表里查找 找到返回在ax里 找不到返回-1 _Lookup proc uses edi esi ebx _dwInput:DWORD xor edi,edi mov eax,_dwInput .while edi <= dwSrclen cmp ax,WORD ptr [szSrc+edi*2] .if ZERO? mov ax,WORD ptr [szDst+edi*2] ret .endif inc edi inc edi .endw xor eax,eax dec eax ret _Lookup endp ;替换函数 因为前面判断过字符串长度 这里就不检查了 呵呵 _Change proc uses edi esi ebx _lpSrc:DWORD,_lpDst:DWORD invoke lstrlen,_lpSrc ;这里用简单的方法判断输入的合法性 要是奇数个一定有问题 要是偶数也有可能有错 ;应该是转换成一个统一的编码 比如unicode 不过偶就不写了 test eax,1 .if !ZERO? xor eax,eax dec eax ret .endif mov ecx,eax xor edx,edx ;int 3h mov esi,_lpSrc mov edi,_lpDst .while edx<ecx mov bx,[esi+edx*2] invoke _Lookup,ebx .if eax==-1 mov[edi+edx*2],bx .else mov [edi+edx*2],ax .endif inc edx .endw xor eax,eax ret _Change endp
程序和代码以打包
火星文转换器.rar
(28.11 KB)