
- •1.Алфавит языка паскаль
- •9.6.Функции определения порядка
- •10.Тип вещественный
- •12.Операторы
- •12.1.Простые операторы
- •13.2.Вывод данных на монитор
- •13.3.Форматирование при выводе данных
- •17.1.Объявление и вызов подпрограмм
- •19.Блоки (модули) в паскале
- •19.1.Блок Crt (Unit Crt)
- •23.1.Работа с текстовыми файлами
- •24.Динамическая память
- •640 Кбайт ┌───────────────────┐
- •26.Динамические библиотеки
- •28.Тип объект (класс)
- •30.Встроенный ассемблер
- •30.1.Объявление операндов
- •31.Основы работы в графическом режиме
- •34.Многоугольники
- •35.Криволинейные фигуры
- •39.Команды работы редактора
30.Встроенный ассемблер
Доступ к встроенному Ассемблеру осуществляется через оператор
Asm. Синтаксис этого оператора выглядит почти также, как структур-
ный оператор, а именно
Asm
<операторы ассемблера>
End;
Примечания:
->В одной строке можно размещать несколько операторов, отделяя
их точкой с запятой, в противном случае точка не требуется.
->Комментарии оформляются по правилам Паскаля.
->Встроенный Ассемблер вычисляет все выражения в виде 32-раз-
рядных целых чисел и не поддерживает вещественных чисел.
->Операторы Ассемблера не должны изменять регистры Bp,Sp,Ss,Ds.
->Метки оформляются по правилам Паскаля, за исключением лока-
льных. Локальные метки начинаются с символя @x..x и могут не
объявляться.
30.1.Объявление операндов
Встроенный Ассемблер поддерживает только три директивы опреде-
ления данных: Db/Dw/Dd - определить байт/слово/двойное слово. Каж-
дая из них генерирует данные в соответствии с операндами, разделен-
ными запятыми, которые следуют за директивой. Генерируемые директи-
вами Db ,Dw, Dd данные запоминаются в сегменте кода.
->Директива Db генерирует последовательность байт. Каждый опе-
рант может быть константным выражением со значеним в диапа-
зоне от -127 до 255 или строкой символов любой длины, в пос-
леднем случае генерируется несколько байт.
->Директива Dw генерирует последовательность слов. Каждый опе-
ранд может быть константным выражением со значением в диапа-
зоне от -32768 до 65535 или адресным выражением, в последнем
случае генерируется короткий указатель - смещение адреса.
->Директива Dd генерирует последовательность двойных слов. Ка-
ждый операнд может быть константным выражением со значением
в диапазоне -2147483648 до 4294967295 или адресным выражени-
ем, в последнем случае генерируется длинный указатель, соде-
ржащий смещение и, далее, сегмент.
->Для генерации данных в сегменте данных их следует объявлять
по правилам Паскаля с использованием Var и Const и распола-
гать до оператора Asm.
Пример 91.
Asm
Db OFFH {один байт}
Db 0,9 {два байта}
Db 'A' {символ}
Db 'Hello..',ODH,OAH {строка, завершаемая CR/CF}
Dw 0,9999 {два слова}
Dw 'A' {аналог Db 'A',0}
Dw 'BA' {аналог Db 'A','B'}
Dw MyVar {смещение MyVar}
Dw MyProc {смещение MyProc}
Dd 0,99999999 {два двойных слова}
Dd 'A' {аналог Db 'A',0,0,0}
Dd MyVar {указатель на MyVar}
Dd MyProc {Указатель на MyProc}
End;
Встроенный Ассемблер имеет набор зарезервированных слов, кото-
рые не рекомендуется давать собственным идентификаторам.
Ah Cs Low Si
Al Cx Mod Sp
And Dh Near Ss
Ax Di Not St
Bh Dl Ofset TByte
Bl Ds Or Type
Bp DWord Ptr Word
Bx Dx QWord Xor
Byte Es Seg
Ch Far Shl
Cl High Shr
Зарезервированные слова всегда имеют преимущество перед иден-
тификаторами, определенными пользователями. Перед идентификатором,
совпадающим с зарезервированным словом, следует указавыть амперсанд
&, например, &Ch.
Наиболее важным различием между Паскалем и Ассемблером заклю-
чается в том, что все выражение встроенного Ассемблера имеют посто-
янную величину, которая может быть вычислена во время компиляции.
Так допустимым является фрагмент программы
Const X=10;
Y=20;
Var Z:Integer;
Asm
Mov Z,X+Y
End;
В то же время следующий фрагмент недопустим
Var X,Y,Z:Integer;
Asm
Mov Z.X+Y
End;
В последнем случае правильной записью будет набор операторов
Asm
Mov Ax,X
Add Ax,Y
Mov Z,Ax
End;
По умолчанию Ассемблер поддерживает десятичную систему исчис-
ление, однако может поддерживать и другие. Двоичное представление
указывается с помощью буквы B после числа, восьмиричное O, шестнад-
цатиричное H после числа или префиксом $ перед числом. В любом слу-
чае число должно начинаться с цифры. Если необходимо записать шест-
надцатиричное число, начинающееся с буквы, следует вначале дописать
ноль, иначе он будет воспринят как идентификатор.
Строковые константы должны быть заключены в кавычки или апост-
рофы.