Код магнитолы

JS - телефон

Оппозиция в России ?

Россия и Украина

Мысли в слух...

JS - часы

Российская...власть ?

Skype

Создаём сайт

Любимые сериалы

Гостевая


На главную

Говорит...процессор?

Продвинутые (от ХР-ки и выше) ОС относятся к 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).

дальше...
...назад