Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Встроенный ассемблер

7.6K
01 января 2007 года
Eternal Man
59 / / 07.07.2006
Вопрос:?
Как при помощи встроенного ассемблера ТП 7.0 реализовать директивы определения переменных (db,dw и т.д). Конкретно интересует сам синтаксис. Заранее спасибо.
10
01 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Eternal Man
Как при помощи встроенного ассемблера ТП 7.0 реализовать директивы определения переменных (db,dw и т.д).


BASM правильно интерптетирует переменные, объявленные в Паскале.

 
Код:
procedure TestAsm; assembler;
var
  IntVar: Integer;
  WordVar: Word;
  ByteVar: Byte;
asm
  mov IntVar, BX
  mov DX, WordVar
  mov ByteVar, CL
end;

Возможно, придётся писать begin asm end end и убрать модификатор assembler - проверить нечем.
7.6K
01 января 2007 года
Eternal Man
59 / / 07.07.2006
В предыдущем посте я неправильно выразился. Мне нужно объявить в Турбо Паскале 7.0 средствами встроенного ассемблера переменные нестандартных размеров (96 бит, 128 и более).
10
01 января 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Eternal Man
Мне нужно объявить в Турбо Паскале 7.0 средствами встроенного ассемблера переменные нестандартных размеров (96 бит, 128 и более).


У тебя MMX и SSE в DOS-е? Если нет, объявляешь в Паскале (массивами или записями - для ассемблера всё равно) и пользуешься. Если правильно помню, BASM не позволяет штатно описывать данные.

21K
02 января 2007 года
kerdan
18 / / 27.12.2006
Вообщем, так:

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.
И передавая им в стек адреса переменных, размер памяти
выделяешь память динамически.
Но это изврат полный (хотя и хуже бывало...).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог