Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. CЛОВА И ВЫРАЖЕНИЯ К РАЗГОВОРНЫМ ТЕМАМ.
  2. Арифметические выражения
  3. Арифметические выражения
  4. Арифметические, логические, символьные выражения
  5. Введение в программирование на языке Pascal Работа с величинами. Ввод-вывод Выражения. Линейные алгоритмы
  6. Выборы…. представляют собой способ формирования органов власти на основе выражения политической воли граждан
  7. Выборы…. представляют собой способ формирования органов власти на основе выражения политической воли граждан
  8. Выражения
  9. Выражения для диалога

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

Регистровое выражение - это выражение, состоящее из имени регистра. Вес сле­дующие команды содержат только регистровые выражения:

push ds
Pop es

mov ah,bl

Непосредственные выражения - это нетипизированные константы и имена типов. Примеры непосредственных выражений:

Const

dec =10;

Asm

mov ax, dec

mov bx, 0

add cx, 2*dec+l

sub dh, -5

End;

Все остальные выражения относятся к ссылкам на память. Например:

Const

dec: Word=10;

Step - 12;

Var

X,Y: Byte;

Asm

mov ax, dec

mov ex, [Step]

add ah, X

mov Y, bl

mov ax, [bx]

End;

Важным отличием ассемблерных выражений от выражений Турбо Паскаля является то обстоятельство, что они должны быть статическими, т.е. разрешены (вычислены)! на этапе создания программы. Если выражение может быть полностью вычислено к моменту его трансляции, т.е. если оно состоит только из регистровых или непосредственных значений, такое выражение называется абсолютным, компилятор вычисляет его и использует для создания команды.

В ходе компиляции программы вырабатывается так называемый объектный код, который затем преобразуется компоновщиком в готовую к работе программу. При создании объектного кода компилятор не может вычислить значения выражений типа «ссылка на память», так как не знает окончательного положения в памяти меток, пе­ременных, подпрограмм. В результате он создает так называемое перемещаемое вы­ражение, которое затем компоновщиком преобразуется в нужную ссылку на память.

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

Другое важное отличие ассемблерных выражений от выражений Турбо Паскаля за­ключается в способе интерпретации переменных. В выражениях Паскаля любая ссыл­ка на переменную интерпретируется как текущее содержимое этой переменной. В ассемблерных выражениях это справедливо только тогда, когда все выражение в це­лом состоит из имени переменной. Во всех остальных случаях ссылка на переменную интерпретируется как адрес переменной. Например, выражение

Х+10

в Паскале означает: «к содержимому переменной X прибавить 10». В ассемблерной команде это означает: «к адресу (смещению) переменной X прибавить 10». Однако команда

mov ax, X

означает: «поместить в регистр АХ первые два байта переменной X». Если бы нам понадобилось загрузить в АХ адрес переменной X, мы должны были бы написать

mov ax, OFFSET X

Попытка «перехитрить» ассемблер командами типа

mov ax, X+0

mov ax, X+1 – 1

и т.п. не дает желаемого результата: ассемблер просто загружает в АХ содержимое переменной X.

Как и в Паскале, ассемблерные выражения имеют тип, но в отличие от Паскаля этот тип определяет только размер объекта в памяти и не ограничивает применяемые к нему операции.

Встроенный ассемблер имеет следующие предопределенные типы:

 

Тип Длина в памяти
BYTE  
WORD  
DWORD  
QWORD  
TBYTE  
NEAR -
FAR -

Имена предопределенных типов можно использовать для приведения типов выра­жений. Например, если определены переменные

var

Flag: Boolean; X: Word;

то такие ассемблерные выражения недопустимы:

mov Flag, bx

mov ah, X

Для корректного задания последней команды можно использовать следующие ва­рианты:

mov ah, BYTE PTR X

mov ah, Byte(X)

mov ah, X.Byte

Во всех случаях в АН будет загружен первый (младший) байт переменной X.

 




Дата добавления: 2014-12-19; просмотров: 32 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав