2010-12-06 5 views
1

Я использую C и ASM {} в одном из наших классов, чтобы завершить проект ассемблера, где мы должны зашифровать входную строку, передать и расшифровать ее.Доступ к элементам массива в ассемблере

Ключ загружается в пустой массив символов C (длиной 20 символов), а затем используется позже с инструкцией XOR для шифрования.

Код для загрузки адрес массива:

Леа еси, ключ

который помещает адрес «ключ» в ЭСИ. Адрес здесь совпадает с адресом массива ключей, когда мы проверяем регистр в режиме отладки, поэтому мы знаем, что это работает.

мы EDX, [еси]

мы думали, что это сдвинет значение первого индекса ЭРИ в в EDX, так как мы используем «мы [еси], EAX» поставить значение а зарегистрируйтесь в массиве esi. Обратное казалось логичным.

Однако значение, которое фактически получает edx, это «875575655» (последний запуск) или аналогичный. Слишком велико для значения char.

У меня возникает ощущение, что мы можем получить доступ к массиву неправильно, Любые советы будут оценены.

Примечание: Обычно, чтобы увеличить индекс массива, мы просто используем inc esi, а затем читаем, как мы это делали выше, так мы планировали считывать из массива.

ответ

2

С mov edx, [esi] вы читаете DWORD (потому что edx размер - это двойное слово). Используйте mov dl, [esi] для чтения байт.

2

875575655 в hexa - 0x34303967, это будет строка 'g904'.

Чтобы объяснить: логически это символьная строка, вы можете загрузить сразу несколько символов. Таким образом, вместо 20-байтовых нагрузок и xors вы можете сделать 5 таких операций в DWORD.

Смежные вопросы