L'istruzione LEA supporta lo spostamento negativo?istruzioni LEA aritmetica del puntatore di assemblaggio
mov rax, 1
lea rsi, [rsp - rax]
Quando uso il codice di cui sopra nel mio file asm ho ottenuto l'errore:
$ nasm -f macho64 test.asm
$ error: invalid effective address
So che possiamo fare qualcosa di simile in C:
void foo(char *a, size_t b) {
*(a - b) = 1;
}
poi ho Supponiamo che:
lea rsi, [rsp - rax]
funzionerà .
E cerco anche di vedere ciò che il compilatore GCC fare utilizzando:
$ gcc -S foo.c // foo.c has the function foo(above) in it
ma il mio ASM knowleage non è sufficiente per me il comprendere l'uscita asm dal compilatore GCC.
qualcuno può spiegare il motivo per cui:
lea rsi, [rsp - rax] ;; invalid effective address
non funziona. E sto usando questi per ottenere la samething:
;; assume rax has some positive number
neg rax
lea rsi, [rsp + rax]
neg rax
o
sub rsp, rax
mov rsi, rsp
add rsp, rax
Che è un modo più standard di farlo?
sto usando NASM versione 2.11.08 compilato il 26 novembre 2015 su Mac OSX 10.11
vi ringrazio in anticipo per il vostro aiuto!
Perché la CPU non supporta questo tipo di operazione? – MikeCAT
Che ne dite di 'mov rsi, rsp \ sub rsi, rax' – harold
@MikeCAT abbastanza semplicemente, potete farlo come risposte. Grazie! – user62453