Вы сказали, что делаете ...
xor eax, key ; XOR decrypt the word
... но я предполагаю, что это опечатка, и вы на самом деле пытаетесь это сделать ...
xor [eax], key ; XOR decrypt the word
Причина, по которой это не сработает, заключается в том, что key
не является регистром: это, вероятно, я не знаю, синоним чего-то вроде [ebp+4]
.
x86 (не только MASM, но и nasm: набор команд x86) позволяет операнды регистр-регистр и регистр-в-память и память-регистр, но не память-в-память.
Итак, вам нужно загрузить ключ в какой-нибудь запасной регистр, например ::
mov eax, startAddress
mov ebx, key ; move key into a register, which can be XORed with [eax]
.while ecx < sizeOfSegment
xor [eax], ebx
По другому вопросу, вы действительно хотите сделать inc eax
или это должно быть add eax,4
? Я имею в виду, вы говорите «XOR расшифровать слово»: вы имеете в виду «слово», или «байт», или «двойное слово»?