用汇编写个简单的火星文转换器
参考一个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
程序和代码以打包









本来想注释一下,结果一看里面如果 否则如果 否则如果的一大堆,就偷懒了, 有想学习的朋友自己看下版主发的源码, 有不明白的地方提出来大家解决

稍微注释一下,也省得有朋友要讲原理,又有朋友说不基础哇. 不过愿意去读别人源代码的人太少了.看似没啥必要了