Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

Правильный синтаксис inline asm   Найти похожие ветки 

 
evvcom   (2004-02-09 13:26) [0]

Есть

const
MyStrConst = "This string is const";


Что-то запарился эту константу (адрес) пихать в Inline assembly code в какой-нибудь регистр:

mov eax, MyStrConst // Error "String constant too long"
lea eax, MyStrConst // аналогично
mov eax, @MyStrConst // Error "Operand size mismatch"
lea eax, @MyStrConst // Error "Undeclared identifier: "@MyStrConst"


и так далее. DWORD PTR тоже не помогают. Что-то неправильно с синтаксисом, а Help на эту тему в Дельфи скудноватый.


 
Anatoly Podgoretsky ©   (2004-02-09 13:31) [1]

В регистр нужно адрес засылать, а у тебя его нет.


 
VMcL ©   (2004-02-09 13:35) [2]

>>evvcom (09.02.04 13:26)

const
MyStrConst: String {или PChar} = "This string is const";


 
Digitman ©   (2004-02-09 13:37) [3]

в Д5 при данной декларации MyStrConst обе нижеследующие строчки не вызывают ошибок компиляции :

mov eax, MyStrConst
lea eax, MyStrConst


 
evvcom   (2004-02-09 13:40) [4]

Я понимаю про адрес. Если мы этот MyStrConst будем пихать куда-либо в паскале, то компилятор этот MyStrConst разместит в памяти и подсунет куда надо адрес. Если только в inline asm компилятор ведет себя иначе, то тогда действительно адреса нет.

Действительно. Похоже так. Сделал:
var
MyStrConst: string = "This string is const";
asm
mov eax, MyStrConst // Ok
lea eax, MyStrConst // Тоже Ok
end;


Спасибо за внимание


 
evvcom   (2004-02-09 13:41) [5]

Во, уже настрочили ответов!
>> VMcL
Точно, и так вышло.
Еще раз спасибо.


 
Anatoly Podgoretsky ©   (2004-02-09 13:59) [6]

evvcom (09.02.04 13:40) [4]
На самом деле это литерал, который преобразовывается в
mov eax, "This string is const"
такое естественно не допустимо, кроме указаного можно еще следующее

Label:
db "This string is const"

Это если чисто в ассемблерном стиле, стоять может после любого JMP


 
VMcL ©   (2004-02-09 14:29) [7]

...или RET


 
AKul ©   (2004-02-09 14:37) [8]


> evvcom (09.02.04 13:26)
> Есть
>
> const
> MyStrConst = "This string is const";

Если Вы хотите записать куда-нибудь адрес этой строки, то для этого ее следует расместить в памяти, например, объявив так
const
MyStrConst:string = "This string is const";
или любым другим способом



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-53453
JediMaster
2004-02-06 13:00
2004.02.17
Простые числа


1-53623
griff
2004-02-09 15:10
2004.02.17
Список функций в DLL, использующих конкретную функцию


1-53641
h0use
2004-02-06 15:46
2004.02.17
Как в компоненет создавать about?


1-53553
O?O
2004-02-05 12:34
2004.02.17
HTML форматирование


6-53667
MoRo
2003-12-15 10:21
2004.02.17
IP name