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

Assembly - Combining and storing characters from string with XOR

我正在开发一个程序,它接受一个人的名字,遍历名字中的每个字符,然后使用 XOR 命令组合每个字符。该程序仅清除 AL 寄存器,而不是将 EAX register.The 的其余部分最终异或结果存储在 AL 寄存器中。

代码:

INCLUDE Irvine32.inc

.data
myName BYTE "Joe Smith",0
tempName BYTE SIZEOF myName DUP(0)
.code
main PROC
mov al,0
mov esi,0
mov ecx,SIZEOF myName
top:
    xor al, myName[esi]
    inc esi
loop top
call DumpRegs
exit
main ENDP
END main

当我 运行 使用名称 "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

我还有其他一些问题。首先,我不确定 "Joe Smith" 如何转换为十六进制的 0000002B。此外,我只是不确定我是否将异或结果正确地存储在 AL 寄存器中,以便它得到正确的输出。非常感谢任何帮助,谢谢。

OP 问 我不确定 "Joe Smith" 如何转换为十六进制的 0000002B

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

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