2012-06-13 5 views
2

Я запрограммировал в течение нескольких лет, в основном Java, но я также сделал некоторые другие языки, хотя я не могу с ними работать. Я интересовался программированием Ассамблеи, хотя, в основном, для удовольствия, и я хочу изучить его.Обучение программированию в сборке

Однако, с чего мне начать и что я должен читать. Я знаю, что существуют разные наборы инструкций и т. Д., Но помимо этого я мало знаю. У меня есть ПК с ОС Windows для разработки.

+1

Язык ассемблера зависит от конкретного процессора. Хотя я предполагаю, что вы можете запускать MS Windows на процессоре на базе IA32/x86-32/i386, MS Windows (или ее формы, то есть Mobile и Server), или доступна для IA64 (Itanium), ARM (Mobile), Alpha (возможно только NT) и, возможно, MIPS (?). – mctylr

ответ

4

Это не так сложно, как люди скажут вам. Программирование в сборке, по своей сути, просто записывает список инструкций (как в смысле ассемблера, так и в обычном). Это делает концептуально проще, чем Java, где у вас есть выражения и типы, а также структуры управления и объекты и всевозможные вещи, которые происходят за вашей спиной. В сборке все происходит точно так, как вы его написали. Даже если то, что вы написали, не имеет смысла.

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

Пример:

1. start with value -10 
2. add one to the value 
3. if the result was not zero, go to step 2 

В сборке можно написать

mov eax,-10 ; mov is short for move. 
step_2: 
    add eax,1 
    jnz step_2 ; jnz is short for jump if not zero 

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

В случае, если вам интересно, «как знает jnz , что не равно нулю?», Это работа с «флагами». add и многие другие инструкции устанавливают определенные флаги, которые могут использовать jnz и многие другие инструкции. Один из таких флагов заключается в том, равен ли результат вычисления нулю. (это немного упрощено, но на данный момент это должно быть сделано)

0

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

+0

Я бы поставил под угрозу то, что C++ и Java разделяют тот факт, что они оба являются языками ООП, и что C будет более распространенным языком более низкого уровня, чем тот, и он популярен (почти каждый из 16, 32, 64 известных и несколько 8-разрядных) в встроенной разработке на протяжении десятилетий именно по этой причине. И никакой сборки мусора. – mctylr

1

Если вы собираетесь программировать на x86, вы должны рассмотреть Intel Manuals. Они действительно полны и полны (в первый раз вы можете обходить Руководство по системному программированию). Первый том под названием Базовая архитектура, вероятно, является лучшим праймером, который я когда-либо читал о компьютерной архитектуре и сборке. Мне нравится Справочник по набору инструкций том, из-за псевдокода для каждой инструкции, которая поможет вам понять, какие инструкции действительно делают.

1

Я рекомендую сначала начать с тренажеров набора инструкций. 1) можно получить лучшую видимость в том, что происходит, меньше разочарований, начиная с 2) легче загрузиться, меньше разочарований, начиная с 3) вы не позволяете дыма из симулятора, есть ожидание брики или курительных досок, поскольку вы учиться на реальном оборудовании. У меня есть несколько симуляторов http://github.com/dwelch67 плюс один (lsasim), который я сделал только для обучения асму, дайте ему полчаса на выполнение уроков.

Хорошие наборы инструкций для начала - это msp430, большой палец (уменьшенный ARM, «большой палец большого пальца», не обязательно расширение большого пальца), mico8, avr. Simavr - это известный симулятор avr, есть много других. Skyeye, gdb , у qemu есть симуляторы набора инструкций, есть много других. У мама есть много возможностей, которые вы можете извлечь и использовать, проблема заключается в том, что они написаны для скорости и могут быть довольно сложными для извлечения и использования для этого. Сохраните x86 для последнего, если вы тратите свое время на нем. Сохраните mips для более позднего времени, так же как и полный набор инструкций для рук, которые, безусловно, стоит изучать, но mips - это аппаратно-дружественный набор команд за счет инженеров-программистов, поэтому сохраните его, пока у вас не будет другого опыта под вашим поясом. вы узнаете, что это становится проще, гораздо больше, чем языки программирования высокого уровня, когда вы изучаете новые.

Оборудование, с которым можно работать, когда вы готовы, есть плата msp430 за 4,30 доллара США, не может получить немного по этой цене. За $ 20 открытие stm32f4 - хорошая покупка. Многие ароматы arduinos или других плат avr (плата pro micro 3.3v и atmega32u4 составляют около 20 долларов США), идите на sparkfun.com для большей части этого материала. Платформы mbed хороши, но на выгодном конце, очень просты в использовании. клен-мини составляет 30 долларов США и может использовать тот же самый dfu-util, что и панель обнаружения stm32f4 для загрузки. не помещайте все свои яйца в одну корзину, существует более высокий уровень риска повреждения доски, укуса или курения, не покупайте 500 долларов США или $ 250 за то, что вам нужно, а не 5 $ 50. Получите пару плат msp430 и скажите stm32vl-обнаружение (10 долларов США, чтобы не путать с обнаружением stm8 vl).

2

Я рекомендую книгу «Программирование с нуля», предназначенную для новичков, заинтересованных в программировании сборки. Он охватывает основные понятия сборки с примерами. Я читаю его сейчас. Это очень хорошо !

+0

Okey, спасибо. Я это проверю – LuckyLuke

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