Voglio sollevare un'eccezione in un blocco asm X64.Come si genera un'eccezione in un blocco asm?
lascia supporre Ho una funzione in questo modo:
function Example(Values: array of integer): integer;
asm
or rcx,rcx
jz @error
....
So che posso appena letto il puntatore e ottenere un AV, però vorrei sollevare un errore più descrittivo.
ho potuto fare una funzione aggiuntiva e chiamare quello:
asm
or rcx,rcx
jz @error
....
@error:
mov ecx, 1
mov rdx, ErrorString
jmp RaiseError
....
function RaiseError(code: integer; const Msg: string);
begin
case code of
1: raise EEmptyArrayError.Create(Msg);
Tuttavia l'errore sarà quindi avvenire al di fuori della funzione in cui è stato causato. Come faccio a ottenere l'eccezione (sembra) originata dalla funzione Example
.
Si noti che questo è X64, quindi tutte le risposte SEH valide per X86 non vanno bene perché X64 utilizza VEH.
Penso che sia ancora SEH in x64. E basta scrivere un po 'di Pascal e vedere cosa emette il compilatore per risolverlo. –
Poiché nessun altro chiederà, se il codice è abbastanza alto da consentire di generare eccezioni, perché lo si scrive in assembly in primo luogo? – alcalde
Perché ha bisogno di istruzioni SSE e non ho intrinseco SSE. – Johan