我正在尝试使用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不是正确的值,谁能告诉我我应该在最后加/乘什么值才能到达数组的第二行。任何帮助将不胜感激。
答案 0 :(得分:0)
设法使它起作用。我要做的就是先添加这行代码;
mov edx, aLength
其中aLength是数组的长度,然后像这样使用它来获取数组的第二行;
mov byte ptr [Chars + ebx + edx], al