2009-02-22 2 views
7

В настоящее время я изучаю язык ассемблера. Я использую Gas на Linux Mint (32-разрядный). Использование этой книги: Programming from the Ground Up.64-разрядный Linux, язык сборки, проблемы?

У машины, которую я использую, есть процессор AMD Turion 64 bit, но я ограничен 2 ГБ ОЗУ. Я думаю об обновлении моей установки Linux до 64-битной версии Linux Mint, но я беспокоюсь, что, поскольку книга ориентирована на 32-разрядную архитектуру x86, примеры кода не будут работать.

Так два вопроса:

  1. Является ли вероятность каких-либо проблем с образцами кода?
  2. Кто-нибудь здесь заметил какие-либо преимущества в общем использовании 64-разрядной Linux более 32-разрядной (я видел некоторые потоки в переполнении стека, но в основном они связаны с Windows Vista и Windows XP.)

ответ

4

Ваши примеры кода должны все еще работать. 64-разрядные процессоры и операционные системы все еще могут запускать 32-разрядный код в виде «режима совместимости». Примеры сборки ничем не отличаются. Возможно, вам придется предоставить дополнительную строку сборки или две (например, .BITS 32), но это все.

В общем случае использование 64-разрядной ОС будет быстрее, чем использование 32-разрядной ОС. x86_64 имеет больше регистров, чем i386. Поскольку вы работаете над сборкой, вы уже знаете, какие регистры используются для ... Наличие большего количества из них означает, что меньше вещей нужно перемещать и выходить из стека (и другой временной памяти), поэтому ваша программа тратит меньше времени на управление данными и больше времени на эти данные.

Редактировать: Для компиляции 32-битного кода на 64-битной ОС Linux с использованием газа, вы просто использовать аргумент командной строки «--32», как отмечено в the GAS manual

+0

большое спасибо, самый полезный! – bplus

1

Даже если вы используете Linux 64bit, его можно скомпилировать и запустить на нем 32-битные двоичные файлы. Я не знаю, как хорошая поддержка Mint для этого, я полагаю, вы должны проверить.

64-разрядный ассемблер, однако, не полностью совместим с 32-разрядным, например, у вас разные регистры. На обеих платформах есть некоторые конкретные инструкции.

Я бы сказал, что переход на 64-битный вариант не имеет большого значения. Вы все же можете записать 32-битную сборку, а затем, возможно, попытаться запустить ее как 64-битную (не слишком сложно), как источник еще большего количества программирования/обучения.

+0

спасибо, очень полезно! – bplus

+0

Я вижу, как вам больше нравится другой ответ, но если вы считаете, что мой полезен, вы также можете дать ему +1 голос;), но я тоже доволен вашим комментарием :) – ypnos

1

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