Софт - Архив

программы - новости - IT обзоры - статьи

ЯЗЫК АССЕМБЛЕРА С НУЛЯ #1 НАЧАЛО

ЯЗЫК АССЕМБЛЕРА С НУЛЯ  #1 НАЧАЛОАссемблер с нуля. Язык, на котором давно никто не пишет обыденные программы, но язык, который делает обыденного программиста профессионалом. Любая программа превращается в набор инструкций процессора. Язык ассемблера - тот самый набор инструкций, только в удобной для человека форме. Понимая как работает ассемблер, вы понимаете как работает программа. Вход в ассемблер сильно отличается от привычных нам языков программирования, поэтому начинать мы будем с самого нуля - с 16 битного ассемблера под ms-dos. Программы из видео ms-dos, masm6.11, winimage - https://cloud.mail.ru/public/zp6Q/Xf5uqsahJ/ vurtualbox - https://www.virtualbox.org/ 03:23 Набор инструкций 04:27 Что будет в этом видео 05:08 Ассемблер - это 05:56 Семейства процессоров 08:00 Регистры 10:24 Режимы работы процессоров 12:03 Компиляторы 13:22 Формат записи команд (mov) 15:05 Установка ms-dos 19:41 Сегменты программы 20:32 Адреса 23:48 Создание сегментов 28:06 Загрузка адресов в сегментные регистры 28:29 Группы 29:09 ASSUME 30:32 Директива .model 32:06 Упрощенные сегменты 35:47 Исполняемые файлы 36:43 Загрузка программы в память 41:30 Процесс компиляции 44:49 Написание первой программы

Дата: 2023-10-03 Alek OS

Рейтинг: 4 из 5
Голоса: 2




Комментарии и отзывы: 35

