Как запустить программу assembler

MS DOS обеспечивает функцию EXEC (номер 4BH прерывания 21H),
реализующую вызов одной программы из другой. Первая программа
называется «родителем», а загружаемая и запускаемая — «потомком».
Высокий уровень.
В Бейсик версии 3.0 введена команда SHELL. Со значительными
ограничениями она позволяет бейсиковской программе загрузить и
выполнить другую программу. Формат этой команды SHELL ком_строка.
Командная строка может быть просто именем программы или она может
содержать кроме имени параметры, которые обычно следуют за именем
программы в командной строке. Если ком_строка не указана, то
загружается копия COMMAND.COM и появляется запрос операционной
системы. В этот момент можно выполнить любую команду MS DOS, а по
завершению вернуть управление бейсиковской программе, введя ко-
манду EXIT.
Имеется ряд ограничений при использовании SHELL. Если загру-
жаемая программа меняет режим работы дисплея, то он не будет

Удобная разработка и отладка программ на Turbo Assembler в Windows 10 без консоли


автоматически восстановлен при возврате. Перед загрузкой програм-
мы все файлы должны быть закрыты, и это не может быть программа,
которая остается резидентной после завершения. Обсуждение ряда
других проблем содержится в руководстве по Бейсику.
Средний уровень.
Функция 4BH более сложна, чем остальные, требуя четырех подго-
товительных шагов:
1. Подготовить в памяти место, доступное программе.
2. Создать блок параметров.
3. Построить строку, содержащую накопитель, путь и имя прог-
раммы.
4. Сохранить значения регистров SS и SP в переменных.
Поскольку при загрузке программы MS DOS выделяет ей всю дос-
тупную память, то необходимо освободить место в памяти. Если не
освободить часть памяти, то не будет места для загрузки второй
программы. В [1.3.1] объяснено как это сделать с помощью функции
SETBLOCK. После того как память освобождена, Вы должны просто
поместить в BX требуемое число 16-байтных параграфов, заслать 4AH
в AH и выполнить прерывание 21H, делая доступным программе именно
то число параграфов, которое ей требуется.
Блок параметров, на который должны указывать ES:BX это
14-байтный блок блок памяти, в который Вы должны поместить сле-
дующую информацию:
DW сегментный адрес строки среды
DD сегмент и смещение командной строки
DD сегмент и смещение первого FCB
DD сегмент и смещение второго FCB
Строка среды — это строка, состоящая из одной или более специ-
фикаций, которым следует MS DOS при выполнении программы. Элемен-
ты строки среды такие же, как и те что можно обнаружить в диско-
вом файле CONFIG.SYS. Например, в строку может быть помещено
VERIFY = ON. Просто начните строку с первого элемента, завершив
его символом ASCII 0, потом запишите следующий и т.д. За послед-
ним элементом должны следовать два символа ASCII 0. Строка должна
начинаться на границе параграфа (т.е. ее адрес по модулю 16 дол-

Создание проекта в Visual Studio с ассемблерным модулем


жен быть равен нулю). Это вызвано тем, что соответствующий вход в
блоке параметров, указывающий на строку, содержит только 2-байт-
ное сегментное значение. Все это не нужно, если новая программа
может работать с той же строкой среды, что и программа «роди-
тель». В этом случае надо просто поместить два символа ASCII 0 в
первые 2 байта блока параметров.
Следующие 4 байта блока параметров указывают на командную
строку для загружаемой программы. «Командная строка» — это сим-
вольная строка, определяющая способ работы программы. При загруз-
ке программы из DOS она может иметь вид вроде EDITOR A:CHAPTER1
NOTES.MS. При этом вызывается редактор и ему передается имя файла
в подкаталоге накопителя A для немедленного открытия. Когда Вы
подготавливаете командную строку для EXEC, то надо включать толь-
ко последнюю часть информации, но не имя загружаемой программы.
Перед командной строкой должен стоять байт, содержащий длину этой
строки, и она должна завершаться символом (ASCII 13).
Последние 8 байтов блока параметров указывают на управляющие
блоки файлов (FCB). FCB содержит информацию об одном или двух
файлах, указанных в командной строке. Если открываемых файлов
нет, то надо заполнить все 8 байт символом ASCII 0. В [5.3.5]
объяснено, как работает FCB. Начиная с версии MS DOS 2.0, исполь-
зование FCB необязательно и Вы можете не включать информацию FCB,
вместо этого используя новую конвенцию дескриптора файлов (file
handler), в которой доступ к файлу предоставляется по кодовому
номеру, а не через FCB (также обсуждается в [5.3.5]).
Наконец, Вы должны построить строку с указанием накопителя,
пути и имени файла. Эта строка именует загружаемую программу.
DS:DX указывает на эту строку при выполнении EXEC. Эта строка —
стандартная строка ASCIIZ, т.е. ничего более, чем стандартная
спецификация файла, завершаемая кодом ASCII 0. Например, это
может быть B:NEWDATAFILER.EXE, где символом обозна-
чен код ASCII 0.
После того как вся указанная информация подготовлена, остается
последняя задача. Поскольку все регистры будут изменены вызывае-
мой задачей, то надо сохранить сегмент стека и указатель стека, с
тем чтобы они могли быть восстановлены, когда управление будет
возвращено вызвавшей задаче. Для их сохранения создайте перемен-
ные. Поскольку значение регистра DS также будет изменено, то эти
переменные не могут быть найдены, до тех пор пока не будут повто-
рены операторы MOV AX,DSEG и MOV DS,AX. После того как SS и SP
сохранены, поместите 0 в AL, для выбора операции «загрузка и
запуск» (EXEC используется также для оверлеев [1.3.5]). Затем
поместите 4AH в AH и вызовите прерывание 21H. В этот момент запу-
щены две программы, причем программа «родитель» находится в оста-
новленном состоянии. MS DOS предоставляет возможность программе
потомку передать родителю код возврата, таким образом могут быть
переданы ошибки и статус. В [7.2.5] объяснено как это сделать.
Что касается самой функции запуска, то при возникновении ошибки
устанавливается флаг переноса, а регистр AX в этом случае будет
возвращать 1 — для неправильного номера функции, 2 — если файл не
найден, 5 — при дисковой ошибке, 8 — при нехватке памяти, 10 —
если неправильна строка среды и 11 — если неверен формат.

