Мегаобучалка Главная | О нас | Обратная связь


OP3 GE OP4) AND (OP5 LT OP6)



2018-07-06 385 Обсуждений (0)
OP3 GE OP4) AND (OP5 LT OP6) 0.00 из 5.00 0 оценок




4) 27 SHL 3 ;

Директива определения:

Общий вид директивы определения следующий

[<имя>] DX<операнды><; комментарии>,

где Х это B, W, D, F, Q или T.

Операндов может быть несколько В поле операндов может быть ‘?’, одна или несколько констант, разделенных запятой. Имя, если оно есть, определяет адрес первого байта выделяемой области. Директивой выделяется указанное количество байтов ОП и указанные операнды пересылаются в эти поля памяти. Если операнд – это ‘?’, то в соответствующее поле ничего не заносится.

Пример:

R1 DB 0, 0, 0; выделено 3 поля, заполненных 0.

R1

R1+1

R2 DB ?, ?, ? R2 R1+2

R2+1

R2+2

1) Если операндом является символическое имя IM1, которое соответствует смещению в сегменте 03АС1h, то после выполнения

MDDIM1

будет выделено 4 байта памяти. Адрес – М. Значение - 03АС1h.

2) Если необходимо выделить 100 байтов памяти и заполнить 1, то это можно сделать с помощью специального повторителя DUP.

DDB 100 DUP (1)

3) Определение одномерного массива слов, адрес первого элемента массива – имя MAS,значение его 1.

MASDW 1, 7, 35, 75, 84

4) Определение двумерного массива:

Arr DB 7, 94, 11, -5

DB 5, 0, 1, 2

DB -5, 0, 15, 24

5)Const EQU 100

DDBConstDUP (?); выделить 100 байтов памяти. В директиве определения байта (слова) максимально допустимая константа – 255 (65535).

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

ST1 DB ‘ABCDEF’

ST2 DW ‘AB’, ‘CD’, ‘EF’

Команда прерывания INT:

С помощью этой команды приостанавливается работа процессора, управление передается OC или BIOS и после выполнения какой-то системной обрабатывающей программы, управление передается команде, следующей за командой INT.

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

Например, чтобы вывести на экран ‘!’ необходимо:

MOV AH, 6

MOV DL, ‘!’

INT 21h ; ….

INT 21h– процессор передает управление ОС и должна быть выполнена функция, номер которой записан в регистре AH

#6 – говорит о том, что нужно вывести на экран 1 символ, содержащийся в регистре DL.

Команды работы со стеком:

Стек определяется с помощью регистров SS и SP(ESP).

Сегментный регистр SS содержит адрес начала сегмента стека. ОС сама выбирает этот адрес и пересылает его в регистр SS.

Регистр SP указывает на вершину стека и при добавлении элемента стека содержимое этого регистра уменьшается на длину операнда.

Добавить элемент в стек можно с помощью команды

PUSH<операнд>,

где операндом может быть как регистр, так и переменная.

Удалить элемент с вершины стека можно с помощью операции

POP<операнд>,

Для i186 и >PUSHA/ POPA позволяют положить в стек, удалить содержимое всех регистров общего назначения в последовательности AX, BX, CX, DX, SP, BP, SI, DI.

Для i386 и >PUSHAD/ POPAD позволяют положить в стек, удалить содержимое всех регистров общего назначения в последовательности EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI

К любому элементу стека можно обратиться следующим образом

MOV BP, SP; (SP)®BP

MOV AX, [BP+6]; (SS:(BP+6))®AX.

Марта. Лекция 4

Решим задачу переслать информацию из одной области памяти в другую и вывести на экран.

Пример программы использующей директивы пересылки содержимого 4 байтов памяти и вывод на экран.

TITLEPrim.asm

Page , 120

; описание сегмента стека

SSegSegmentParastack ‘stack’

DB 100hDUP (?); выделяем 256 байтов под сегмент стека ничем их не заполняя

SSeg ends

; описаниесегментаданных

DSeg Segment Para Public ‘Data’

DANDB ’1’, ‘3’, ‘5’, ‘7’; 4 байта памяти

REZDB 4DUP (?); 4 байта памяти ничем не заполняя

DSegends

; кодовый сегмент оформлен как одна внешняя процедура, к

; ней обращаются из отладчика

СSegSegmentParaPublic ‘Сode’

ASSUME SS:SSeg, DS:DSeg, CS:CSeg

Start Proc FAR

PUSH DS

XOR AX, AX

PUSH AX

MOV AX, DSeg;

MOVDS,AX;

; пересылка данных в обратной последовательности с выводом на экран

MOVAH, 6; 6 номер функции ОС, определяющий вывод содержимого регистра DL на экран

MOVDL, DAN + 3

MOVREZ, DL; в обратной последовательности запишем на экран

Int21h; вывели на экран ‘7’

MOV DL, DAN + 2

MOVREZ + 1, DL

Int21h; символ 5 записали в область памяти RES + 1

MOV DL, DAN +1

MOV REZ + 2, DL

Int 21h

MOV DL, DAN

MOV REZ + 3, DL

Int 21h

MOV AH, 4CH

Int 21h

Start endp

CSeg ends

End Start

Директива TITLE:

