2015-08-26 5 views
21

Хорошо, поэтому я знаю C++, C#, Java и некоторые другие языки, и я решил изучить сборку, но я чувствую, что с самого начала я ударил сплошную кирпичную стену. Мне просто нужно, чтобы кто-то указал мне в правильном направлении.Где узнать x64 сборку?

Вот вопросы:

  1. Мне сказали, что это лучше, чтобы узнать сборку из интернета, чем из книг, потому что сборка зависит от оборудования и книг, в основном устарели. Это правда?

  2. У меня 64-битный процессор, и я использую (или, по крайней мере, пытаюсь использовать) FASM. Где я могу найти необходимую документацию?

  3. Я полностью смущен, потому что большинство учебных пособий, которые я видел, даже не работают для меня. Это из-за различий в оборудовании? Как найти правильные учебные пособия?

  4. Могу ли я запустить сборку x86 и x32 на моем 64-битном компьютере?

  5. Не могли бы вы быть добрыми и написать мне простую программу в сборке (которая работает на моем ПК) с разбивкой по комментариям? Я использую 64-битную Windows 10 на моем процессоре Intel i5. Пожалуйста.

+0

Вы можете написать простые программы на языке C и получить исходный код сборки на выходе компилятора C. Используйте их в качестве основы. Вы не упомянули, работаете ли вы в Windows или какой-то версии Linux. В случае Windows вы можете запускать 32-разрядные программы, но не 16-разрядные программы, в 64-разрядных версиях Windows. Для 64-битных версий вы можете использовать Virtual PC или, возможно, что-то вроде dosbox. – rcgldr

+0

Если у вас Windows 7 или более поздняя версия, вы можете бесплатно получить Visual Studio for Desktop express 2015. Сюда относятся ассемблер для 32 бит (ml.exe) и для 64-разрядного (ml64.exe) и хороший отладчик исходного уровня. – rcgldr

ответ

25

Я думаю, что это правильный вопрос. Это может быть немного сложно найти последнюю информацию об ассемблере.

  1. Да. Много ресурсов, напечатанных и онлайн, описывают ассемблер i386 (x86), а не новый amd64 (x86_64). Многие вещи изменились, например. аргументы функции, которые были переданы в стек, но теперь они передаются в регистры. Это касается как Unix, так и Windows.

    В принципе, убедитесь, что вы читаете о 64-битной сборке.

  2. Почему бы не попробовать online manual. Обратите внимание, что ассемблеры не такие разные, когда дело доходит до простых вещей.

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

  4. Да, но вы должны связать его с 32-битными библиотеками и использовать 32-разрядную версию Win32 API. Но если вы начинаете, зачем программировать в 1980-х годах, когда вы можете работать с современным набором команд?

  5. Пробег: this.

Также, если вы собираетесь программировать на ассемблере, я настоятельно рекомендую вам получить отладчик. Я использую GDB, который работает хорошо и бесплатно, в Windows вы можете использовать отладчик Visual Studio, который превосходный.

+0

В старые времена я помню отладки без отладчика. Это намного менее эффективно, но все еще очень выполнимо. –

+0

@MichaelPetch Я тоже это сделал, но не рекомендовал бы его, когда есть отличные бесплатные отладчики. – jforberg

+1

Преимущество использования отладчика в том, что вместо использования метода проб и ошибок обучения сбоку (для этого отлично подходят отладчики), вы вынуждены лучше понимать язык ассемблера для конкретной архитектуры. В эти дни я отвечаю на вопросы ассемблера на SO и вместо того, чтобы тратить время, чтобы попытаться скомпилировать его сам, я обычно проверяю код визуально на наличие ошибок. Если бы у меня был выбор между наймом кого-то, кто не может отлаживать без отладчика, и тот, кто мог бы (предположим, что все остальное равно), я бы выбрал последнее. –