Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программа типа СОМ




 

Традиционно первая программа для освоения нового языка программирования — программа, выводящая на экран текст «Hello world!». He будет исключением и эта книга, так как такая программа всегда была удобной отправной точкой для дальнейшего освоения языка.

 

Итак, наберите в любом текстовом редакторе, который может записывать файлы как обычный текст (например: EDIT.COM в DOS, встроенный редактор в Norton Commander или аналогичной программе, NOTEPAD в Windows), следующий текст:

 

; hello-l.asm

; Выводит на экран сообщение "Hello World!" и завершается

.model tiny; модель памяти, используемая для СОМ

.code; начало сегмента кода

org 100h; начальное значение счетчика - 100h

start: mov ah,9; номер функции DOS - в АН

mov dx,offset message; адрес строки - в DX

int 21h; вызов системной функции DOS

ret; завершение СОМ-программы

message db "Hello World!",0Dh,0Ah,'$'; строка для вывода

end start; конец программы

 

и сохраните его как файл hello-1.asm. Можно также использовать готовый файл с этим именем. (Все программы, использующиеся в этой книге в качестве примеров, вы можете найти в Internet: http://www.dmk.ru.) Чтобы превратить программу в исполнимый файл, сначала надо вызвать ассемблер, для того чтобы скомпилировать ее в объектный файл с именем hello-1.obj, набрав в командной строке следующую команду:

 

Для TASM:

tasm hello-1.asm

 

Для MASM:

ml /c hello-1.asm

 

Для WASM:

wasm hello-1.asm

 

С ассемблерными программами также можно работать из интегрированных сред разработки, как обычно работают с языками высокого уровня, но в них обычно удобнее создавать процедуры на ассемблере, вызываемые из программ на языке, для которого предназначена среда, а создание полноценных программ на ассемблере требует некоторой перенастройки.

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

 

Для TLINK:

tlink /t /x hello-1.obj

 

Для MASM (команда link должна вызывать 16-битную версию LINK.EXE):

link hello-1.obj,,NUL,,,

exe2bin hello-1.exe hello-1.com

 

Для WASM:

wlink file hello-1.obj form DOS COM

 

Теперь получился файл HELLO-1.COM размером 23 байта. Если его выполнить, на экране появится строка «Hello World!» и программа завершится.

Рассмотрим исходный текст программы, чтобы понять, как она работает.

Первая строка определяет модель памяти TINY, в которой сегменты кода, данных и стека объединены. Эта модель предназначена для создания файлов типа СОМ. Директива.CODE начинает сегмент кода, который в нашем случае также должен содержать и данные.

ORG 100h устанавливает значение программного счетчика в 100h, так как при загрузке СОМ-файла в память DOS занимает первые 256 байт (100h) блоком данных PSP и располагает код программы только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.

Метка START располагается перед первой командой в программе и будет использоваться в директиве END, чтобы указать, с какой команды начинается программа.

Команда MOV АН,9 помещает число 9 в регистр АН. Это — номер функции DOS «вывод строки».

Команда MOV DX,OFFSET MESSAGE помещает в регистр DX смешение метки MESSAGE относительно начала сегмента данных, который в нашем случае совпадает с сегментом кода.

Команда INT 21h вызывает системную функцию DOS. Эта команда — основное средство взаимодействия программ с операционной системой. В нашем примере вызывается функция DOS номер 9 — вывести строку на экран. Эта функция выводит строку от начала, адрес которого задается в регистрах DS:DX, до первого встреченного символа $. При загрузке СОМ-файла регистр DS автоматически загружается сегментным адресом программы, а регистр DX был загружен предыдущей командой.

Команда RET используется обычно для возвращения из процедуры. DOS вызывает СОМ-программы так, что команда RET корректно завершает программу.

DOS при вызове СОМ-файла помещает в стек сегментный адрес программы и ноль, так что RET передает управление на нулевой адрес текущего сегмента, то есть на первый байт PSP. Там находится код команды INT 20h, которая и используется для возвращения управления в DOS. Можно сразу заканчивать программу командой INT 20h, хотя это длиннее на 1 байт.

Следующая строка программы HELLO-1.ASM определяет строку данных, содержащую текст «Hello World!», управляющий символ ASCII «возврат каретки» с кодом 0Dh, управляющий символ ASCII «перевод строки» с кодом 0Ah и символ «$», завершающий строку. Эти два управляющих символа переводят курсор на первую позицию следующей строки точно так же, как в строках на языке С действует последовательность «\n».

И наконец, директива END завершает программу, одновременно указывая, с какой метки должно начинаться выполнение программы.

 




Поделиться с друзьями:


Дата добавления: 2014-12-10; Просмотров: 1098; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.