汇编 - 将字符串中的字符与XOR结合并存储

时间:2015-05-19 17:01:30

标签: assembly masm xor irvine32

我正在开发一个程序,它接受一个人的名字,遍历名称中的每个字符,并使用XOR命令组合每个字符。程序仅清除AL寄存器,而不清除EAX寄存器的其余部分。最后的XOR结果存储在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。另外,我不确定我是否正确地将XOR结果存储在AL寄存器中,以便它能够提供正确的输出。非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

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 }。