Читайте также:
Жюри в программе умники и умницы как называют

Приводимый пример — простейший из возможных, но часто больше
ничего и не надо. Здесь оставлен нулевым блок параметров и не
создана строка среды. Это означает, что загружаемой программе не
будет передаваться командная строка и что среда будет такой же,
как и для вызывающей программы. Вы должны только изменить распре-
деление памяти, создать имя и (пустой) блок параметров и сохра-
нить значения SS и SP.
;—в сегменте данных
FILENAME DB ‘A:TRIAL.EXE’,0 ;загружаем TRIAL.EXE
PARAMETERS DW 7DUP(0) ;нулевой блок параметров
KEEP_SS DW 0 ;переменная для SS
KEEP_SP DW 0 ;переменная для SP
;—перераспределение памяти
MOV BX,ZSEG ;получить # параграфа конца
MOV AX,ES ;получить # параграфа начала
SUB BX,AX ;вычислить размер программы
MOV AH,4AH ;номер функции
INT 21H ;перераспределение
;—указываем на блок параметров
MOV AX,SEG PARAMETERS ;в ES — сегмент
MOV ES,AX ;
MOV BX,OFFSET PARAMETERS ;в BX — смещение
;—сохранить копии SS и SP
MOV KEEP_SS,SS ;сохраняем SS
MOV KEEP_SP,SP ;сохраняем SP
;—указываем на строку имени файла
MOV DX,OFFSET FILENAME ;смещение — в DX
MOV AX,SEG FILENAME ;сегмент — в DS
MOV DS,AX ;
;—загрузка программы
MOV AH,4BH ;функция EXEC
MOV AL,0 ;выбираем «загрузку и запуск»
INT 21H ;запускаем задачу
;—впоследствии, восстанавливаем регистры
MOV AX,DSEG ;восстанавливаем DS
MOV DS,AX ;
MOV SS,KEEP_SS ;восстанавливаем SS
MOV SP,KEEP_SP ;восстанавливаем SP
;—в конце программы создаем фиктивный сегмент
ZSEG SEGMENT ;см. [1.3.1]
ZSEG ENDS

Источник: tdoc.ru

Расширенный ассемблер: NASM

Для ассемблирования файла вы должны ввести следующую команду:

