Переходы на точки входа процедур и функций всегда либо ближние, либо дальние, и никогда не короткие, а условные перехода на процедуры и функции не разрешены. Вы можете указать встроенному
Ассемблеру генерировать безусловный ближний или дальний переход на метку, используя конструкцию NEAR PTR или FAR PTR. Например операторы
jmp NEAR PTR Stop
jmp FAR PTR Stop
всегда генерируют ближний и дальний переходы соответственно, даже если Stop внутри диапазона короткого перехода.
Директивы Ассемблера.
Встроенный Ассемблер Turbo Pascal поддерживает 3 директивы
Ассемблера:
DB, DW, DD (определить байт, слово и двойное слово)
Они генерируют данные, соответствующие операндам, разделенным запятыми, в этой директиве.
Директива DB генерирует последовательность байт. Каждый операнд может быть константным выражением со значением от -128 до
255 или строкой символов любой длины. Константное выражение генерирует 1 байт кода, а строка генерирует последовательность байт со значениями, соответствующими ASCII кода каждого символа.
Директива DW генерирует последовательность слов. Каждый операнд может быть константным выражением со значением от -32768 до
65535 или адресным выражением. Для адресного выражения встроенный
Ассемблер генерирует ближний указатель, который содержит смещение этого адреса.
Директива DD генерирует последовательность двойных слов.
Каждый операнд может быть константным выражением со значением от
-2,147,483,648 до 4,294,967,295 или адресным выражением. Для адресного выражения встроенный Ассемблер генерирует дальний указатель, который содержит и смещение и сегментную часть адреса.
Данные, генерируемые директивами DB, DW, DD всегда хранятся в кодовом сегменте так же, как код, генерируемый другими операторами встроенного Ассемблера. Чтобы генерировать неинициализированные или инициализированные данные, в сегменте данных Вы должны использовать обычные объявления Var или Const Паскаля.
Примеры директив DB, DW, DD:
asm
DB 0FFH
DB 0,99
DB 'A'
DB 'Hello world...',0DH,0AH
DB 12,"Turbo Pascal"
DW 0FFFFH
DW 0,9999
DW 'A'
DW 'BA'
DW MyVar
DW MyProc
DD 0FFFFFFFFH
DD 0,999999999
DD 'A'
DD 'DCBA'
DD MyVar
DD MyProc
end;
Примечание: В Turbo Assembler, когда идентификатор стоит перед директивой DB, DW и DD, это приводит к объявлению переменной размером в байт, слово или двойное слово по адресу этой директивы.
Например, Turbo Assembler разрешает:
ByteVar DB ?
WordVar DW ?
...
mov al,ByteVar
mov bx,WordVar
Встроенный Ассемблер не поддерживает такое объявление переменных. В Turbo Pascal единственный символ, который может быть определен в операторе встроенного Ассемблера - это метка. Все переменные должны быть объявлены с использованием синтаксиса
Паскаля и предыдущий пример соответствует:
var
ByteVar: Byte;
WordVar: Word;
...
asm
mov al,ByteVar
mov bx,WordVar
end;
Операнды.
Операнды встроенного Ассемблера - это выражения, которые состоят из комбинации констант, регистров, символов и операторов.
Хотя выражения встроенного Ассемблера строятся с использованием тех же основных принципов, что и выражения Паскаля, существует ряд важных отличий, которые объясняются ниже.
Внутри операндов следующие зарезервированные слова имеют во встроенном Ассемблере предопределенный смысл:
AH CL FAR SEG
AL CS HIGH SHL
AND CX LOW SHR
AX DH MOD SI
BH DI NEAR SP
BL DL NOT SS
BP DS OFFSET ST
BX DWORD OR TBYTE
BYTE DX PTR TYPE
CH ES QWORD WORD
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.