Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Вниз

Правильный синтаксис 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
14-53715
Карелин Артем
2004-01-29 13:58
2004.02.17
Глюк?


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


3-53386
Set
2004-01-26 12:31
2004.02.17
А выбрана ли запись в DBGrid?


3-53388
Smalik
2004-01-27 11:40
2004.02.17
Как программно очистить таблицу в Access e


1-53491
MakNik
2004-02-09 10:34
2004.02.17
Открыто ли окно?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский