Манипуляции с указателями
- LEA загрузить эффективный адрес
LEA загружает целевой регистр адресом исходного операнда. Следующий фрагмент кода содержит два примера с инструкцией LEA. Первый показывает, как следует назначать адрес целому указателю, а второй — как извлекать адрес локального символьного массива с помощью инструкции LEA и передавать адрес как параметр API-функции GetwindowsDirectory.
void LEAExamples ( void )
{
int * pint ;
int iVal ;
// Следующие инструкции эквивалентны С-коду
// pint = siVal ;.
_asm
{
LEA EAX , iVal
MOV [pint] , EAX
}
///////////////////////////////////////////////////////////////////
char szBuff [ MAX_PATH ] ;
// Другой пример доступа к указателю через LEA.
// Эта последовательность инструкций идентична С-коду
// GetWindowsDirectory ( szBuff , МАХ_РАТН ) ;.
_asm
{
PUSH 104h // Поместить МАХ_РАТН в стек как
// второй параметр.
LEA ЕСХ , szBuff // Получить адрес szBuff.
PUSH ECX // Поместить адрес szBuff в стек как
// первый параметр.
CALL DWORD PTR [GetWindowsDirectory]
}
}