procedure TestAsm; assembler;
var
IntVar: Integer;
WordVar: Word;
ByteVar: Byte;
asm
mov IntVar, BX
mov DX, WordVar
mov ByteVar, CL
end;
Встроенный ассемблер
Как при помощи встроенного ассемблера ТП 7.0 реализовать директивы определения переменных (db,dw и т.д). Конкретно интересует сам синтаксис. Заранее спасибо.
Цитата: Eternal Man
Как при помощи встроенного ассемблера ТП 7.0 реализовать директивы определения переменных (db,dw и т.д).
BASM правильно интерптетирует переменные, объявленные в Паскале.
Код:
Возможно, придётся писать begin asm end end и убрать модификатор assembler - проверить нечем.
В предыдущем посте я неправильно выразился. Мне нужно объявить в Турбо Паскале 7.0 средствами встроенного ассемблера переменные нестандартных размеров (96 бит, 128 и более).
Цитата: Eternal Man
Мне нужно объявить в Турбо Паскале 7.0 средствами встроенного ассемблера переменные нестандартных размеров (96 бит, 128 и более).
У тебя MMX и SSE в DOS-е? Если нет, объявляешь в Паскале (массивами или записями - для ассемблера всё равно) и пользуешься. Если правильно помню, BASM не позволяет штатно описывать данные.
asm
jmp @code
@my_var:
dw 4
@code:
mov word [cs:@my_var],1234
end;
Как видишь пидетсья лезть в сегмент кода.
Придется также оппрыгивать этот участок. (сам понимешь почему)
Но лучше переменные определяй в разделе var.
Например 96бит - array[1..96/4]of integer; в таком духе.
А имя переменной - тотже оффсет под нужное кол-во байт,
только, благодаря компил., в сегменте данных.
Еще вариант для извращенцев:
узнаешь через встроенный дебаггер (просмотр значений переменных)
паскаля адрес процедур getmem, freemem.
И передавая им в стек адреса переменных, размер памяти
выделяешь память динамически.
Но это изврат полный (хотя и хуже бывало...).