В данном курсе планируется разобрать основные особенности программирования на самой простой реализации assembler – TASM. Этих знаний лично мне вполне хватило, чтобы на отлично сдать ЭВМ в институте и закончить все лабораторные работы. Во многих уроках будет домашние задание по их мотивам.
Для начала давайте установим наш старенький компилятор.
Ссылка
Почему именно vk.com?
Я прекрасно понимаю, что это ещё тот колхоз делиться файлами через обсуждения VK, но кто знает, во что может превратиться эта маленькая группа в будущем.
После распаковки файлов, советую сохранить их в папке Asm на диск C, чтобы иметь меньше расхождений с представленным тут материалом.
Для запуска компилятора нам так же потребуется эмулятор DOSBox. Он и оживит все наши компоненты. Скачаем и установим его!
Ссылка
В папке Asm я специально оставил файл code.asm. Именно на нём мы и потренируемся запускать нашу программу. Советую сохранить его копию, ибо там хранится весь код, который в 99% случаев будет присутствовать в каждом вашем проекте.
Удобная разработка и отладка программ на Turbo Assembler в Windows 10 без консоли
s_s segment s_s ends d_s segment d_s ends c_s segment assume ss:s_s, ds:d_s, cs:c_s begin: mov ax, d_s mov ds, ax mov ax, 0 ; Your code needs to be here mov ah, 4ch int 21h c_s ends end begin
Итак. Запускаем наш DOSBox и видим следующее:
Для начала нам нужно смонтировать диск, на который вы сохранили вашу папку Asm. У меня это диск C, поэтому я прописываю следующую команду:
mount d: c:asm
Здесь d: это не реальный диск на вашем компьютере, а виртуальный. С таким же успехом вы можете назвать его i или s. А вот C это наоборот реальный диск. Мы прописываем путь до наших файлов ассемблера.
Теперь, откроем смонтированный диск:
Прописав команду dir, вы сможете увидеть все файлы, которые там хранятся. Здесь можно заметить и наш файл CODE с расширением ASM, а так же дату его создания.
И только теперь мы начинает запускать наш файл! Бедные программисты 20 века, как они только терпели всё это? Пропишем следующую команду:
tasm code.asm
После мы увидим следующее сообщение, а наша директория пополнится новым файлом с расширением OBJ.
Теперь пропишем ещё одну команду:
tlink code.obj
В нашей папке появилась ещё пара файлов – CODE.MAP и CODE.EXE. Последний как раз и есть исполняемый файл нашего кода assembler.
Если он появился, значит, мы можем запустить режим отладки нашей программы, введя команду последнюю команду. Обратите внимание, теперь мы не указываем расширение файла, который запускаем.
ЛР по ассемблеру 1. Часть 1.DosBox, NC, компиляция, запуск afd
td code
Этот старинный интерфейс насквозь пропитан духом ушедшей эпохи старых операционных систем. Тем не менее…
Нажав F7 или fn + F7 вы сможете совершить 1 шаг по коду. Синяя строка начнёт движение вниз, изменяя значения регистров и флагов. Пока это всего лишь шаблон, на которым мы потренировались запускать нашу программу в режиме дебага. Реальное “волшебство” мы увидим лишь в следующих уроках. Пока давайте лишь ознакомимся с имеющимися разделами.
CS
Code segment – место, где turbo debug отражает все найденные строки кода. Важное замечание – все данные отражаются в TD в виде 16-ричной системы. А значит какая-нибудь ‘12’ это на самом деле 18, а реальное 12 это ‘C’. CS аналогичен разделу “Begin end.” на Pascal или функции main.
DS
Data segment, отражает пока все мусорные данные, которые обнаружил TD. Справа мы видим их символьную (char) интерпретацию. В будущем мы сможем увидеть здесь наш “Hello, world”, интерпретируемый компилятором в числа, по таблице ASCII. Хорошей аналогией DS является раздел VAR, как в Pascal. Пока будем считать, что это одно и тоже.
SS
Stack segment – место хранения данных нашего стека. Возможно, вы уже слышали о такой структуре данных. Если нет, обязуюсь пояснить в последующих статьях.
Регистры
Все эти ax, bx, cx, si, di, ss, cs и т. д. – это наши регистры, которые используются как переменные для хранения данных. Да, это очень грубое упрощение. Переменные из Pascal и регистры Assembler это не одно и тоже, но надеюсь, такая аналогия даёт более чёткую картину. Здесь мы сможем хранить данные о циклах, арифметических операциях, системных прерываниях и т. д.
Флаги
Все эти c, z, s, o, p и т.д. это и есть наши флаги. В них хранится промежуточная информация о том, например, было ли полученное число чётным, произошло ранее переполнение или нет. Они могут хранить результат побитого сдвига. По опыту, могу сказать, на них обращаешь внимание лишь при отладке программы, а не во время штатного исполнения.
Если пока что-то не понятно, уверяю, каждый из сегментов мы рассмотрим подробнее в следующих уроках. Они заслуживают детального обсуждения, и уместить в один абзац всю информацию просто невозможно.
Ещё одно замечание. Если вы измените данные исходного файла с расширением .ASM, то вам придётся совершить все ранее описанные операции вновь, ибо обновив например code.asm вы не меняете code.obj или code.exe.
Маленькая шпаргалка для заметок:
- mount d: c:asm – создаём виртуальный диск, где корень –папка asm
- d: — открываем созданный диск
- tasm code.asm – компилируем исходный код
- tlink code.obj – создаём исполняемый файл
- td code – запускаем debug
- F7 – делаем шаг в программе
Буду ждать комментарии от всех, кому интересен Assembler. Чувствую, я где-то мог накосячить в терминологии или обозначении того или иного элемента. Но статья на Habr отличный повод всё повторить.
Источник: savepearlharbor.com
Настройка DOSBox в Ubuntu для программирования на ассемблере x86
Используем Dos Navigator и flat assembler
Программирование на PC для меня началось с Turbo Pascal и Turbo Assembler от компании Borland. В то время мой компьютер на базе Intel 80386SX мог нормально работать только в MS-DOS. Накатила ностальгия, и я решил вспомнить основы x86 ассемблера. Для чистоты эксперимента буду использовать условия приближенные к боевым.
Для начала нужна MS-DOS. Или её аналог. Можно использовать любую виртуальную машину, такую как QEMU или VirtualBox, а затем создать под неё образ системы. Но есть вариант лучше! Вот что говорит нам Википедия про DOSBox:
DOSBox — эмулятор для PC, создающий DOS-окружение, необходимое для запуска старых программ и игр под MS-DOS. Это позволяет играть в такие игры в операционных системах, не поддерживающих или поддерживающих DOS-программы не полностью, и на современных компьютерах, на которых иначе старые программы могут не работать или работают с ошибками.
В данном случае к плюсам DOSBox можно отнести то, что сразу после установки мы имеем готовую к работе DOS, а также возможность монтирования локальных каталогов как дисков.
Итак, чтобы установить DOSBox под Ubuntu, достаточно выполнить команду:
sudo apt install dosbox
Готово. Теперь нужно настроить среду. Для начала создадим каталог, который будем монтировать в DOSBox.
mkdir ~/DOS
Чтобы иметь возможность редактировать исходники и удобно перемещаться по файловой системе, будем использовать консольный файловый менеджер Dos Navigator. Скачиваем и распаковываем его в ранее созданный каталог DOS.
cd ~/DOS wget https://www.ritlabs.com/download/dn/dn151.zip -O dn151.zip; unzip dn151.zip -d DN; rm dn151.zip
Туда же скачаем и распакуем наш ассемблер. Мой выбор пал на flat assembler. Именно так, с маленькой буквы.
cd ~/DOS wget https://flatassembler.net/fasm17323.zip -O fasm17323.zip; unzip fasm17323.zip -d FASM; rm fasm17323.zip
Настраиваем параметры автозагрузки DOSBox в файле конфигурации dosbox-0.74-3.conf
nano ~/.dosbox/dosbox-0.74-3.conf
[autoexec] MOUNT C /home/vladimir/DOS C: PATH=C:FASM C:DNDN.COM
Раздел [autoexec] специально создан для команд, которые будут автоматически выполняться сразу после загрузки DOSBox. Давайте разберём что тут происходит в каждой строке:
- MOUNT C /home/vladimir/DOS – монтируем созданный нами каталог как диск C ;
- C: – переходим на диск C , который теперь содержит скачанные нами программы (по умолчанию система стартует и остаётся на диске Z );
- PATH=C:FASM – добавляем каталог содержащий ассемблер flat assembler в переменную PATH , чтобы можно было стартовать его из любого другого каталога;
- C:DNDN.COM – запускаем Dos Navigator.
Запускаем DOSBox и видим окно Dos Navigator, которое отображает содержимое диска C .
Однако, если сейчас попробовать запустить flat assembler командой fasm в командной строке, или (что то-же самое) перейти в каталог FASM и запустить fasm.exe , то мелькнёт чёрное окно и больше ничего не произойдёт. Но на самом деле вывод в консоль был, и посмотреть его можно, нажав комбинацию клавиш Ctrl+O , скрыв панели Dos Navigator, и второй раз её же, чтобы панели вновь показать. И там мы увидим ошибку:
error: no 32-bit DPMI services are available.
Проблема в том, что flat assembler требует для своей работы DPMI, который DOSBox не может эмулировать самостоятельно.
DPMI (DOS Protected Mode Interface) — протокол доступа к памяти, с помощью которого DOS-программа может использовать дополнительную память персонального компьютера с адресами выше 1 Мбайта, недоступную при работе процессора 80×86 в реальном режиме. Практически все DOS-расширители основаны на DPMI и позволяют программам DOS обращаться ко всей памяти компьютера и работать в защищённом режиме. Самым известным отдельным ядром DPMI является CWSDPMI.
Решает эту проблему запуск CWSDPMI в фоновом режиме. Закрываем окно DOSBox. Переходим в каталог ~/DOS , скачиваем и распаковываем архив с CWSDPMI.
cd ~/DOS wget http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip -O csdpmi7b.zip; unzip csdpmi7b.zip -d CWSDPMI; rm csdpmi7b.zip
Добавляем запуск CWSDPMI в параметры автозагрузки DOSBox
nano ~/.dosbox/dosbox-0.74-3.conf
[autoexec] MOUNT C /home/vladimir/DOS C: PATH=C:FASM C:CWSDPMIBINCWSDPMI.EXE -p C:DNDN.COM
Стартуем DOSBox по новой.
И видим, что flat assembler теперь работает нормально. Можно начинать писать программы на ассемблере.
Создаём в корне диска C каталог SRC , нажав клавишу F7 ; а в ней файл START.ASM , нажав комбинацию клавиш Shift+F4 .
Содержимое файла START.ASM:
; START.ASM org 100h int 20h
Компилируем файл командой:
fasm start.asm
Получаем скомпилированную программу размером в 2 байта, которая ничего не делает, кроме как завершает свою работу. Как два байта переслать!
flat assembler содержит примеры исходников различных программ в каталоге C:FASMEXAMPLES , можете с ними ознакомиться.
Ссылки
DOSBox – страница для загрузки DOSBox.
Dos Navigator – страница для загрузки Dos Navigator.
flat assembler – страница для загрузки flat assembler.
CWSDPMI – страница для загрузки CWSDPMI r7.
Все программы указанные в примерах, также можно скачать с этого сайта:
Источник: igonin.ru
Изучение ассемблера под DOSbox
Выполните желаемую операцию в соответствии с разными командами отладки
Общие команды в режиме отладки:
-g: после выполнения файла name.exe будут отображены результаты -a: написать команды сборки -t: пошаговое выполнение -p: Прямое выполнение — это не один шаг -u: декомпилировать -r: просмотреть значение измененного регистра -d: просмотреть блок памяти -e: изменить блок памяти — ?: Просмотр справки по инструкции
Подробное описание часто используемых недавно использовавшихся команд:
-d: просмотреть содержимое 128 ячеек памяти.
-d адрес сегмента: адрес смещения
Просмотрите содержимое 128 ячеек памяти по указанному адресу.
-d адрес сегмента: адрес смещения 1 адрес смещения 2
Просмотрите содержимое ячеек памяти от указанного адреса 1 до указанного адреса 2.
-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса
-t:ma
Выполнять каждую инструкцию шаг за шагом и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.
Укажите содержимое блока памяти от адреса 1 до адреса 2.
-d адрес сегмента: смещение адреса смещения
Просмотр содержимого блока памяти с длиной смещения, начиная с указанного адреса
-t:ma
Выполнять каждую инструкцию шаг за шагом и отображать содержимое регистра, логический адрес и выполненную инструкцию каждый раз, когда инструкция выполняется.
- Once you increase your DOSBox cycles beyond your computer CPU resources, it will produce the same effect as slowing down the emulation. This maximum will vary from computer to computer. ↩︎
- You need free CPU resources for this (the more you have, the faster it goes), so it won’t work at all with cycles=max or a too high amount of fixed cycles. You have to keep the keys pressed for it to work! ↩︎
- These keys won’t work if you saved a mapper file earlier with a different machine type. So either reassign them or reset the mapper. ↩︎↩︎
Интеллектуальная рекомендация
Свойства могут быть рассчитаны автоматически (базовый)
// Вернемся к классическому примеру «имя + фамилия = полное имя», вы можете оглянуться назад: сделать автоматический атрибут fullName доступным для записи и позволить пользователю напрямую.
«Python Great God’s Propamition Road».
Общий гость : Учитель Чжан,Церковь знаний «Эксплуатация и техническое обслуживание Python» Лектор курса,Старший эксперт по развитию Python. В 6 -летнем опыте разработки Python человек, отвеч.
Насколько пузырька находится под новым розничным воздухом?
Текст | Большая научная техника Gao Qianru редактировать| Sanlu. Number1 Нет времени покинуть беспилотную трансформацию шельфа. В 2016 году М.А. Юн выдвинул новые розничные концепции, и новая роз.
Дизайн Шаблоны-Стратегия
Очень распространенный алгоритм: 1 Что нам делать без этого режима? Например, если есть несколько алгоритмов для членов, v1, v2, v3, просто написать три if в бизнес-классе XxxBiz. Простой, прямой и эф.
Источник: russianblogs.com