Использование turbo pascal с языком ассемблера. Встроенный ассемблер, страница 5

Строковые константы  должны  быть  заключены  в  кавычки   или апострофы. Две  последовательные  "" или '' внутри строки считаются как один символ. Примеры строковых констант:

'Z'

'Turbo Pascal'

"That's all folks"

'"That"s all folks,"he said.'

'100'

'"'

"'"

Заметим, что  в  4  строке  использовались  2  апострофа   для указания одиночного символа "апостроф".

В директивах DB разрешены строковые константы любой длины. Это приводит к распределению последовательности байт,  содержащей ASCII

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

Ord(Ch1) + Ord(Ch2) shl 8 + Ord(Ch3) shl 16 + Ord(Ch4) shl 24

где Ch1 наиболее правый (последний) символ,  а Ch4 -  наиболее левый (первый) символ.  Если строка короче 4 символов,  самые левые символы устанавливаются в 0.  Несколько примеров строковых констант и соответствующих числовых значений:

'a'       00000061H

'ba'      00006261H

'cba'     00636261H

'dcba'    64636261H

'a '      00006120H

'   a'    20202061H

'a'*2     000000E2H

'a'-'A'   00000020H

not'a'    FFFFFF9EH

Регистры.

Следующие зарезервированные символы означают регистры 8086:

16-битный общего назначения     AX  BX  CX  DX

8-битный младший                AL  BL  CL  DL

8-битный старший                AH  BH  CH  DH

16-битный указатель или индекс  SP  BP  SI  DI

16-битный сегментный регистр    CS  DS  SS  ES

регистр стека 8087              ST

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

Базовые регистры (BX,  BP) и индексные регистры (SI, DI) могут быть написаны   внутри   []  для  указания  индексации.  Допустимые комбинации базовых/индексных регистров: [BX], [BP], [SI], [DI], [BX

+SI], [BX+DI], [BP+SI], [BP+DI].

Сегментные регистры  (ES,  CS,  SS,  DS)  могут использоваться вместе с  ":"  как  перекрытие  сегмента  для  указания   сегмента, отличного от того, который процессор выбирает по умолчанию.

Символ S  означает  самый  верхний  регистр из регистров стека

8087. Каждый  из  8  регистров  с  плавающей  точкой   может   быть использован с  помощью  ST(x),  где  х  -  константа  от  1  до  7, указывающая на смещение от вершины стека.

Символы.

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

@Code             @Data              @Result

Символы @Code и @Data представляют  текущие  сегменты  кода  и данных. Они  могут быть использованы только совместно с операторами

SEG:

asm

mov   ax,SEG @Data

mov   ds,ax

end;

Символ @Result представляет переменную с  результатом  функции внутри операторной части функции. Например, в функции

function Sum(X, Y: Integer): Integer;

begin

Sum := X + Y;

end;

оператор, который  назначает результат значения функции в Sum, будет использовать переменную @Result:

function Sum(X, Y: Integer): Integer;

begin

asm

mov   ax,X

add   ax,Y

mov   @Result,AX

end;

end;

Следующие символы не  могут  быть  использованы  в  выражениях встроенного Ассемблера:

- Стандартные процедуры и функции (например Writeln, Chr).

- Специальные массивы Mem, MemW, MemL, Port, PortW.

- Константы строковые, с плавающей точкой и типа множество.

- Процедуры и функции, объявленные с директивой inline.

- Метки, которые не объявлены в текущем блоке.

- Символ @Result вне функции.