String 如何将程序集中的字符转换为数字?

String 如何将程序集中的字符转换为数字?,string,assembly,char,integer,converter,String,Assembly,Char,Integer,Converter,如果有人能帮我汇编一些代码。把每个字符都转换成整数。 例如:A到1,B到2,C到3,D到4,等等。。。在Z到26之前,获取字母ASCII字符的数字等价物的最简单方法之一是去除位5、6和7 A=64=41H=0100001Z=90=5AH=0101010A=97=61H=0110001Z=122=7AH=0111010 因此,剥离高阶3位将为您留下相等的数字,无论大小写 and al, 1FH 这是一个很好的主意,范围检查 lodsb and al, 5FH

如果有人能帮我汇编一些代码。把每个字符都转换成整数。
例如:A到1,B到2,C到3,D到4,等等。。。在Z到26之前,获取字母ASCII字符的数字等价物的最简单方法之一是去除位5、6和7

A=64=41H=0100001
Z=90=5AH=0101010
A=97=61H=0110001
Z=122=7AH=0111010

因此,剥离高阶3位将为您留下相等的数字,无论大小写

    and    al, 1FH
这是一个很好的主意,范围检查

    lodsb
    and    al, 5FH        ; Converts to upper case
    cmp    al, 'A'
    jb     Error
    cmp    al, 'Z'
    ja     Error

    xor    al, 40H        ; Turns off only bit that doesn't matter
                          ; and now your left with 1 to 26 in AL
如果你想把你的价值归零,只要

   dec     al

在所有西方字符集和编码中,您只需减去64即可转换A、B、C。。。到1,2,3。。。或者减去96变换a,b,c。。。到1,2,3。验证您的输入。另外(在所有常见的西方编码中,前127个字符的编码点和编码是相等的)@MargaretBloom你是否有一些代码或类似的东西,这样我就可以看到发生了什么,因为我没有太多的经验,而且我在谷歌上找到的所有东西似乎都对我没有帮助,因为这是我项目的一部分。我需要用许多不同的任务来完成它。有一些东西。你可以通过从字符,然后与25进行比较。如Michael所说,并加上“…如果它没有超出范围,它就是结果(注意偏移量:A=0,B=1,C=2等)”,如果你想将你的值归零,就用
sub al,'A'
代替
xor
。在这里,使用位旋转而不是
sub
没有任何好处。此外,
屏蔽的不仅仅是大写/小写位,因此最终接受一些字节作为大写字符,而实际上它们是高位设置的非ASCII字节。相反,
和al、~0x20
,或强制使用
或al、0x20
将其转换为小写。re:无符号比较技巧:有关仅翻转ASCII字母大小写的有效asm,请参阅。相关:用于向量化字符串<代码> ToupPu/Cuth>的C++内部:使用SSE2。