Встроенный asm: запись данных в память по заданному адресу
От: Аноним  
Дата: 03.11.05 16:39
Оценка:
Пытаюсь разобраться со встроенным ассемблером.

Пусть есть функция, которой в качестве параметра передается указатель (например pchar).
Как из встроенного асма записать что-то в память по заданному указателем адресу?

function JustTest(p:pchar):integer;
begin
asm

mov edi,p
//Адрес в edi

mov eax,[edi]
//Считываем 32 бита с адреса, записанного в edi.
//Работает. В отладчике видно появление нужных значений в регистре.

mov [edi],eax //Пытаемся записать обратно.
//Не работает. Вылетает из функции без сообщений при отладке.
//Если запустить сам exe, то он выполняет "недопустимую операцию".

end;
end;

Есть другой, рабочий вариант:

function JustTest2(s:shortstring):integer;
begin
asm
lea edi,s
//Получаем адрес s в edi
mov eax,[edi]
//Работает
mov [edi],eax
//Работает
end;
end;

Но хочется именно pchar.

Где я напутал?
Всем заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.