nasm -f [-o ]
nasm -f elf myfile.asm

будет ассемблировать myfile.asm в ELF-объектный файл myfile.o . А строка

nasm -f bin myfile.asm -o myfile.com

будет ассемблировать myfile.asm в обычный бинарный файл myfile.com .
Для получения файла-листинга, содержащего слева от оригинального исходного текста шестнадцатиричные коды, генерируемые NASM, используйте ключ -l , обозначающий имя файла-листинга, например:

Читайте также:
Создание публикации в программе pagemaker начинается

nasm -f coff myfile.asm -l myfile.lst

Для получения справки по командной строке NASM, укажите следующий ключ:

nasm -h

При этом вы получите также список доступных форматов выходных файлов и что они означают. Если вы используете Linux, но не уверены, какая ваша система — a.out или ELF , введите

file nasm

в каталоге, где находятся бинарные файлы NASM. В ответ вы получите что-то вроде

nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1

Это означает, что ваша система — ELF и вы должны при ассемблировании использовать ключ -f elf . Если же вы увидите

nasm: Linux/i386 demand-paged executable (QMAGIC)

или что-то наподобие этого, ваша система — a.out , и при ассемблировании нужно будет указать ключ -f aout . (Linux системы a.out считаются устаревшими и на сегодняшний день встречаются редко).
Подобно Unix компиляторам и ассемблерам, NASM «бесшумен»: вы не будете видеть никаких сообщений вообще, если только это не сообщения об ошибках.

2.1.1 Ключ -o : Указание имени выходного файла

Обычно NASM выбирает имя выходного файла самостоятельно; так как это зависит от формата объектного файла. Если формат объектного файла — Microsoft ( obj и win32 ), он удалит расширение .asm (или любое другое, какое вам нравится использовать — NASMу все равно) из имени исходного файла и заменит его на .obj . У объектных файлов Unix-формата ( aout, coff, elf и as86 ) он будет заменять расширение на .o . Для формата rdf он будет использовать расширение .rdf , а в случае формата bin он просто удалит расширение, например из myfile.asm получится файл myfile .

Если выходной файл уже существует, NASM перезапишет его, если только его имя не совпадает с именем входного файла — в этом случае появится предупреждение и в качестве выходного файла будет использовано имя nasm.out .

В случаях, когда имя по умолчанию недопустимо, используйте ключ -o командной строки, позволяющий определить необходимое вам имя выходного файла. Имя выходного файла должно следовать за ключем -o , неважно с пробелом между ними или без. Например:

nasm -f bin program.asm -o program.com
nasm -f bin driver.asm -odriver.sys

2.1.2 Ключ -f : Указание формата выходного файла

Если ключ -f в командной строке отсутствует, NASM будет выбирать формат выходного файла самостоятельно. В распространяемой версии NASM формат по умолчанию всегда bin ; если вы создаете собственную копию NASM, то при компиляции можете переопределить значение OF_DEFAULT на то, которое вам нужно по умолчанию.

Как и для ключа -o , разделительный пробел между -f и форматом выходного файла необязателен: -f elf и -felf для NASM идентичны.

Полный список доступных выходных форматов может быть получен при помощи команды nasm -h .

2.1.3 Ключ -l : Генерация файла-листинга

Если в командной строке вы укажете ключ -l и имя файла (как обычно, пробел необязателен), NASM будет генерировать из исходника файл-листинг, где адреса и генерируемый код будут расположены слева, а исходный код с развернутыми многострочными макросами (за исключением тех, которые специально требуют обратное: см. параграф 4.2.9) — справа. Например:

nasm -f elf myfile.asm -l myfile.lst

2.1.4 Ключ -E : Перенаправление ошибок в файл

Под MS-DOS перенаправление стандартного потока ошибок в файл может быть сопряжено с трудностями (хотя способы имеются). Так как NASM обычно направляет предупреждения и сообщения об ошибках в поток stderr , перехват этих сообщений ( например для последующего просмотра в редакторе) может вызвать сложности.

В связи с этим имеется специальный ключ -E , после которого указывается имя файла (пробел необязателен). Данный ключ перенаправляет стандартный поток ошибок в указанный файл. Таким образом, вы можете запустить NASM, например следующим образом:

Читайте также:
Сметная программа а0 это

nasm -E myfile.err -f obj myfile.asm

