| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Встроенный Ассемблер |
| Автор: Dimannn 27.8.2006, 01:23 |
| Как работать со строковыми константами? нужно что-то вроде mov eax, Space , но чтобы в eax записалось на первые четыре байта спейса, а адрес. Space - константа. |
| Автор: BUGOR 27.8.2006, 07:07 | ||
По-моему только через доп. переменную - указатель.
|
| Автор: RideX 27.8.2006, 10:49 | ||
|
| Автор: Romikgy 27.8.2006, 12:40 |
| а не через lea????? |
| Автор: BUGOR 27.8.2006, 16:09 | ||
Romikgy, в случае с константой нет. Если бы это была переменная типа string, тогда бы lea подошла.
|
| Автор: RideX 27.8.2006, 21:40 | ||
Можно по разному, вот пример:
Здесь соответствующую строку можно заменить той, которая в комментарии. |
| Автор: Alexeis 27.8.2006, 22:03 |
| С константами дело гиблое! Они хранятся в специальной области памяти. Попытка обратится к данным по адресу константы приводит к ошибке! Обратитесь к http://vingrad.ru/@Петрович он в этом деле большой специалист (по крайней мере написал оч. хорошую статью описывающую все типы строк и их отображение в памяти) |
| Автор: BUGOR 28.8.2006, 08:03 |
| alexeis1, дай пожалуйста ссылку на статью. |
| Автор: Alexeis 28.8.2006, 09:10 |
| http://www.sources.ru/magazine/0804/delphistr.html |
| Автор: RideX 28.8.2006, 16:30 | ||
Вы не правы, это заблуждение, на самом деле никаких ошибок не будет! |
| Автор: Alexeis 28.8.2006, 16:57 | ||||
RideX, кажись я понял, проблемы возникают не при чтении а при записи по адресу, константы.
|
| Автор: Dimannn 6.9.2006, 19:03 | ||
| Извиняюсь за задержку, технические сложности. Но суть проблемы в том, чтобы минимальными усилиями заставить включить строковую константу в конечный файл, но надо учесть, что после операций над ним, операция на памятью под адресом константы может вызвать ошибку. Константа должна быть локальной и нетипизированной! mov eax, Space и mov eax, dword ptr(Space) компилируются одинаково, и при этом они счетают константу DWORDом(при SPACE = #10#13#15#14 получаю mov eax, 10131415) Собственно, задача моя заключается в том, чтобы заставить компилятор сделать несколько постого места после retn процедуры, а строковые константы именно туда и пишутся. Добавлено @ 19:10 RideX, Собственно говоря, это можно сделать и без ассемблера.
|
| Автор: RideX 6.9.2006, 21:48 | ||||||
Я очень рад, думаю теперь ты с асмом на ты!
Не может быть, только что проверил
eax = 00401F10, и по этому адресу лежит:
...что тебе и нужно. |