获得大写字母MASM x86

时间:2013-05-12 05:23:18

标签: inline-assembly masm

我在获取用户传入的字符串中的大写字母数量方面遇到了一些问题。我必须用masm写它。我的问题是我可以使用:

AND al, some bitstream
;TO DO LOGIC HERE

只获得大写字母?我的代码正确获取小写字母的数量,我似乎无法弄清楚大写字母。此外,此字符串中还包含一些随机字符,例如:(<)>?$#@&。它就这么简单吗?或者我需要更多的逻辑来实现这个目标吗?

这样的东西?

jmp getNext         
getNext: mov al,[esi]
     cmp al,0
     je exitProc  ;exit loop
     cmp al,'a'
         jl noChange  ;increases my counters
         cmp al,'z'
         jle toUpperCase ;counts lowercase
         cmp AL,'A'  
         jl noChange 
         cmp AL,'Z' 
         jg noChange
         jl toCount  ;counts uppercase

我一直得到0作为我的答案,无法弄清楚原因。我很明显受到MASM的挑战。

似乎我的toCount永远不会被调用。而是行:

         cmp AL,'A'  
         jl noChange 
         cmp AL,'Z' 
         jl toCount  ;counts uppercase

似乎只能调用noChange。这导致toCount中的值增加永远不会被调用。我仍然无法弄清楚这有什么问题。除了使用cmp中的大写字母外,它与小写字母的测试完全相同。

1 个答案:

答案 0 :(得分:2)

需要做的是:

    cmp al,'A'  
    jl noChange ;inc counter
    cmp al,'Z' 
    jle toCount ;count uppercase
    cmp al,'a'
    jl noChange ;inc counter
    cmp al,'z'
    jle toUpperCase ;count lowercase

在ASCII中'A'= 65且'Z'= 90.'a'= 97且'z'= 122.我的问题是我首先测试的是更高的ASCII字符,这将忽略来自的任何ASCII字符65-90(AZ)。