1. Т.
Как на тебе скотина писать?-кратко о моей работе на ассемблере после этого ролика. Почему-то выскакивает ошибка bad command or file name. Хотя я правильно указал имя, как на видео с учетом ret все написал. Все равно пишет bad command. Ладно надеюсь я смогу сам найти решение. И эта скотина ассемблерная, заработает как надо.
Обновление: Я начал более вдумчиво все устанавливать. Когда я уже устанавливал masm, заметил что не все файлы устанавливались как на видео, и уже запуская установщик он на последнем этапе заявил что файл ml.(расш) с ошибкой, и ты либо пропускай его установку, и тогда не сможешь посмотреть работу кода, или иди лесом. Крч, взял с инета мазм 611, и сделал как на видео. И все норм, установился без проблем. Но теперь ml ошибок не выдает, но при открытии ком файла теперь выдает в командной строке ничего(
Ну хотя бы в ассемблере высвечивается привет мир.
P.S. Автору респект и спасибо за этот ролик. Что разжевал и показал, как работать с тем же Dos, а так же с ассемблером.
2. Алексей
Перед тем как рассказывать нубам о том, что у процессора есть набор регистров, было бы неплохо, чтобы ты им вообще расскзал что такое регистр. А чтобы расскзать что такое регистр, сначала надо рассказать что такое триггер (не тот, что в базе данных, например, а к примеру RS- или D- триггер). А чтобы рассказать о том, что такое триггер, надо рассказать о том, что такое строб-сигнал, что такое фронт и срез сигнала, что такое тактирование и что именно представляет собой та самая тактовая частота процессора. А до этого было бы неплохо объяснить нубам машинную арифметику и дискретную математику. Прикладная теория цифровых автоматов тоже бы не помешала. Ну ты понел... Это так, если нуб действительно хочет знать как оно усё там внутре работает )
И да, если уже залез в тему, то называй вещи правильно - транслятор, а не компилятор в случае с ассемблером )
3. Artyom
Мне 43 и тот самый zx-spectrum в начале 90х заставил меня узнать что такое ассемблер. В свои 12 лет смог осилить только бейсик но когда старшие ребята показали насколько быстрее работает исполнение моих программ на ассемблере я был в шоке. К примеру, отрисовка экрана с разрешением в 256х128 пикселей на бейсике могла длится больше двух минут, а команда на ассемблере LDIR перебрасывала данные в экранную область (т.е. картинку) памяти мгновенно, доли секунд. Челюсть отвисала от таких скоростей. Но разобраться в то время в таком возрасте было почти невозможно. Просто писали какие-то шаблоны программ с каких то умных журналов не понимая как оно работает. И сейчас, просмотрев этот видос - понял, что это даже была для меня не верхушка айсберга ))))). ..... "Stop tape then press any key." )))))
4. Ian
Уже было сказано, я лишь дополню, таки да, также как и многие программил на Z80, это офигенный процессор для тех лет, да было всего 65к всего и 48к доступного, но в том то и соль, чтобы по максимуму это дело использовать.. смутно помню те времена, но начинали то мы не с ASM, ассемблер был лайтовый, а начинали с машинного кода команд...я книгу уже не помню по ZX но в ней был именно даны именно низкоуровневые обращения к процессору, а поскольку и компьютер был не всегда доступен, команды тупо на листе бумаги писались.. ничего сложного если понимать логику процессора.. асм конечно все это в разы упростил, но как правильно сказано в видео, по сравнению с другими языками мы были скорее динозавры.. протопрограмееры))))
5. Kondera
Писал в 80-ые и 90-ые на Ассемблере. Использовал TASM и MASM. В настоящее время не вижу смысла в изучении ассемблера от слова вообще, поскольку современные оптимизирующие компиляторы дают код, который в 99% будет выполняться гораздо быстрее, чем если написать аналогичную программу на ассемблере. А уж в кровавом Enterprise (80% рынка) вообще не до ассемблера, там задачи другие. Да что там, ассемблер сейчас практически не используется ни для встроенных систем, ни для систем реального времени. Определенные области применения, конечно, остаются, например для написания фрагментов ядра операционных систем, обработчиков прерываний, программ ROM в конце концов, контроллеров встроенных систем иногда.
6. Денис
Насчёт высокого порога входа: мне кажется с таким высоким порогом было лучше, потому что работать программистами шли именно те люди, которым это действительно интересно, люди, которые стараются построить максимально эффективный алгоритм, а не просто заставить кусок кода работать. Сейчас IT-сферу заполонили люди, имеющие лишь одну цель - получение высокой зп. Сомневаюсь что качество кода таких специалистов имеет хоть сколько-нибудь высокий уровень, и что они приносят больше кода чем уносят нервов более старших специалистов. Не говоря уже о вкладе своей души...
7. Andrej
Я считаю, изучать ассемблер наиболее эффективно с простых устройств. Например, ассемблер для 8-битных микроконтроллеров PIC содержит всего 35 команд. На такой мелочевке (PIC10F200, к примеру) даже на Си особо не развернешься, приходится экономить каждый байт и даже бит. Это тот же компьютер, но в максимально упрощенном виде. И чтобы писать под него на ассемблере, хочешь-не хочешь, а придется сначала изучить устройство микроконтроллера и булеву алгебру. Поняв принципы работы на ассемблере под такое простое устройство, потом проще вникать в работу на компьютере.
8. gam5
Респект Прям ностальжи. В школе в восьмом классе увлёкся, был spectrum, сидел ночи на пролёт перед телевизором, чуть на 2-й год не оставили из-за прогулов. Сначала Basic, потом решил сделать игру тетрис и перешёл на ассемблер. Прикол в том что никакого подобия ide не было, поэтому просто выучил машинные коды всех команд и вбивал байт код напрямую в память. Приходилось держать в голове длину команды, операндов и всё такое. Тот ещё мазохизм. Код не сохранял, не было мафона, и каждый раз все приходилось по новой. Зато как радовало когда получалось
9. Julas
Однозначно придётся ещё несколько раз пересматривать, т.к. с первого раза я усвоил только азы, но что хочу сказать - очень детальная проработка, доходчиво. Иногда не хватает только разве что объяснений ЗАЧЕМ нужно деление на Сегменты, почему 16-ричная система и 100н, а не десятичная. Однако ж, действительно эталонная подача. Лакуны я заполню так или иначе, но хочу выразить свою безмерную благодарность вам за то, что показали, что дверь в программирование на ассемблере доступна людям
10. Alexandr
Ностальгия. Как же давно это было... начало 90-х. Меня, студента вуза, отправили на практику в вычислительный центр. Походит ко мне один из сотрудников и спрашивает, знаю ли я ассемблер. Я со вздохом говорю, что знаю. Он просит меня разобраться в его программе, написанной на ассемблере, которая не работает и он не может понять почему. Намного проще было переписать эту программу самому. Но обижать человека не хотелось. Сейчас я понимаю, что так решили меня проверить )))
11. Krycip
Туториал очень крутой
У меня возникли две проблемы, которые я решил. Напишу тут, вдруг кому поможет.
Первое это E_FAIL 0x80004005 при запуске виртульной машины. Я в биосе поставил "интел виртуализацию" на True, и все заработало.
Второе при компилации программы возникает ошибка "error A1020: cannot fild link.exe" в папке BIN нет файла LINK.EXE, он находится в папке C:\MASM611\BINR, вам нужно перейти в папке BINR и скопировать файл LINK.EXE в папку BIN, команда: xcopy /s LINK.EXE C:\MASM611\BIN
12. Alex
Не ломай будущим программистам мозг В наше время работа с MS-DOS осталась только у BIOSо писателй, с коими много работал и у старпёров, закостеневших мозгой ещё в 90е (таких тоже ещё хватает). Изучать ассемблер рекомендую с микроконтроллеров Хоть с Arduino за 150р плата, хоть с полноценным ARM типа STM32H4 (есть за 150р на алике).
Там всё на порядок наглядней и функциональней: записал в порт - горит светодиод, записал в другой моторчик поехал ))
13. Андрей
30 лет назад писал на асм прикладные программки для себя. Потом был период делфи, паскаль, что то еще. Но в итоге остановился на cpp. По мне, так довольно удобный, защищенный язык и вставки на асм можно делать, только необходимости особо нет. Да, это круто, когда твоя прога.ком занимает 300 байт и чтото вменяемое делает, но затраченное время на написание и отладку в итоге отбивает всякое желание. В общем сипипи лучший .
14. Mark
Сейчас все используют Windows а не Doc мне было бы очень интересно посмотреть как происходит взаимодействия с окнами на ассемблере . У меня возник вопрос почему на doc уже есть компилятор разве программисты не собирали программу в ручную да и сама тема как работает компилятор на низком уровне тоже очень интересна и очень актуально потому что у нас нет ни одного полностью русского компилятора у китайцев есть а у нас нет
15. kpanat
Да язык ассемблера оч простой, я бы даже сказал один из самых простых... В нём нет никаких хитростей. Но этим он и сложен... В алфавите тоже всего 32 буквы а сколько слов сожносоставить а предложений ещё больше. и потому программы на ассемблере оч сложные. И знание языка вам никак не поможет в них разобраться... Это закономерность такая, чем сложнее язык тем проще программы и наоборот. Но не всегда...
16. Анатолий
Вы обладаете первоклассными мозгами
Таких людей мало. Берегите себя
Я это до конца своих дней не освою
А Вы не могли бы решить мою проблему??
Есть .exe файл размером 113к в шестнадцатеричном коде для процессора 8086.
Ещё подсказка: исходный код написан на Паскале с ассемблерными вставками.
Нужно этот самый исходный код восстановить.
Сколько это удовольствие будет стоить??
17. Станислав
Интересно конечно, но нафига сейчас нужен ассемблер на ПК? Я даже под 8бит контроллеры на С++ пишу. Современный Gcc очень хорошо оптимизирует код. Главное знать, чего и когда нельзя писать контроллеру на С++. Например, виртуальные функции стоит использовать осторожно, так же как try-throw-catch, и new-delete. Это не щначит, что их нельзя использовать. Просто нужно знать как их использовать нельзя.
18. Сергей
Всё-таки классная магия. На ZX-Spectrum осваивал Assembler. Даже на учёбе пригодился, хотя там был КР580ВМ80. Тот же ZX80, только с урезанным набором команд. Ещё и синтаксис ассемблера идиотский. Одно и тоже действие описывалось разными мнемониками в зависимости от операндов. До Assembler на 486 так и не дошёл, хотя книгу по нему купил в 90-х и даже пробовал читать. За ролик - спасибо Ностальгия.
19. custom
Я занимаюсь разработкой кода под микроконтроллеры на С\С++. Очень хочу постичь Ассемблер, так как он помогает добиться максимальной производительности. Сейчас мало кого кто пишет код можно назвать трушными кодерами, ибо это недоразвитые олени научившиеся прогать на каком нибудь питоне и на этом всё. Истинный же программист всегда идёт на самый низкий уровень.
20. Aleksey
ностальгично) вспомнил 90-е, студенческие лабы по asm)) Обращение к int, вывод пикселей в 16 цветах в видеопамяти, COM LPT портам...было время..А потом был arm ассемблер (точнее архитектура(, гораздо запутанней чем х86. А потом все это ушло в историю и ностальгию. Поезд прогресса умчался далеко вперед.. Последний use case был кусок кода на arm asm в андроид приложении лет 5 назад)
21. Владимир
А вот первый язык, который я изучил, это ассемблер. Далёкий 1986 год. Я купил приставку к телевизору. Восьмиразрядном... В комплекте был Ассемблер и Бейсик... Ассемблер мне показался поначалу проще...
Но вот на Ассемблер я написал может три, может четыре программки...
Но этот язык меня многому научил.
Язык простой, если ты знаешь как устроен компьютер...
22. Alek
ВАЖНО
В видео есть 2 неточности, возникшие на этапе монтажа.
Первое, это при установке компилятора во 2 окне выбираем второй пункт (для ms-dos).
Второе - в программах типа com в конце ролика строка "message db 'Hello, World'" должна была идти после команды ret.
Банальная невнимательность с моей стороны, ибо человек всегда будет ошибаться.
23. Cтанислав
Чтобы понять назначение асма надо вернуться просто лет на 25 назад: я не рискнул написать курсовик просто на си или паскале, хотя мне всего надо было распаковывать один за одним pcx картинки, чтобы сделать из них видеопоток в реальном времени - буквально несколько строчек на асме и вуаля - распаковка очередного кадра готова )
24. privedmidved
Неточная аналогия)) Ассемблер vs высокоуровневые языки это не попытка разводить костер палочками, а скорее ремесленник vs промышленник. Все-таки ассемблер, как понимаю. совсем уж ля "ручного составления программы там, где высочайшая ответственность. А вот производительность, увы, низкая. Всё по законам промышленности.
25. Maxim
Я помню баг нашёл при сборке U-boot на ARM с использованием GCC-5.1. Разработчики GCC убрали флаг выравнивания адресов функций по умолчанию, что приводило к сбросу процессора сразу при запуске... Боль и страдание - это патчинг GCC с принудительным включением флага для сборки всей Yocto ... Так что выравнивание - очень критичная вещь для ARM
26. Lees
Вкину 5 копеек по поводу обучения. Самый низ, который я трогал, это си. И после нескольких лет проги на высокоуровневых языках идти на дно разбираться в ассемблере гораздо увлекательнее и интереснее, чем с него начинать. Да и что говорить, гораздо проще. Начинать с низкого уровня - убить в себе всё желание прогать
ИМО
27. Igor
Отличное видео. Но также хотел бы (просто справедливости ради) добавить, что для работы ассемблерных программ и MS DOS не нужен. Он нужен только для компиляции. Можно воспользоваться прерываниями BIOS, которые предоставляют более расширенный функционал для работы с текстом и графикой, чем у MS-DOS.
28. Антэк
Крайне редко увидишь такого качества материал. Премного Вам благодарен. И да, я полностью согласен с Вами, по поводу современного уровня программирования. Погоня за прибылью - убила, по сути, программирование, превратив его в бизнес. Нас же учили, что программист - это поэт-шахматист.
29. Danil
куча воды и напыщенных рассуждений о том, как важно понимать, как программа работает внутри. При этом по теме практически ничего нет. А сравнивать ассемблер с фундаментом и говорить, что без этого тебе как программисту никуда, может только далекий от реальной разработки теоретик)
30. HyperText
Все по делу, но интонации расставлены конечно ... Новички могут подумать, что assembler это база с которой нужно начать, нет, если ты хочешь в Game Dev, Front/Back, Mobile Development и подобное, то тратить год на assembler это гиблое дело, в реальности тебе это не понадобится.
31. Evgeny
Добро пожаловать в LLVM ))
А и да... сведения и опыт которые вы получите для одного процессора не применимы к другому. Подходы тоже. Если не верите - попробуйте после DOS написать под арзитекутры: MIPS, RISC-V, ARM.
Труд титанический. Автору огромный респект
32. Vasylich
Самая главная проблема языка Ассемблера в несовместимости или точнее в непереносимости. Каждый чих задачи или оборудования потребует написание кода с нуля. Даже в мс-дос для переносимости программ создали набор документированных прерываний.
33. STALKER
Самый лучший видос по асемблеру это видос, где чувак собирал комп на 6502. Но тут тоже очень неплохо. Проблемой выбора обычного ПК в том, что они очень сложны. У 6502 набор инструкций умещается на одном листе А4 с подробным описанием.
34. Yu
Сто процентов, ассемблер рулит, когда учился всё это проходил и сейчас по сути всё равно на чем писать. Очень помогает писать на разных языках АСУ тп. Программирование в общем понимании бросил. Автоматизация производства рулит
35. MaxCMC
Когда я познавал ассемблер, у меня был ZX-spectrum совместимый комп "Дельта" и документация к нему, где в конце в приложении были описаны команды ассемблера для Z-80 и их шестнадцатеричные коды.... Для меня это была магия.
Добавить отзыв, комментарий




Софт - Архив
Сайт использует технологию Cookie для сохранения настроек пользователя.