2012-10-22 3 views
7

Я на этапе планирования изучаю язык ассемблера и хотел бы начать сборку x86, но вокруг меня компьютеры с 64-разрядными процессорами (i7, i5 и Core 2 Duo) и операционных систем. Поскольку я использую свои существующие машины для работы и не хочу, чтобы что-то пошло не так во время обучения/практики, я планировал купить или построить дешевую 32-битную систему, используя какое-то старое оборудование, которое я могу найти. Но до этого мне интересно, можно ли использовать виртуальную машину с той же целью. Могут ли выполняемые машинные инструкции ограничиваться только виртуальной машиной или они будут взаимодействовать с хостом виртуальной машины (то есть с моим компьютером)?Использование виртуальной машины для изучения сборки

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

+0

Вы можете использовать как 64-битный процессор с 32-битным кодом без проблем. Нет необходимости использовать VM – Gunner

ответ

12

Я настоятельно рекомендую:

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

2) НЕ изучите сначала сборку x86. (наличие аппаратного обеспечения является плохим предлогом для обучения x86). очень плохой архитектуры, сначала изучите хорошую архитектуру, затем, если вы потрудитесь учиться x86, изучите ее позже, а затем изучите 8088/86 с использованием одного из многих симуляторов/эмуляторов.

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

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

msp430 (или pdp11/lsi11), arm, thumb, avr, mico8 и список других намного лучше. за исключением mips, так как после того, как вы выучили некоторые из них, у него есть необычные функции, которые могут привести вас к неправильному мышлению для других архитектур.

Если ваши навыки программирования уже сильны, тогда вы можете забрать сборку в течение нескольких дней и иметь несколько-много наборов инструкций в течение нескольких недель.Если вы следуете этому руководству и узнаете несколько несвязанных друг с другом (хороших) наборов инструкций, тогда начните смотреть на x86, и вы точно поймете, почему я рекомендую изучать его последним или никогда. Как и 6502, pic и некоторые другие, у них есть историческая образовательная ценность, но из-за характера истории семьи вы не можете получить много от нее с точки зрения настройки/программирования. На самом деле я рекомендую прочитать «Zen of Assembly» и помню, даже когда написано, что речь идет о том, как думать о кодировании производительности в целом, а не о настройке производительности 8088/86.

Хороший способ научиться сборке - написать дизассемблер, проблема в том, что большинство наборов команд представляют собой переменную длину слова, а разборчики длины слов - это сложная проблема программирования. ARM и большой палец (не thumb2) являются фиксированной длиной слова и очень легко записываются дизассемблеры.

+0

Большое спасибо, разделите свои ценные предложения! Я искал Atmel Studio 6 IDE, который, похоже, поддерживает как ARM, так и AVR. Является ли это хорошей отправной точкой для симулятора (тем более, что я исхожу из фона Visual Studio) или мне нужно искать другие параметры? – Zishan

+0

У меня есть набор симуляторов в различных состояниях завершения и тестирования http://github.com/dwelch67 thumbulator в частности. или amber_samples, если вам интересно видеть внутри рабочего процессора. Существует один, не мой, называемый avrsim или что-то в этом роде, вы хотите иметь возможность наблюдать за выполнением инструкций в случае, если вас повесили или сорвали в сорняках. qemu слишком далек от этого, например, лучше научиться приводить в действие операционную систему, такую ​​как linux, чем изучение голого металла или сборки. –

+0

Чтобы уточнить.Изучение системных вызовов в ассемблере - это как изучение системных вызовов на любом языке, выбор операционной системы или пакета gui или все, что требуется, чтобы научиться использовать все api. То же самое с любыми системными вызовами, если в вашей системе есть какие-либо. Отделите образование системного вызова от набора инструкций. Вы не узнаете все системные вызовы для среды в asm через неделю, но вы можете быстро научиться asm, если вы уже знаете программирование в целом. –

2

Начало использования qemu. Это легкая виртуальная машина, в которой вы можете запускать программы (raw assembly, c, C++ и т. Д.) Без установки на нее ОС.

+0

Спасибо, JosephH. Попробует. – Zishan

3

Да, вы можете выполнить программирование сборки на виртуальной машине, и вы будете ограничены набором инструкций, открытым виртуальной машиной. Если вы выполняете 32-битную машину в среде с 64-битным хостом, вы увидите только 32-битные инструкции.

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

Для того, чтобы просто изучить сборку, я, конечно же, не стал бы писать загрузчики/операционные системы, так как у вас не будет доступа к отладчикам, а циклы тестирования будут длинными. Начните с http://www.nasm.us/, чтобы изучить сборку x86/x86-64, или посмотрите на http://wiki.qemu.org/Main_Page для выполнения таких задач, как программирование ARM.

+0

Спасибо, hexist. Ну, писать загрузчики и ОС могут быть целью позже, в зависимости от того, как хорошо это сделать, но я попробовал NASM, и по какой-то причине мой Windows 8 (x64), похоже, не нравится (проблемы совместимости). Я думаю, что 32-разрядная виртуальная машина, работающая под Linux, может быть лучше для этого. Дайте NASM и Qemu попробовать в этом. – Zishan

+0

Какие у вас проблемы с NASM? Я запускаю NASM и создаю 32-битные приложения на своей 64-битной машине. – Gunner

+0

@Gunner Всякий раз, когда я пытаюсь запустить NASM, я получаю следующее диалоговое окно «Программа или функция« nasm.exe »не может запускаться или запускаться из-за несовместимости с 64-разрядными версиями Windows. Обратитесь к поставщику программного обеспечения, чтобы узнать, 64-разрядная версия, совместимая с Windows ». В заголовке диалогового окна сообщения указано «Неподдерживаемое 16-разрядное приложение». На веб-сайте NASM нет указания, если загрузка составляет 16/32/64 бит. – Zishan

0

попробовать Marss86

MARSSx86 (MARSS для краткости) является инструментом для цикла точной полной системы моделирования архитектуры x86-64, в частности многоядерных реализации. Наша цель - создать простую, но эффективную полную систему архитектурного моделирования архитектуры , основанную на существующих инструментах.

0

Если вы пытаетесь выучить язык ассемблера относительно архитектуры Arm, то мое предложение изучить основы снизу сайтов .Здесь в них это объяснить, как to use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

также http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

поэтому со следующего сайта u можете попробовать на виртуальной машине, например qemu, без необходимости real hardware

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