Биты байтов слова и мечи - когда использовать что в сборке? - PullRequest
3 голосов
/ 28 февраля 2012

Я пытаюсь изучить ассемблер (больше похоже на борьбу), и я наткнулся на типы данных байты, слова, слова и т. Д.

Что меня действительно смущает, так это то, когда вы знаете, как использовать один над другим. Очевидно, что вы хотите использовать наиболее консервативный вариант, но как мне узнать, что нужно выбрать байт вместо слова? Например, 1 слово = 16 бит или 2 байта. Означает ли это, что я могу вписать 16 символов в одно слово? Таким образом, чтобы сохранить алфавит, мне нужно объявить 2 слова?

То же самое касается регистров (16-битных, 32-битных и 64-битных). Я знаю, что вы можете использовать меньшие регистры, такие как al и ah вместо eax, когда вы манипулируете данными меньшего размера. Для 16-битного регистра вы можете переместить в него тип данных, больший чем слово, потому что, поскольку он 16-битный, он может соответствовать 16-битному слову?

Обернуть голову вокруг всей этой концепции сложно. Если у кого-то есть хорошие ресурсы или информация, на которую я могу посмотреть, это было бы здорово. Ура!

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Выбор правильной ширины данных для использования может быть трудным на первый взгляд, но это будет легко, когда вы привыкнете к этому. Вот несколько вопросов для рассмотрения, в первую очередь упомянутых наиболее важных.

Будет ли алгоритм работать правильно? Скажем, вы хотели вычислить 180 × 247 и распечатать результат. Каждый операнд помещается в неподписанный байт, а продукт - нет. Или, скажем, вы хотели представить размер файла, который легко может быть много мегабайт. Тогда вам понадобится что-то более широкое, чем 16-разрядное целое число, чтобы представить размер.

Что такое формат ввода / вывода? Если вы ожидаете, что другой код вызовет вашу функцию с массивом байтов, то вы должны прочитать элементы данных как байты; другого выбора нет. Однако вы можете временно преобразовать в более широкое представление для обработки.

Сколько памяти он будет использовать? Если у вас есть миллиард записей в базе данных и каждая запись использует байт, то общий размер данных будет 1 ГБ. Если бы в каждой записи использовалось двойное слово, общий объем данных составил бы 4 ГБ. Небольшие различия при умножении на огромные числа дают огромные различия.

Таким образом, на самом деле не имеет значения, какую ширину данных вы используете, если вы можете писать правильный код, взаимодействовать с другим кодом и поддерживать достаточно малое использование памяти, чтобы вы могли запустить свою программу. Поэтому использование dword по умолчанию не будет плохой идеей.

0 голосов
/ 28 февраля 2012

Немного не символ. Это одна двоичная цифра, 0 или 1. Два бита - это 00, 01, 10 или 11. Читайте двоичную арифметику (и преобразование в / из десятичного числа для проверки ваших ответов) и представления типов данных. Это базовые вещи, не продолжайте без полной уверенности, что такое байт и какие значения он может содержать и для чего вы можете его использовать.

word - это тип данных, 16 бит или 2 байта в нашем случае. Поэтому, когда мы перефразируем ваш вопрос, он становится:

Для двухбайтового регистра вы можете переместить тип данных больше two байтов в него, потому что, поскольку он два байта , он может вмещать два байта пространство

Это бессвязность, упомянутая @Ignacio Vazquez-Abrams.

...