Доступ к 2D-массиву C ++ и его добавление с использованием встроенной сборки - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать программу шифрования / дешифрования с использованием 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 голосов
/ 19 апреля 2019

удалось заставить это работать.Все, что мне нужно было сделать, это сначала добавить эту строку кода;

mov edx, aLength

, где aLength - длина массива, а затем использовать ее для получения второй строки в массиве, например:

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