NASM. Первая программа. Установка среды. Компиляция Nasm на windows. Урок 1
#nasm #assembler #linker #nasmwindows
Поддержать проект - www.donationalerts.ru/r/bytepp
В этом уроке вы узнаете как скомпилировать nasm на windows. Как создать исполняемый файл из файла на ассемблере, как создать объектный файл. Мы изучим основные команды и структуру программы на NASM. Также мы установим среду разработки (Sublime Text 3 / VS Code) и установим NASM и линкер. Вы узнаете как правильно компилировать assembler чтобы он всегда запускался без ошибок.
NASM
nasm.us
GoLink
www.godevtool.com
Среды разработки
www.sublimetext.com/3
code.visualstudio.com
Подписывайтесь на канал, ставьте лайки, задавайте вопросы в комментариях!
Пікірлер: 141
С 23 Февраля, товарищи программисты!
@iXNomad
4 жыл бұрын
На 9:00 не могу добавить переменную, только изменить то, что лежит в Path (при двойном клике, там одна строчка). Windows 7. Так что либо nasm, либо линковщик. Как оба добавить хз.
@iXNomad
4 жыл бұрын
Решил проблему, достаточно просто перечислить пути через ";".
@iXNomad
4 жыл бұрын
hello_world.asm:24: error: symbol '_GetStdHandle@4' undefined
@iXNomad
4 жыл бұрын
Проблема решается сохранением .asm файла в формате UTF-16.
@PianoElipse
3 жыл бұрын
а я ведь смотрю это тоже 23
Ничего себе "строк немногими больше, чем в Python" 😄
@Bytepp
4 жыл бұрын
😂 чуть-чуть побольше)))
@mastersemenrossiyanin7848
4 жыл бұрын
@@myriaxont Скорость НАМНОГО больше и питон 2.хх делал ексешники, а 3.хх уже не может. А Ассемблер - делает и сом-файлы даже!
@adv1zz356
3 жыл бұрын
ASSembler)
@user-nj3gk2nn6b
2 жыл бұрын
@@adv1zz356 Pießün language
@nakidai
2 жыл бұрын
@@myriaxont А разве 586 это не 1 пень?
Клянусь, Вы не представляете, насколько помогли мне! Спасибо ОГРОМЕННОЕ :)
Лучшее видео по теме, которое я смог найти. Автор, ОГРОМНОЕ СПАСИБО!!
Редко пишу комментарии, но тут особый случай. Спасибо огромное за ролик, очень помогло!! 🤝
Это наверное единственное видео на ютуб, где человек всё до такой степени понятно изложил, что даже не много не по себе. 😅 Не, реально спасибо! На ассемблере вообще не понятно как писать, как компилировать, как что, как где, а у тебя всё понятно. 😊
Дай Бог здоровья)
Спасибо за ролик, хотелось бы продолжения на NASM!
Очень хорошие дельные объяснения с уместными комментариями и удачными демонстрациями без идиотских музыков. Респект!
@Rizzok
Жыл бұрын
Из детального там только как установить все добро. Не раскрыта тема, откуда он берет названия функций, что за @4 в названии функций библиотеки, что такое инструкция "db", "resd", зачем мы делаем "push" (и собственно куда) перед вызовом функций, каков должен быть порядок. Не раскрыта тема почему мы забираем результат из регистра eax... Короче говно, а не обучалка.
Чел, в институте начинаем изучать ассемблер Препод скинул свою идеешку, которая у меня не робит на компике решил найти альтернативу и нашел nasm а тут ты выпустил видос, да еще и прикольный спасибо, продолжай в том же духе, успехов!
@Bytepp
4 жыл бұрын
Спасибо)) тебе тоже успехов)
Скомпилировал, благодарю тебя
@Bytepp
3 жыл бұрын
Крутяк))
Спасибо за видео)
@Bytepp
4 жыл бұрын
Пожалуйста))
Отличное видео, спасибо за такой познавательный контент, вот, что должно быть в трендах ют, а не всякие хауди хо, которые занимаются не пойми чем.
Спасибо, лучший!
Слушай, а как же notepad++?
СПАСИБО ТЕБЕ ОГРОМНОЕЕЕ
ты бог:)
Я заметил что строку global Start можно вообще удалить, а программа всё равно будет работать. Важно только чтоб имя метки в команде golink /entry:имя_метки совпадало с имя_метки: в коде перед строкой push STD_OUTPUT_HANDLE
@Bytepp
3 жыл бұрын
Круто))
Давай есчё!!!!! Классное видео. Писал когда-то на турбо ассемблере, но на 64 уже не компилится.
Sposibo bolshaya
Будет в этом насме работать это?: section .data msg db "hello, world" ,0 section .bss section .text global main main: mov rax, 1 mov rdi, 1 mov rsi, msg mov rdx, 12 syscall ret или примерно так, а то ты сразу кучу системных вызовов показываешь, тогда уж проще через printf. Запиши лучше начиная с основ видео. Я пробую в убунуту делать, хотелось бы просто в винде, если этот насм такой код поддерживает было бы круто, а у тебя там еще перед самим .дата кучу подключений написано.
Привет, такой вопрос, а как сделать чтобы запустить именно существующий код асамблер? У меня имеется код, который должен рисовать квадрат из нолей, но одна проблема, я не знаю как это сделать через nasm, и вообще обязательно ли через него это делать я не знаю, вот, у меня windows 10 64 бит
А как связаться для консультации?)
Я не знаю разницы между масм32 и насм. Я могу запустить код из примера (17:05) на масм32? Просто исскал гайды по масму, недосмотрел и начал по вашему уроку изучать насм 😅.
@user-um2tz8oe9p
Жыл бұрын
Хоть уже год прошёл, но наверняка не можешь, должна быть какая-то разница. Хотя возможно она есть только маленьких аспектах.
Python exe: 7мб Assembly exe: 2кб
@Bytepp
3 жыл бұрын
жиза
@PianoElipse
3 жыл бұрын
пифон не компилируемый язык
@oppym
3 жыл бұрын
@@PianoElipse есть прога для компиляции в .ехе
@PianoElipse
3 жыл бұрын
@@oppym он не компилирует. пуинстуллер просто собирает твой пифон установленный на пука вместе с сурс кодом, который ты натыкал на клаве, и пихает это в ехе файл. Потом при открытии просто распаковывает всю это погонь в %temp%
@nakidai
2 жыл бұрын
@@PianoElipse Эт чё, если я испольню филе то я смогу прогать в идле и вообще там работать пока условно работает While true: Print(" ")
Посоветуй какую-то литературу по NASM для windows
А ты точно программист? Почему тема светлая, а?
@Bytepp
3 жыл бұрын
Не пали XD
Блин, хотел покодить на ассемблере какие-нибудь простенькие андроид-приложения прямо с планшета. Это так сложно оказалось, что ппц. Не сам ассемблер, а возможность создать что-то рабочее. Во всех руководствах в интернете речь идет прежде всего про работу с компьютера - Android Studio и т.п. Можно установить терминал линукс Termux и пытаться все это компоновать и собирать с терминала, но там вообще черт ногу сломит. Мне не удалось даже скомпилировать готовый простой прект Visual Studio. Пишет undefined symbol __android_log_write, хотя log.h файл есть. Видимо надо еще библиотек NDK всяких накачивать, и без них termux уже 700 мб весил. Не говоря уже про утилиты для сборки .apk. В общем хрень какая-то...
закинул пути к nasm и golink в path, все правильно через точку с запятой. Терминал не видит ни nasm ни golink ни другой. не нашёл ответа как исправить. Что делать???
Не получалось превратить объектный файл в экзешник, перелазил весь интернет... в итоге оказалось что забыл сохранить файл в саблайме)
@ElektroNIKGame
3 жыл бұрын
Спасибо тебе, добрый человек:D Очень помог!
Подскажите, пожалуйста, создал и asm и obj и exe файлы, но когда пишу имя exe-файла в windows PowerShell , он мне говорит, что test : Имя "test" не распознано как имя командлета, функции, файла сценария ил и выполняемой программы. Проверьте правильность написания имени, а также налич ие и правильность пути, после чего повторите попытку. строка:1 знак:1 + test + ~~~~ + CategoryInfo : ObjectNotFound: (test:String) [], CommandNotFou ndException + FullyQualifiedErrorId : CommandNotFoundException Что мне делать с этим???
@Winnni951
Жыл бұрын
Я разобрался
@egorkarpow3281
Жыл бұрын
@@Winnni951 Привет,как ты исправил ?
@egorkarpow3281
Жыл бұрын
Разобрался, чтобы запустить файл я писал следующее в консоле ./имя_файла(которое вы задали).exe
@Winnni951
Жыл бұрын
@@egorkarpow3281 а я пытался на диске D работать..
:)
Странно, у меня почему-то пишет 2 ошибки: mov dword [StandardHandle], EAX push NULL push Written push MessageLength push Message push dword [StandardHandle] У меня пишет ошибки: hello.asm:25: error: symbol `StandardHandle' not defined hello.asm:31: error: symbol `StandardHandle' not defined
@Bytepp
3 жыл бұрын
В названии функции ошибка похоже
@vitaliykonovalov4537
3 жыл бұрын
@@Bytepp Спасибо за быстрый ответ. Да, у меня была опечатка в названии StandardHandle в 17-й строке.
1) Для виндов NASM не нужен, это я ответственно заявляю, есть MASM, крайняя версия 14.24.28316.0, работает отлично. 2) VS Code можно русифицировать встроенными средствами, а саблайн нельзя.
@xow998
4 жыл бұрын
@Никита Миронов , читай внимательно, для ВИНДОВ NASM не нужен... Да вообще-то и для линукса тоже. Для виндов он не нужен потому, что лучшего компилятора ассемблера и не только ассемблера, но и Си, чем компилятор от микрософт, не существует в природе. Доказал это, к сожалению рано ушедший Крис Касперски, (не путать с автором антивируса), он же доказал, что набор компиляторов gcc, для линукса непревзойден в своем роде, но только для линукса!, компилятор микрософта в виндах его делает. Ну а так, позабавиться, ставь себе NASM, кто же мешает, только зачем, если ты программист, то у тебя на 100%, кроме тех , кому религия не позволяет, есть вижуал студия, в которой все есть, к которой прекрасным дополнением идет вскод.
@xow998
4 жыл бұрын
@Никита Миронов ,там есть gas , отличная вещь... Ты в чистом debian ? Сочувствую, .. значит религия.., проходил я это лет 15 назад. По дружески, бросай ты это, поставь 10-ку, запусти на ней WSL, а в нем хочешь дебиан, хочешь федорино горе, хочешь кал, да хоть убунту и живи в удовольствие. Потому что, как не крути, а в лине, а я его знаю с 96 года, ничего удобного ни для пользователя ни для программиста, по сравнению с окнами, ничего не сделали...
@xow998
4 жыл бұрын
@Никита Миронов , каждый должен пройти свой путь, удачи.
Warning! Specified entry point (Start) was not found.
ДАВАЙ ПРОДОЛЖЕНИЕ НА NASM!!!
сделал все точно по примеру но выдало ошибку в первой строке label or instruction expected at start of line что это значит и как решить эту проблему?
@Bytepp
3 жыл бұрын
Скорее всего с названием точки входа что-то не так
Чёт я запутался, что лучше для винды: NASM, FASM или MASM?
@tatsumoku
2 жыл бұрын
MASM
unable to open output file "one.obj"
Рекомендую Geany !!!
комментарии к коду через этот знак # можно писать ?
А не будет 64 бит программа работать на 32 битном процессоре даже если там нет операций, что есть в x64?
@beydaamo6387
2 жыл бұрын
не будет
@nakidai
2 жыл бұрын
@@beydaamo6387 Грусть пичаль(
Есть ли еще какие нибудь линкеры?
@brechender
2 жыл бұрын
Есть ещё ld и другие из набора gcc, но их не советую - слишком много проблем с линковкой сторонних dll
Error! Wrong extension given for source file - must be RC or RES что делать
@Bytepp
3 жыл бұрын
Неправильное размещение у файла, ошибка либо в строке для компиляции, либо в названии файла
проблема.Все оки кроме гоулинка ,вообще вставать не хочет,я его прописываю в path но толку 0,не является внутренеей или внешней командой в чем проблема???
Подскажите,как сделать так, чтобы консоль не закрывалась, когда запускаю .exe
@setwindowlongptr
3 жыл бұрын
Так и должно быть , программа сделала свою работу (вывела сообщение) и закрылась
@comachine
2 жыл бұрын
открывай её в консоли
@navi4046
2 жыл бұрын
Для этого нужно вызвать из winapi функцию ожидания нажатия на кнопку
@brechender
2 жыл бұрын
Через system вызови pause.
win32: fatal: more than one input file specified: helloworld.asm что значит?
@Bytepp
3 жыл бұрын
Не сталкивался с таким, но в гугле есть результаты по этой ошибке otvet.mail.ru/question/80408474
а что будет если в насм вставить код из фасм к примеру?
@unknown37284
Жыл бұрын
Комп рванёт и уничтожит планету
@inc0gnit095
4 ай бұрын
Просто скажет что-то типо: syntax error String 1 String 2 String 3 И так до последней строчки кода
А почему ты используешь golink вместо ld?
@inc0gnit095
4 ай бұрын
Потому-что ld встаёт только на линуксах, там она по дефолту. А вот в винде, нужно скачивать компилятор gcc, потом распаковывать, потом в системные переменные, потом перезагрузку - это гемор, гоулинк намного лучше справляется на винде, а лд лучше на линуксе
Что-то я установить не могу нормально. Не находит мне этот насм в вс
Почему у меня obj файл - это 3D объект, а не объектный файл?
@Bytepp
3 жыл бұрын
Это расширение объектного файла
А Я в своё время MASM32 изучал( не знал, как запилить NASM
@Bytepp
4 жыл бұрын
Они в чём то похожи, но и своих нюансов достаточно много)
@user-tn3bw1wg8w
4 жыл бұрын
@@Bytepp видел... Интересная тема, ассемблер) так как, можно сказать на прямую с железом работаешь 👍 спасибо за ваше внимание и за ваш ответ, к моему комментарию. Кстати всех с праздником✊
@Bytepp
4 жыл бұрын
@@user-tn3bw1wg8w, с Днём Защитника Отечества!😎
Я вообще на петухоне прогаю, но решил посмотреть чем занимаются сантехники на низком уровне)))
Жаль fasm не 64 битный
Не понял создать файл в nasm и перекинуть в sublime или что?(на 3:10) И еще я ничего пока что не знаю из команд push, call, ret, mov((
@Bytepp
4 жыл бұрын
Простой создай новый файл в саблайм (Ctrl + N) сохрани его как .asm и напиши пару команд в нем, чтобы проверить работает ли подсветка
неееееее с моего питончика и С++ переходить на практически машинный код не охота
ЧТО МНЕ ДЕЛАТЬ У МЕНЯ ЛИНУКС Я СОЙДУ С УМА
С 15.30 размитое видео
@kirixoto
3 жыл бұрын
printf("и в чём проблема?");
@mykolaovdiichuk5724
3 жыл бұрын
@@kirixoto ето видать у меня телефон подвис. сори
@kirixoto
3 жыл бұрын
@@mykolaovdiichuk5724 if comment == "ето видать у меня телефон подвис. сори": print("ничего бывает :)")
Сэнк вери мач
автор хардкорщик прогаммирует с светлой темой
@matveyyatskin4312
Жыл бұрын
Ага. Глаза вытекать уже хотят
А смысл писать на ассемблере если ты библиотеками пользуешься а не сам к железу обращаешся. На то С или С++ есть.
@brechender
2 жыл бұрын
Например на asm месенджбокс весит 2,5 кб, а на плюсах все 10. А с железом работать винда не позволит. Если например загрузить нужный асм код в мбр, то запустится легко. С кодом на плюсах такое не прокатит)
вирустотал показал наличие вирусов на обоих ехе-шниках
2 килобайта!
Бухой смотрел, ничего не понял)))
@Mikola_Naumenko
4 жыл бұрын
Реальность, это иллюзия, вызванная длительным отсутствием алкоголя, в коре головного мозга
Зачем??
@Bytepp
4 жыл бұрын
Посмотреть и понять как всё работает на низком уровне) + интересный скилл в копилку скиллов
скомпилировал запустил и ничего не увидел
@ivanvana
3 жыл бұрын
Ты в командной строке запускай
скомпилировал и запустил и мгновенно и ничего не увидал
@Bytepp
3 жыл бұрын
Видимо не правильно что-то сделал
@youandoneeye7253
3 жыл бұрын
@@Bytepp уже все сделал
@zeroprin6440
2 жыл бұрын
@@youandoneeye7253 Как разобрался?
@gooseob
Жыл бұрын
Ты просто файл открыл или что? Надо через консоль
заустил екзешник и ничего не увидел
Что значит "все буквы английские"? Английских букв ещё не придумали. Буквы эти латинские. И если бы автор не пытался их каверкать по английской традиции, переплёвывая в этом самих англосаксов, слушать было бы приятнее. Выберите, говорит, переменную Пэээ. Что ещё за пэээ? И выбирает Path. Path - это пэээ? Мдааа...
@dmeik7637
9 ай бұрын
Кто-то решил докопаться.