我正在尝试使用c ++和汇编创建加密/解密程序。我最初使用3个不同的数组,原始字符串,加密字符串和解密字符串。我现在正在尝试将其转换为2D数组,并且我在将加密字符添加到数组的第二行时遇到问题。
__asm
{
push eax
push ebx
push ecx
push edx
xor ebx, ebx
jmp checkend
forloop1: add ebx, 1
checkend: cmp ebx, aLength
jge endfor1
movzx ecx, byte ptr[Chars + ebx]
lea eax, EKey
push ecx
mov edi, eax
movzx eax, byte ptr[eax]
and eax, 0x3f
rol al, 1
mov byte ptr[edi], al
cmp eax, 0x00
jnz zerocheck
mov eax, 0x09
zerocheck:mov edx, eax
pop eax
sub eax, edx
rol al, 1
not al
mov byte ptr [Chars + ebx * 2], al // this line here
jmp forloop1
endfor1:
pop edx
pop ecx
pop ebx
pop eax
}
return;
我可以在第一行读取,这是存储输入字符串的位置。我已经标记了我试图将加密字符存储在数组的第二行中的行,但我尝试过的所有内容似乎都不起作用。 [Chars + ebx * 2]是不起作用的。我知道最后的2不是正确的值,任何人都可以告诉我应该在末尾添加/乘以什么值来到达数组的第二行。任何帮助,将不胜感激。
管理得到这个工作。我所要做的就是先添加这行代码;
mov edx, aLength
其中aLength是数组的长度,然后使用它来获取数组中的第二行,就像这样;
mov byte ptr [Chars + ebx + edx], al