![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как использовать строковые константы в asm..end?
Тыщ © (2009-01-14 20:26:00)Не работает ни так:
const mystring='my string';
asm
push offset mystring
end.
ни так:
const mystring='my string';
asm
push offset mystring
end.
Пишет 'String constant too long'.
Что компилятору надо, как дать понять, что я хочу адрес строки push'нуть?
Также не работают mov и lea.
Это в D7 и D10 (2005),
D5 на первый вариант генерирует какое-то случайное число,
а D3 вообще с internal error'ом валится.
oxffff (2009-01-14 20:54:00) [21]Еще вариант
asm
lea eax,@mystring;
mov eax,offset @mystring;
jmp @goout;
@Mystring:DB 'my string';
@goout:
end;
Тыщ (2009-01-14 20:49:00) [22]oxffff © (14.01.09 20:46) [3]
Этот вариант, конечно, лучше по генерации кода, но не буду же я вручную длину всех строк считать.
oxffff (2009-01-14 20:47:00) [23]
> Тыщ © (14.01.09 20:46) [4]
Я знаю поэтому [3].
Тыщ (2009-01-14 20:46:00) [24]> oxffff © (14.01.09 20:41) [2]
Этот вариант и вариант с pchar пишет в секцию данных лишний dword, криво это...
oxffff (2009-01-14 20:46:00) [25]const mystring:array[1..9] of char='my string';
asm
lea eax,mystring;
end;
oxffff (2009-01-14 20:41:00) [26]const mystring: string='my string';
asm
mov eax,mystring;
end;
Тыщ (2009-01-14 20:27:00) [27]Опечатка: второй вариант без offset