Откъде да науча асемблиране на x64? [затворено]

Добре, знам C++, C#, Java и някои други езици и реших да науча асемблиране след това, но имам чувството, че съм ударил здрава тухлена стена още от самото начало. Просто имам нужда някой да ме насочи в правилната посока.

Ето въпросите:

  1. Казаха ми, че е по-добре да научите сглобяване от интернет, отколкото от книги, защото асемблирането зависи от вашия хардуер, а книгите са предимно остарели. Вярно ли е?

  2. Имам 64 битов процесор и използвам (или поне се опитвам да използвам) FASM. Къде мога да намеря необходимата документация?

  3. Напълно съм объркан, защото повечето от уроците, които съм гледал, дори не работят за мен. Това заради разликите в хардуера ли е? Как да намеря правилните уроци?

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

  5. Бихте ли могли да бъдете така любезен и да ми напишете проста програма в асемблиране (която работи на моя компютър) с разбивка в коментарите? Работя с 64-битов Windows 10 на моя процесор intel core i5. Моля те.


person AlanKalane    schedule 26.08.2015    source източник
comment
Можете да пишете прости програми на C и да имате изходния изходен код на компилатора на C. Използвайте ги като основа. Не сте споменали дали работите с Windows или някаква версия на Linux. В случай на Windows можете да изпълнявате 32-битови програми, но не и 16-битови програми, на 64-битови версии на Windows. За 64-битови версии можете да използвате Virtual PC или може би нещо като dosbox.   -  person rcgldr    schedule 27.08.2015
comment
Ако имате Windows 7 или по-нова версия, можете да получите Visual Studio for Desktop express 2015 безплатно. Това включва асемблер за 32 бита (ml.exe) и за 64 бита (ml64.exe) и добър дебъгер на ниво източник.   -  person rcgldr    schedule 27.08.2015
comment
software.intel.com/en-us/articles/introduction- to-x64-assembly   -  person Mahmudul Haque    schedule 27.05.2018
comment
youtube.com/ страхотен плейлист, за да започнете   -  person mr_pool_404    schedule 21.05.2020
comment
Не често се съгласявам с правомощията да затворя въпрос. Но, момче, това е лош въпрос! Провокира да напишеш книга, като поискаш коментар за объркани и противоречиви забележки.   -  person Albert van der Horst    schedule 16.02.2021


Отговори (1)


Мисля, че това е правилен въпрос. Може да е малко трудно да се намери актуална информация за асемблера.

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

    По принцип се уверете, че четете за 64-битово асемблиране.

  2. Защо не опитате онлайн ръководство. Имайте предвид, че асемблерите не са толкова различни, когато става дума за прости неща.

  3. Нямам Windows, но ако имате проблеми с някоя конкретна програма, можете да попитате за нея тук. Ще трябва да публикувате действителната неуспешна програма.

  4. Да, но трябва да го свържете с 32-битови библиотеки и да използвате 32-битовата версия на Win32 API. Но ако започвате, защо да програмирате през 80-те години, когато можете да работите с модерния набор от инструкции?

  5. Опитайте това.

Също така, ако ще програмирате в асемблер, горещо ви препоръчвам да вземете програма за отстраняване на грешки. Използвам GDB, който работи добре и е безплатен, в Windows можете да използвате програмата за отстраняване на грешки на Visual Studio, която е превъзходна.

person jforberg    schedule 26.08.2015
comment
В старите дни си спомням отстраняването на грешки без дебъгер. Той е много по-малко ефективен, но все пак беше много изпълним. - person Michael Petch; 27.08.2015
comment
@MichaelPetch Аз също го направих, но не бих го препоръчал, когато има страхотни безплатни програми за отстраняване на грешки. - person jforberg; 27.08.2015
comment
Предимството да не използвате дебъгер е, че вместо да използвате метода проба и грешка за изучаване на асемблиране (дебъгерите са чудесни за това), вие сте принудени да имате много по-добро разбиране на асемблерния език за определена архитектура. Тези дни отговарям на въпроси за асемблерен език на SO и вместо да отделям време да опитам да го компилирам сам, обикновено проверявам кода визуално за грешки. Ако имах избор между това да наема някой, който не може да отстранява грешки без дебъгер, и някой, който може (да приемем, че всичко останало е еднакво), бих избрал второто. - person Michael Petch; 27.08.2015
comment
@MichaelPetch се съгласи, но това беше в отговор на програмист, който никога не е написал правилна асемблерна програма. Също така, уменията за отстраняване на грешки в асемблиране се пренасят в C, тъй като вече можете да започнете да разбирате програми, за които всъщност нямате изходния код. Но те разбирам. - person jforberg; 28.08.2015
comment
Публикацията насърчава да научите за асемблирането на x64, но и двете връзки в нея водят до уроци за x86... какво? - person Zeks; 19.12.2019