Определяет заголовок листинга программы, в котором может содержаться до 60 символов, если первые шесть символов удовлетворяют требованиям идентификатора символического имени Ассемблера и в программе нет директивы NAME, то может восприниматься как имя модуля.

Директива PAGE:

В лучшем случае с двумя параметрами определяет количество строк на странице листинга. Если первого параметра нет, то по умолчанию 57 строк на странице листинга, а второй количество символов в строке – по умолчанию 80 или до 132. Эта директива может использоваться без параметров, в этом случае она определяет переход на следующую страницу листинга.

Директива сегмента:

Общий вид

<имя>Segment<ReadOnly><выравнивание><тип><размер><’класс’>

Любой из операндов может отсутствовать.

1) Если есть <ReadOnly>, то будет выведено сообщение об ошибке при попытке записи в сегмент.

2) Операнд <выравнивание> определяет адрес начала сегмента.

• BYTE - адрес начала сегмента может быть любым,

• WORD - адрес начала сегмента кратен 2,

• DWORD - адрес начала сегмента кратен 4,

• Para - адрес начала сегмента кратен 16 – (по умолчанию),

• Page- адрес начала сегмента кратен 256.

3) <тип> определяет тип объединения сегментов.

Значение stack указывается в сегменте стека, для остальных сегментов – public. Если такой параметр присутствует, то все сегменты с одним именем и различными классами объединяются в один последовательно в порядке их записи.

Значение ‘Common’ говорит, что сегменты с одним именем объединены, но не последовательно, а с одного и того же адреса так, что общий размер сегмента будет равен не сумме, а максимуму из них.

Значение IT<выражение> - указывает на то, что сегмент должен располагаться по фиксированному абсолютному адресу, определенному операндом <выражение>,

Значение ‘Private’ означает, что этот сегмент ни с каким другим объединяться не должен.

4) <разрядность>use 16 – сегмент до 64 Кб, use 32 – сегмент до 4 ГБ

5) ‘<класс>’ – с одинаковым классом сегменты располагаются в исполняемом файле последовательно друг за другом.

Упрощенные или точечные директивы Ассемблера:

Точечные потому что начинаются с точки.

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

.MODEL - директива, определяющая модель выделяемой памяти для программы. У данной директивы только один параметр. Модель памяти определяется параметром:

- tiny – под всю программу выделяется 1 сегмент памяти,

- small – под данные и под программу выделяются по одному сегменту,

- medium – под данные выделяется один сегмент, под программу выделяется несколько сегментов,

- compact – под программу выделяется один сегмент, под данные выделяется несколько сегментов,

- large - под данные и под программу выделяются по n сегментов,

- huge– позволяет использовать сегментов больше, чем позволяет ОП.

Пример использования точечных директив в программе на Асс-ре.

MODELsmall

STACK 100h

DATA

St1 DB ‘Line1’, ‘$’

St2 DB ‘Line2’, ‘$’

St3 DB ‘Line3’, ‘$’

CODE

begin: MOVAH, 9; 9 - номер функции вывода строки на экран (метка внутренняя, так как двоеточие)

MOVDX, offsetSt1; адрес ST1 должен содержаться в регистре DX

Int 21h

MOV DX, offset St2

Int 21h

MOV AH, 4CH

Int 21h

Endbegin

‘$’ – конец строки, которую необходимо вывести на экран

В результате выполнения программы:

Line1 Line2 Line3.

Если необходимо вывести

Line1

Line2

Line3,

то в сегмент данных необходимо внести изменения

St1 DB ‘Line1’, 13, 10, ‘$’

St2 DB ‘Line2’, 0Dh, 0Ah, ‘$’

St3 DB ‘Line3’, ‘$’

COMфайлы:

После ассемблирования и редактирования мы получаем исполняемый .EXE файл, который содержит блок начальной загрузки, размером не менее 512 байт, но существует возможность создания другого вида исполняемого файла, который может быть получен на основе exe-файла с помощью системной обрабатывающей программы EXE2BIN.com или его можно создать с помощью среды разработки. Но не из всякого exe-файла можно создать com-файл. Исходный файл, для которого можно создать com-файл, должен удовлетворять определенным требованиям.

Отличия exe-файла от com-файла:

1. В com-файлах отсутствует блок начальной загрузки и следовательно он занимает меньше места, чем exe-файл.

2. exe-файл может занимать произвольный объем ОП. com-файл может занимать только один сегмент памяти.

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

4. Т.к. вся программа содержится в одном сегменте, перед выполнением программы все сегментные регистры содержат в качестве значения адрес префикса программного сегмента – PSP

PSP - 256 байтный блок, который содержится как в exe-файле, так и в com-файле, и т.к. адрес первой исполняемой команды отстоит на 256 (100h) байтов от адреса начала сегмента, то сразу после директивы ASSUME используется специальная директива org 100h, осуществляющая обход префикса программного сегмента

Пример создания com-файла.

TITLEProg_Сom-файл

Page 60 , 85

СSeg Segment Para ‘Сode’



2018-07-06 385 Обсуждений (0)
OP3 GE OP4) AND (OP5 LT OP6) 0.00 из 5.00 0 оценок









Обсуждение в статье: OP3 GE OP4) AND (OP5 LT OP6)

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (385)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)