2.1.5 Ключ -s : Перенаправление ошибок в stdout

Ключ -s перенаправляет стандартный поток ошибок stderr в выходной поток stdout (естественно, в MS-DOS). Например, для ассемблирования файла myfile.asm и передачи ошибок программе more , вы можете ввести следующее:

nasm -s -f obj myfile.asm | more

2.1.6 Ключ -i : Каталоги поиска включаемых файлов

Когда NASM встречает в исходнике директиву %include (см. параграф 4.5), он будет искать указанный в ней файл не только в текущем каталоге, но и во всех каталогах, указанных в командной строке при помощи ключа -i . Следовательно, вы можете включить файлы из, например, библиотеки макросов, введя следующую команду:

nasm -ic:macrolib -f obj myfile.asm

(Как обычно, пробел между -i и строкой поиска допустим, но не обязателен)

С целью переносимости кода в NASMе не «зашито» соглашение об именовании файлов той или иной ОС, под которой он запущен; строка, которую вы укажете как аргумент ключа, будет обработана в точности так, как есть. Заключительный обратный слэш в приведенном выше примере под Unix необходим, т.к. в этой ОС заключительные слэши обычно требуются.

(Вы можете извлечь из этого обстоятельства выгоду, использовав данный ключ «не по назначению» — например ключ -ifoo будет заставлять директиву %include «bar.i» искать файл foobar.i. )

Если вы хотите описать стандартныйпуть поиска включаемых файлов, такой как /usr/include в системе Unix, вы должны поместить одну или более директив -i в переменную окружения NASM (см. параграф 2.1.13).

Для совместимости с make-файлами большинства С компиляторов, данный ключ может быть также задан как -I .

2.1.7 Ключ -p : Предварительно включаемые файлы

При помощи ключа -p NASM позволяет вам предварительновключить некоторые файлы в ваш исходник. Так, строка запуска

nasm myfile.asm -p myinc.inc

эквивалентна строке nasm myfile.asm и помещением в начало файла директивы %include «myinc.inc» . В целях симметричности с ключами I, -D и -U данный ключ может быть также задан как -P .

2.1.8 Ключ -d : Предопределение макроса

Аналогично тому, как ключ -p дает альтернативу помещения в начало исходного файла директивы %include , ключ -d дает альтернативу директиве %define . Таким образом, команда

nasm myfile.asm -dFOO=100

альтернативна помещению в начало файла директивы

%define FOO 100

Вы можете также опустить значение константы: ключ -dFOO эквивалентен строке %define FOO . Данная возможность может быть полезна при ассемблировании для включения/выключения опций, проверяемых при помощи директивы %ifdef , например -dDEBUG . Для совместимости с make-файлами большинства С компиляторов, данный ключ может быть также задан как -D .

2.1.9 Ключ -u : Отмена определения макроса

Ключ -u отменяет определение ранее определенного макроса. Например, в результате выполнения следующей командной строки:

nasm myfile.asm -dFOO=100 -uFOO

FOO не будетпредопределенным макросом для программы. Это полезно для временного отключения опций, заданных в make-файлах. Для совместимости с make-файлами большинства С компиляторов, данный ключ может быть также задан как -U .

2.1.10 Ключ -e : Только препроцессирование

NASM допускает выполнение только препроцессирования входного файла. Использование ключа -e (не требующего параметров) заставит NASM препроцессировать входной файл, развернуть все макро ссылки, удалить все комментарии и директивы препроцессора и вывести результирующий файл в стандартный выходной поток (или сохранить его как отдельный файл, если используется также опция -о ).

Как запустить программу assembler

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Необходимо обновить браузер или попробовать использовать другой.

Програмирование на fasm под Win64 часть 1 «Ассемблер, отладчик, IDE»

Дата публикации 5 июл 2017 | Редактировалось 10 янв 2018

Я начинаю цикл статей по ассемблеру fasm. Возможно у вас есть вопрос: “Зачем в 21 веке нужен ассемблер?”. Я бы ответил так: Конечно, знание ассемблера не обязятельно, но оно способствует пониманию, во что превращается ваш код, как он работает, это позволяет почувствовать силу. Ну и в конце концов: Писать на ассемблере просто приятно (ну по крайней мере небольшие приложения).
Так что надеюсь, что мои статьи будут вам полезны.

Где взять fasm?

Источник: wasm.in

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru