Lệnh LEA có hỗ trợ chuyển vị âm?số học lắp ráp số học Lệnh LEA
mov rax, 1
lea rsi, [rsp - rax]
Khi tôi sử dụng đoạn mã trên trong file asm của tôi, tôi đã nhận lỗi:
$ nasm -f macho64 test.asm
$ error: invalid effective address
tôi biết rằng chúng tôi có thể làm một cái gì đó như thế này trong C:
void foo(char *a, size_t b) {
*(a - b) = 1;
}
sau đó tôi giả sử rằng:
lea rsi, [rsp - rax]
sẽ hoạt động .
Và tôi cũng cố gắng để xem những gì các trình biên dịch GCC làm bằng cách sử dụng:
$ gcc -S foo.c // foo.c has the function foo(above) in it
nhưng knowleage asm của tôi là không đủ cho tôi hiểu ra asm từ trình biên dịch GCC.
bất cứ ai có thể giải thích lý do tại sao:
lea rsi, [rsp - rax] ;; invalid effective address
không hoạt động. Và tôi đang sử dụng chúng để đạt được samething:
;; assume rax has some positive number
neg rax
lea rsi, [rsp + rax]
neg rax
hoặc
sub rsp, rax
mov rsi, rsp
add rsp, rax
một cách tiêu chuẩn hơn để làm việc đó là gì?
Tôi đang sử dụng NASM phiên bản 2.11.08 được biên soạn vào ngày 26 tháng 11 năm 2015 trên MAC OSX 10.11
Cảm ơn bạn đã trợ giúp!
Vì CPU không hỗ trợ loại hoạt động như vậy? – MikeCAT
Làm thế nào về 'mov rsi, rsp \ sub rsi, rax' – harold
@MikeCAT đơn giản là đủ, bạn có thể làm điều này làm câu trả lời. Cảm ơn bạn! – user62453