Говорит...процессор?
Продвинутые (от ХР-ки и выше) ОС относятся к
com-файлам как к проклятому прошлому MS DOS...
золотое было время! В этом отношении, ассемблер, создающий
ехе-файлы, направление более
перспективное. Хотя - пройти мимо 8-ми разрядных регистров...многое потеряете.
Со временем
появились вирусы и создатели ОС (читай - процессоров) - озверели. Расстояние
между процессором и потенциальным програмистом начало стремительно увеличиватся и заполнятся
различными посредниками (читай - препятствиями). Правда, название этим препятствия придумали
культурное - API-функции и языки програмирования высшего (!?) уровня.
Не стройте иллюзий - Assembler
расположен к регистрам процессора не ближе, чем Java. Общение программист - процессор всё больше
напоминает игру в испорченый телефон.
Работаю я на Win XP.
Если у меня что-то получается, то это не значит, что на более современных ОС - то-же получится. Десятка с com-файлами - точно не работает.
Работать книжные примеры
программ у меня не хотели. Пришлось кое-что доработать: в каталог
masm32/bin обавить файлы
ml.err и
afdpro.exe, а в каталог
masm32/lib - файлы
kernel32.lib и
user32.lib.
Только не спрашивайте - где я их взял? Раз взялись за ассемблер - найдёте! Если не захотите
искать - поищите
masm32v11, там всё есть, но...сами увидите.
Особое внимание
обратите на файл
ml.err и вот почему. Компилятор (да простят меня профи) работать без
него не хочет, а лишится этого файла - проще простого. Во время периодической чистки компа его
очень легко удалить - чем-то он
neocleaner.exe не нравится . За этим надо следить, а лучше - постоянно иметь
под рукой его копию с "культурным" расширением (ml.err --> ml.irr).
Для получения
com-файлов лучше использовать...
bat-файл:
@echo off
if exist %1.com del %1.com <-- удаляем "старый" файл
ml /c /AT file.asm
link16 /TINY file.obj,file.com;
del 0.obj
::file.com <-- если сразу к исполнению...
::afdpro file.com <-- ...необходимо убрать комментарии ::
pause
рис.3
Кроме этого - слегка доработайте каркас
asm-файла, предлагаемый в книге:
CSEG segment ;в com-файлах существует...
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG ;...только один сегмент
org 100h
start:
mov ax,0003h ;предварительная инициация видеобуфера...
int 10h ;...если работаем с символами и цветом
...
CSEG ends
end start
рис.4
Если хотим увидеть выводимый текст, перед прерыванием BIOS лучше добавить:
...
mov ah,10h <-- функция ожидания нажатия клавиши...
int 16h <-- ...этого прерывания
int 20h
...
Вышеприведённые команды аналогичны команде
pause в bat-файле.
Для
ехе-файла, в упрощённой сегментации, всё будет выглядеть так:
;каркас MASM:
.386 ;или - 486
.model flat, stdcall
option casemap :none <-- это - на любителя
include disk:\masm32\include\windows.inc
include disk:\masm32\include\user32.inc
include disk:\masm32\include\kernel32.inc
includelib disk:\masm32\lib\user32.lib
includelib disk:\masm32\lib\kernel32.lib
.data
...
.code
start: <-- это - "главная" метка, обычно она выглядит как main
...
m1:
...
m2:
...
eto proc
...
eto endp
...
end start
рис.5
Упрощённая сегментация используется в программа и под MASM, и под TASM.
И
bat-файл:
@echo off
if exist %1.exe del %1.exe
ml /c /coff file.asm file_a.asm file_b.asm ...*
link /subsystem:windows /opt:noref file.obj file_a.obj file_b.obj ...*
del file.obj file_a.obj file_b.obj ...*
::file.exe
::afdpro file.exe
pause
рис.6
* Использование ассемблера под Windows, приводит к серьёзному увеличению объёмов asm-файлов
, что делает их трудночитаемыми. В связи с этим, практикуют использование
основного
(file.asm) и вспомоготельных (file_a.asm file_b.asm ...), подключаемых, модулей. К транслятору
и компоновщику их подключают,
через пробел, по следующему правилу: сначала - основной
модуль, затем, в произвольном порядке - дополнительные.
И ещё один немаловажный момент: использование
знака подчёркивания в начале имени процедуры
_name:, говорит о том, что
name входит в список зарезервированых слов-команд. Что-бы не заморачиватся на эту
тему установите редактор
PSPad c настройкой подсветки синтаксиса.
У компонентов (
/c), используемых в bat-файлах, несколько названий, но
чаще всего их называют
опциями или ключами.
Как видите - ни о каком прямом диалоге с процессором речь не идёт. И это не смотря на то, что
мы во всю пользуемся последним прибежищем MS DOS - панелью коммандной строки (cmd.exe).
дальше...
...назад