Встроенный 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;