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

时间:2019-04-18 21:21:59

标签: inline-assembly

我正在尝试使用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不是正确的值,谁能告诉我我应该在最后加/乘什么值才能到达数组的第二行。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

设法使它起作用。我要做的就是先添加这行代码;

mov edx, aLength

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

mov byte ptr [Chars + ebx + edx], al