0

我在获取将由用户传入的字符串中的大写字母数量时遇到了一些问题。我必须用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 中使用大写字母外,这与测试小写字母完全相同。

4

1 回答 1

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 字符,这将忽略 65-90 中的任何 ASCII 字符(亚利桑那州)。

于 2013-05-12T16:34:22.210 回答