Главная страница
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.019 c
1-53456
Grinder
2004-02-05 14:16
2004.02.17
TMemIniFile


1-53514
still_swamp
2004-02-05 17:28
2004.02.17
А-ля Delphi


3-53411
Санек
2004-01-26 11:54
2004.02.17
Как сделать чтобы GotoBookmark не менял грид ?


1-53466
VID
2004-02-05 19:53
2004.02.17
Уменьшение межстрочного интервала в RichEdit


3-53407
Karlson
2004-01-26 15:16
2004.02.17
скролинг в DbGrid