Вопрос о коде сборки Pentium - PullRequest
       8

Вопрос о коде сборки Pentium

0 голосов
/ 25 апреля 2010

Я новичок в программировании сборки Pentium.

Не могли бы вы проверить, правильно ли я делаю перевод C в сборку?

Условие: 32-разрядные адреса, 32-разрядные целые и 16-разрядные символы.

char [5] vowels = "aeiou";

Перевести: гласные db "aeoiu"; или это должно быть "vwels dw" aeoiu "?

Как получить доступ к гласным [p]? Это байт [гласные + р * 2]? (поскольку 16-битные символы?)

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 25 апреля 2010

Мой синтаксис сборки Intel немного ржавый, но word[vowels+p*2], безусловно, более корректен, чем byte[vowels+p*2]. Вы должны умножить на размер элементов самостоятельно и указать тип читаемых данных (здесь, 16-битные величины).

Первый вопрос зависит от того, как ваш ассемблер интерпретирует "" после db и dw. Я не знаю об этом - я никогда не смешивал ассемблер и 16-битные кодировки - но я бы предположил, что dw является правильным.

Кстати, не забывайте использовать инструкцию MOVZX вместо 16-битных регистров, которые ассемблер может вам разрешить использовать. Использование 16-битных регистров в 32-битном режиме генерирует длинные инструкции, которые также выполняются медленно по ряду причин. MOVZX расширяет 16-разрядное считываемое значение, чтобы занять весь 32-разрядный регистр, что является правильным способом их обработки.

0 голосов
/ 25 апреля 2010

Да, n-й элемент массива типа T, начинающийся с arr, расположен по адресу памяти arr+n*sizeof(T).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...