在罗云彬的《Windows环境下32位汇编语言程序设计》中第321页
... .const szAllowedChar db '0123456789ABCDEFabcdef',08h ... .code _ProcEdit proc uses ebx edi esi hWnd,uMsg,wParam,lParam mov eax,uMsg .if uMsg == WM_CHAR mov eax,wParam mov edi,offset szAllowedChar mov ecx,sizeof szAllowedChar repnz scasb .if ZERO? .if al > '9' and al,not 20h .endif invoke CallWindowProc,lpOldProcEdit,hWnd,uMsg,eax,lParam ret .endif .else invoke CallWindowProc,lpOldProcEdit,hWnd,uMsg,wParam,lParam ret .endif xor eax,eax ret _ProcEdit endp ...
主要功能代码为
repnz scasb .if ZERO? .if al > '9' and al,not 20h .endif invoke CallWindowProc,lpOldProcEdit,hWnd,uMsg,eax,lParam ret .endif
它限制了输入的字符必须为szAllowedChar中定义的,为0~9,A~F,a~f和退格。其他的字符因为不满足条件而不予处理。
其中
and al,not 20h
实现了所有的大小写都转为大写。
--------------------------------------------------------------
一个疑问:
这个字符串定义里,没有使用一个逗号和0来表示结尾。
参照这本书对于变量定义的讲解和网络上一篇文章(http://www.cnblogs.com/del/archive/2010/04/04/1704296.html)
我觉得很是困惑。在代码里调整了一下定义的位置,也未见明确的错误。
这个不是很理解。难道说“,0”不是必需的?