Assembly 汇编-使用XOR组合和存储字符串中的字符

Assembly 汇编-使用XOR组合和存储字符串中的字符,assembly,masm,xor,irvine32,Assembly,Masm,Xor,Irvine32,我正在开发一个程序,它取一个人的名字,循环遍历名字中的每个字符,并使用XOR命令组合每个字符。程序只清除AL寄存器,而不清除EAX寄存器的其余部分。最终的异或结果存储在AL寄存器中 代码: 当我使用名称“Joe Smith”运行程序时,我得到的输出是: EAX=768D332B EBX=7EFDE000 ECX=00000000 EDX=00401005 ESI=0000000A EDI=00000000 EBP=0018FF94 ESP=0018FF8C EIP-004033FA EFL=00

我正在开发一个程序,它取一个人的名字,循环遍历名字中的每个字符,并使用XOR命令组合每个字符。程序只清除AL寄存器,而不清除EAX寄存器的其余部分。最终的异或结果存储在AL寄存器中

代码:

当我使用名称“Joe Smith”运行程序时,我得到的输出是:

EAX=768D332B EBX=7EFDE000 ECX=00000000 EDX=00401005
ESI=0000000A EDI=00000000 EBP=0018FF94 ESP=0018FF8C
EIP-004033FA EFL=00000206 CF=0  SF=0 ZF=0 OF=0 AF=0 PF=1
我应该得到这个:

EAX=0000002B EBX=7EFDE000 ECX=00000000 EDX=00405000
ESI=00405009 EDI=00000000 EBP=0018FF94 ESP=0018FF8C
EIP=00401045 EFL=00000206 CF=0 SF=0 ZF=0 OF=0 AF=0 PF=1
我也有一些其他的问题。首先,我不确定“乔·史密斯”在十六进制中是如何翻译成0000002B的。另外,我只是不确定我是否在AL寄存器中正确地存储了XOR结果,以便它得到正确的输出。非常感谢您的帮助,谢谢

OP问我不知道“Joe Smith”如何翻译成十六进制的
0000002B


在二进制位值的每列中,奇数的
1
位将导致
1
,偶数的
1
位将导致
0

您自己说过您只清除
AL
而不清除
EAX
,那么为什么您希望前24位为零呢?如果需要,请在开始时清除所有
EAX
2B
是正确的结果,它是字符的ascii码的异或。Windows计算器在程序员模式下带有异或操作。它还可以将基数更改为二进制。用它来检查你的结果。我希望是这样,因为这是一个例子中给出的正确输出。哪个部分令人困惑?如果你想让上面的部分变得清晰,你可以自己清除它们。如果你不清除它们,甚至不说,那么你就不会得到零。你可以“期待”你想要的一切,但处理器只是在做你告诉它的事情。因此,将
mov-al,0
替换为
mov-eax,0
xor-eax,eax
,然后完成。好的,谢谢大家。
EAX=0000002B EBX=7EFDE000 ECX=00000000 EDX=00405000
ESI=00405009 EDI=00000000 EBP=0018FF94 ESP=0018FF8C
EIP=00401045 EFL=00000206 CF=0 SF=0 ZF=0 OF=0 AF=0 PF=1
char    ASCII   binary      hex
-----   -----   ---------   ---
J        74     0100 1010   4A
o       111     0110 1111   6F
e       101     0110 0101   65
(space)  32     0010 0000   20
S        83     0101 0011   53
m       109     0110 1101   6D
i       105     0110 1001   69
t       116     0111 0100   74
h       104     0110 1000   68
(zero)    0     0000 0000   00      (this was included but has no effect on XOR)
        -----   ---------   ---
XOR  =   43     0010 1011   2B