Комментарии 58
Желающим приобщиться к теме я бы лучше порекомендовал вооружиться NASM/SASM и либо книгой «Assembly Language Step-by-Step» для совсем начинающих, либо «Assembly Programming and Computer Architecture for Software Engineers» для тех, кто покрепче.
32-проще - по факту не приходится возится с сегментами, меньше ограничений по адресациям через регистры. Под винду практичнее (асм вставки и отладка 32-битных приложений).
Всё зависит от цели изучения ассемблера. Использование ассемблера на практике, как правило, не ограничено одной архитектурой. Поэтому полезно и x86/x64 изучать, и ARM, и прочую экзотику.
А чтобы понять базовые принципы, то можно и с MSIL начать.
MSIL и java bytecode не очень подходят в силу того, что это ассемблеры для стековых виртуальных машин
Я бы голосовал за современный 64-битный ARM. Он банально проще.
Мдаа... Накосячили в статье знатно...
DosBox нужен только для 64-разрядной винды. Если установлена например Win7 x32 то ДОС-программы запускаются там без эмулятора.
d: это не реальный диск на вашем компьютере, а виртуальный - D: это просто сопоставленное имя указанному пути (виртуальный диск это обычно файл эмулирующий диск)
Про CS,DS и SS - это просто песня... Назвать регистры местом в памяти... В русском языке это секция кода, секция данных и область стека.
Вы имеете ввиду, что нужно уточнить в статье "не качайте DOSBox, если у вас Win7?
Спасибо за замечание.
Согласен, формулировка не корректная.
Начиная с XP виндовс выпускался в 32-битной и 64-битной версиях (это можно увидеть в свойствах системы). Но в 64-разрядой винде запуск 16-битного приложения дос вызывает ошибку, поэтому приходится извращаться ставя эмуляторы (DosBox) или запуская виртуальную 32-разрядную машину (например hyperv).
Поскольку 32-разрядные ОС имеют предел в 4ГБ, сейчас почти везде 64-разрядные системы. Но уж лучше на такой ОС пользоваться современным По. Та же Visual studio позволяет писать на ассемблере (а в виде вставок в код С++ это облегчает в несколько раз).
"Начиная с XP" может ввести в заблуждение: WinXP x64 вышла в 2005 -- через год после SP2 для 32-битной WinXP, и через четыре после оригинальной версии.
Начиная с XP виндовс выпускался в 32-битной и 64-битной версиях
Windows XP 64 bit edition — это не 64-битная версия Windows XP (NT 5.1), это адаптированная версия Windows Server 2003 (NT 5.2).
Поскольку 32-разрядные ОС имеют предел в 4ГБ
Нет. 32-битная Windows Server 2003 Enterprise вполне могла работать и с 64ГБ.
Обратите внимание, теперь мы не указываем расширение файла, который запускаем.
Turbo Debugger AFAIR если не указывать расширение ищет сначала файл с расширением .COM, если не находит, то с расширением .EXE. Соответственно если в директории будет и CODE.COM, и CODE.EXE (что в данном случае в принципе быть не может, просто на будущее говорю), то строчка «td code» загрузит в Turbo Debugger файл CODE.COM, а не CODE.EXE. Так что расширение всё же надо бы указывать, просто для аккуратности.
win
и жмешь Еnter. И вместо win.exe
запускается некий win.com
. И понеслась…Интересные у вас вирусы. У всех остальных именно https://ru.wikipedia.org/wiki/WIN.COM был аутентичным загрузчиком Windows.
От ассемблера для DOS практический толк такой же, как для PDP-11.
Согласен. Но вдруг пригодиться такая инструкция тем, кто изучает его в ВУЗе на DOS? Как например это было в моём...
Вот до появления Turbo сред было неудобно. Отладчик типа AFD считался за счастье, а некоторые так вообще умудрялись что-то отлаживать в командной строке debug.com из стандартной поставки DOS.
А ещё и в Visual Studio можно было писать на C/C++ с ассемблерными вставками.
Правда, этот функционал потом порезали.
Автор лучше рассказал бы о том, как программировать на ASM'е под Windows (хотя бы как сделать окошко с кнопочкой). Это было бы гораздо актуальнее…Помнится, некоторое время назад определённой популярностью пользовались уроки Iczelion'a
А для тех, кто не хочет сидеть в досбоксе есть книжки Столярова "Программирование на языке ассемблера NASM для ОС Unix" и ее новая версия "Программирование: введение в профессию. II: низкоуровневое программирование".
Да и MASM, по-моему, так помогает. Это если про x86. В thumb/arm/arm64 вообще выходит три режима и общие мнемоники могут стать тремя разными опкодами в отдельных случаях.
И нет — существуют языки ассемблеров, которые не являются мнемониками команд: например, в Эльбрусах (не современные микропроцессоры, а серия советских суперкомпьютеров), имеющих разные архитектуры и разные системы команд, использовался единый высокоуровневый язык ассемблера. И он именно компилировался.
Спасибо за важное замечание.
Изучал ассемблер по книге Питер Абель. "Ассемблер и программирование для IBM PC", и на реальном железе, DX486, 16 Mb RAM. На момент появления у меня такого компьютера, он уже был устаревшим, софт требовал больших ресурсов. Мотивом изучать ассемблер как раз стало желание разрабатывать быстрое ПО, которое бы потянул мой компьютер.
Мда.. в свое время именно на TASM писал кряк с руссификатором шрифтов для PCAD 4.5 и руссификатор для PC с загрузкой шрифтов в shadow BIOS
Почему именно vk.com?
Чтобы подавляющее большинство хабровчан из Украины сразу забили, так как VK заблочен
Чтобы уважающие себя люди сразу забили качать исполняемые файлы из группы в VK
Ведь есть же sourceforge.net/projects/guitasm8086
И только теперь мы начинает запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:
Чем не нравится автору CLI совершенно непонятно. Очень многие работают с командной строкой и сейчас, и это быстро и удобно. Кроме того можно пользоваться скриптами, чтобы не писать все постоянно руками. Этот абзац после — ах ужас — всего двух команд CLI просто поражает.
Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…
Ну чем он кардинально отличается от современных hex-эдиторов с возможностью дизассемблирования?
Даже современные отладчики в общем-то похожи. Больше окошек и скалируемость? Но это не совсем про интерфейс.
Assembler – Урок 0: Установка компилятора и запуск первой программы через DOSBox
А где тут про ассемблер?
Скачать два архива, распаковать и установить DosBox — это же целая статья, да?
Если бы было написано ПОЧЕМУ именно этот тасм, почему именно так делать?
Я, например, могу привести пример. У меня с запыльных времен есть парочку исходников резидентов, а такой термин многие современные разработчики и не знают. И да, резиденты можно запускать в дос. Но в статье ни слова о таком неудобном выборе.
Ну сколько можно некрофилией заниматься? Да, TASM надо памятник поставить и цветы приносить, но закопайте его уже и не трогайте больше могилу!
И на FASM и на NASM пишется намного легче. И 32 битовое и 64 битовое программирование что для Windows, что для Linux намного легче чем под DOS. И что более важно – студенты смогут написать хоть какое-то, но современное приложение, реально работающее в современной ОС.
Кстати, именно поэтому и начали использовать TASM, когда он еще был живым!
Ralf Brown's Interrupt List, Symantec С/C++ compiler 7.5 — dos16,dos32,win16,win32
Если сильно хочется погрузиться в эту тему, то лучше взять классиков. Например, почитать Олега Калашникова. Луче уже не написать.
PS при беглом взягляде на vc.com подумал, что будет раскрываться тема создания файового менеджера.
Мог бы рассказать про ассемблер под ARM. Нет, он в очередной раз повторит 100500 раз сказанное до него про архитектуру, которой никто не пользуется уже 20 лет
Самое главное это наглядность: в контроллере мы просто пишем out и значение регистра отправляется в порт — как есть, без преобразований и прочей магии. В процессоре мы вынуждены использовать библиотечную или BIOS'овую магию.
Во-вторых, ограничения архитектуры 8-битных контроллеров отлично иллюстрируют такие вещи, как стек, регистры флагов и т.п. Плюс прерывания, но это не из-за ограничений.
Ассемблер х86 для изучающего выглядит как просто еще один язык программирования с вырвиглазным синтаксисом. А для контроллеров — как прямые команды железу.
Assembler. Установка интерпретатора и запуск первой программы через DOSBox