使用内联汇编访问/添加到2D C ++数组

问题描述 投票:-1回答:1

我正在尝试使用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不是正确的值,任何人都可以告诉我应该在末尾添加/乘以什么值来到达数组的第二行。任何帮助,将不胜感激。

inline-assembly
1个回答
0
投票

管理得到这个工作。我所要做的就是先添加这行代码;

mov edx, aLength

其中aLength是数组的长度,然后使用它来获取数组中的第二行,就像这样;

mov byte ptr [Chars + ebx + edx], al 
© www.soinside.com 2019 - 2024. All rights reserved.