zoukankan      html  css  js  c++  java
  • 读书笔记——Windows环境下32位汇编语言程序设计(9)ANSII字符大小写转大写

    在罗云彬的《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”不是必需的?

  • 相关阅读:
    Hadoop-HA配置详细步骤
    Oracle 事务
    2 Oracle用户和表空间
    oracle 客户端监听文件配置
    Django 关联管理器
    第2讲 | 网络分层的真实含义是什么?
    hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
    poj 2411 Mondriaan's Dream (轮廓线DP)
    SPOJ COT2 Count on a tree II (树上莫队,倍增算法求LCA)
    HYSBZ 1086 王室联邦 (树的分块)
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202144.html
Copyright © 2011-2022 走看看