Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-53518
Genry
2004-02-05 15:43
2004.02.17
Зарегистрирован ли COM-объект ?


8-53651
Pinocchio
2003-10-16 08:39
2004.02.17
Поделитесь исходниками простого граф редактора


3-53366
Xmen
2004-01-28 08:23
2004.02.17
Перекодировка


3-53412
Igoryok
2004-01-24 11:11
2004.02.17
Есть ли Jet 4.0 в MDAC 2.5


3-53382
Zilog
2004-01-26 11:16
2004.02.17
Сортировка




   Наверх