2. Этапы создания программы на языке Ассемблер. Вывод строки на экран

2. Этапы создания программы на языке Ассемблер. Вывод строки на экран

Цель работы:  получение знаний об основных правилах записи и структуре программ на языке Ассемблер для ПЭВМ типа IBM PC; приобретение практических навыков по составлению простейших программ на языке Ассемблер.

Теоретическая часть

Этапы создания программы

Разработка программы на  Ассемблере включает несколько шагов:

  • подготовку исходного кода программы,
  • ассемблирование программы (получение объектного кода),
  • компоновку программы (получение исполняемого файла программы),
  • отладку программы.

Текст программы записывается в один или несколько файлов. Имена файлов и их расширения могут быть произвольными, однако принято использовать для файлов, содержащих основную программу, расширение .asm, а для вспомогательных файлов, содержащих описание констант, новых типов, библиотеки функций, – расширение .inc.

Подготовленный текст программы необходимо преобразовать в машинные команды, которые могут быть выполнены микропроцессором. Это можно осуществить с помощью программ, называемых ассемблерами. После ассемблирования получают  объектные модули с расширением .obj. Ассемблирование можно выполнить с помощью компиляторов masm фирмы Microsoft или tasm фирмы Borland.

Процесс подготовки программы включает и процесс компоновки (редактирования связей). Работа компоновщика заключается в том, чтобы в каждом модуле определить и связать ссылки на неопределённые имена и обеспечить переместимость программы. Когда программа включает  несколько модулей, компоновщик объединяет их в один файл. В итоге будет получен выполняемый файл с расширением .exe или .com. Для этих целей можно использовать программу–компоновщик link фирмы Microsoft или tlink фирмы Borland.

Например, пусть файлы с исходными кодами называются prog1.asm и myLib.inc. В этом случае ассемблирование и компоновку можно выполнить следующими командами:

Таблица команд ассемблирования и компоновки

Microsoft Borland
Этап ассемблирования masm prog1.asm
masm myLib.inc
tasm prog1.asm
tasm myLib.inc
Этап компоновки link prog1.obj
link myLib.obj
tlink prog1.obj
tlink myLib.obj

 

Общая схема программы на языке Ассемблер

Строка в программе на Ассемблере может состоять из 4–х полей:

[метка:] команда [поле операндов] [;комментарий]

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

  •  буквы от A до Z, причем Ассемблер не делает разницы между строчными и прописными буквами;
  • цифры от 0 до 9;
  • спец.символы – '?', '.'(только первый символ), '@'(коммерческое эт), '$', '_'.

Первым символом в метке должна быть буква или специальный символ. Максимальная длина метки – 31 символ.

Поле команды содержит её имя. Операнды определяют данные, регистры, символические имена (относительные адреса).

Например, команда mov ax, 4 заносит в регистр ax значение 4.

В поле операндов, если оно присутствует, могут быть один или два операнда. Между собой операнды отделяются запятой. В командах с двумя операндами первый - это приемник (destination), а второй – источник (source).

Комментарий начинается с символа ';'. Все символы справа от символа ';' до конца строки воспринимаются Ассемблером как комментарий.

Так как строчные и прописные символы в Ассемблере не различаются, то записи вида mov ah, 9 и MOV AH, 9 воспринимаются Ассемблером  одинаково.

Ниже представлены примеры оформления программ для компиляторов masm и tasm.

;Шаблон оформления программы в “стиле” masm
.model small	; директива описания модели памяти
; программа имеет модель памяти 
; типа small – один сегмент кода и один сегмент данных
.stack 100	; начало сегмента стека
.data	; начало сегмента данных
...	; определение данных
.code	; начало сегмента кода
...	; здесь можно включить текст подпрограмм и 
; данные, которые необходимо расположить 
; в сегменте кода
.startup	; точка начала выполнения программы
...	; текст программы
end	; директива окончания текста программы

 

;Шаблон оформления программы в “стиле” tasm
sstack	SEGMENT	para stack "stack" ;определение сегмента стека	
	DB	100 dup (?)		;область стека, не менее 32 слов
sstack 	ENDS				;конец сегмента стека
 
sdata	SEGMENT	para data		;определение сегмента данных
...					;здесь помещаются директивы 
;определения данных
sdata	ENDS				;конец сегмента данных
scode 	SEGMENT para "code"	;определение сегмента кода
ASSUME 	CS:scode, DS:sdata 	;указывает Ассемблеру, что сегмент scode будет
;адресоваться с помощью сегментного регистра CS, 
;а сегмент sdata – с помощью сегментного регистра DS. здесь можно
;включить текст подпрограмм и данные, которые необходимо расположить в 
;сегменте кода
start:					;точка входа в программу здесь
...					;помещается текст программы
scode	ENDS				;конец сегмента кода
END 	start				;директива окончания текста 
					;программы

Директивы определения сегмента делят исходную программу на сегменты. В программе на языке Ассемблер возможны четыре вида сегментов:

  • сегмент данных – используется для хранения переменных и констант;
  • сегмент стека – используется для хранения временных данных и адресов возврата из подпрограмм;
  • сегмент команд – в нем располагается код программы, в нем также могут располагаться подпрограммы и данные;
  • дополнительный сегмент данных.

По крайней мере, один сегмент – сегмент команд должен присутствовать в каждой программе.

Сегментный регистр ds должен содержать адрес сегмента, в котором описаны данные. Занести адрес в регистр можно, например, следующим образом:

	mov	ax, @data	; для masm
	mov	ds, ax
или	mov	ax, sdata	; для tasm
	mov	ds, ax

Задание

1. Изучить структуру программы на Ассемблере и основные требования к ней.

2. Разработать программу вывода строки “Hello World” на экран в стилях masm и tasm:

  • с использованием директивы db определить в сегменте данных строку ‘Hello World’,10,13,’$’ (Hi db  ‘Hello World’,10,13,’$’),
  • инициализировать регистр ds адресом сегмента данных,
  • с помощью функции 9 прерывания 21h вывести эту строку на экран
mov	ah, 9		;номер функции всегда помещается в регистр ah
mov	dx, offset Hi	;регистр dx содержит начальный адрес
;выводимой строки
int	21h		;вызов прерывания
  • завершить программу функцией 4Ch прерывания 21h
mov	ah, 4Ch
int	21h

3. С помощью текстового редактора набрать программу и записать ее на диск. Оттранслировать программу и получить объектный файл, листинг программы и исполняемый файл. Например, если исходный файл называется myLab1.asm, то с помощью команд

tasm myLab1.asm, ,

tlink myLab1.obj

получаются файлы myLab1.obj, myLab1.exe и myLab1.lst.

Изучить полученный листинг программы.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов