Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по ВМСиС.doc
Скачиваний:
36
Добавлен:
05.06.2015
Размер:
2 Мб
Скачать
☆

Программирование на ассемблере

Существует два режимаработы ассемблера:masmиIDEAL. Назначение режимаmasm– обеспечить полную совместимость с трансляторомMASMфирмыMicrosoft. Назначение режимаIDEAL– упростить синтаксис конструкций языка, повысить эффективность и скорость работы транслятора и создаваемых программ.

Формат команд языка ассемблера следующий:

[метка] команда [операнд(ы)]

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

Примеры команд:

Метка

Команда

Операнды

Комментарии

count

db

1

mov

ax,4C00h

;команда с двумя операндами

m1:

inc

cx

;команда с одним операндом

cli

;команда без операндов

Комментарии начинаются в любой строке программы с символа ";", и считается, что все символы, находящиеся справа от символа ";" являются комментарием.

Основные команды ассемблера

В языке ассемблера существует около сотни команд. Но для того, чтобы начать изучать программирование на этом языке достаточно и одного десятка. На этом лабораторном занятии мы познакомимся только с тремя командами ассемблера.

Команда movпересылает байт или слово из источника в переменную или регистр назначения.

Формат команды: mov<назначение>, <источник>

Например, команда mov ax, 1003hозначает пересылку слова 0x1003 в регистрax.

Команда xorвыполняет операцию логического исключающего ИЛИ над переменной или регистром "назначения" с помощью операнда "источник".

Формат команды: xor<назначение>, <источник>

Например, команда ассемблера xori, 3 является аналогом оператора языка Сиi=i^3.

Команда intвызывает прерывание (сервисную процедуруDOSилиBIOS).

Формат команды: int<номер прерывания>

Например, команда int10hвызывает сервисную процедуруBIOSномер 0x10.

Директивы

Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования. Эти операторы называются директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов. Рассмотрим основные директивы.

Директивы резервирования и инициализации данных:

Имя

Длина

Применение

db

1 байт

  • целые знаковые и беззнаковые числа

  • символьные строки, длина которых определяется длиной строки, указанной в кавычках

dw

2 байта

  • целые знаковые и беззнаковые числа

  • смещение в сегменте

  • адрес сегмента

dd

4 байта

  • целые знаковые и беззнаковые числа

  • адрес, включающий сегмент и смещение в сегменте

Директивы определения сегмента:

Формат директивы

Назначение

.CODE [имя]

Начало сегмента кода

.DATA

Начало сегмента инициализированных данных.

.CONST

Начало сегмента постоянных данных (констант) модуля

.STACK [размер]

Начало сегмента стека модуля. Параметр [размер] задает размер стека

Директива modelопределяет модель памяти. Самые распространённые виды моделей памяти – этоsmallиtiny. Первый наиболее часто используется для обычных программ, второй – для программ формата .com.

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

Имя идентификатора

Назначение

@code

адрес сегмента кода

@data

адрес сегмента данных

@stack

адрес сегмента стека