Assembly 汇编-使用XOR组合和存储字符串中的字符
我正在开发一个程序,它取一个人的名字,循环遍历名字中的每个字符,并使用XOR命令组合每个字符。程序只清除AL寄存器,而不清除EAX寄存器的其余部分。最终的异或结果存储在AL寄存器中 代码: 当我使用名称“Joe Smith”运行程序时,我得到的输出是: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
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