lordvampir
Premium
- Joined
- Dec 9, 2010
- Messages
- 35
- Reaction score
- 10
собственно такая задача необходимо на б-асме (x64) написать функцию которая проверяла бы некоторые значения, и, если эти значения не соответствуют требованиям, вызывала бы exception.
вот примерный код:
на x86 этот код работает отлично (единственное отличие в используемых регистрах), на x64 падает с ошибкой: Access violation at address 0000000077790895 in module 'ntdll.dll'. Read of address FFFFFFFFFFFFFFFF.
ни хэлпе XE2, ни в нете ничего толкового найти не могу, очень прошу помощи... заранее спасибо...
вот примерный код:
Code:
procedure CreateIndexOutOfBoundsException(const Index, Bounds: Byte); //процедура генерации exception
begin
raise EBinaryException.Create(Format(LoadResString(@SBinaryIndexOutOfBounds), [Index, Bounds]));
end;
function MyFunc(const Value: Int64; Index: Byte): Byte;
asm
CMP DL, 50 //сравниваем Index с максимумом дозволенного
JBE @BeginGet //если не выходит за рамки дозволенного, переходим к выполнению необходимых действий
MOV CL, DL //передаём процедуре CreateIndexOutOfBoundsException полученный индекс
MOV DL, 50 //передаём процедуре CreateIndexOutOfBoundsException предел допустимого
CALL CreateIndexOutOfBoundsException //вызываем процедуру генерации exception
@BeginGet:
// делаем необходимое
end;
ни хэлпе XE2, ни в нете ничего толкового найти не могу, очень прошу помощи... заранее спасибо...