2016-06-05 11 views
5

क्या एलआईए निर्देश नकारात्मक विस्थापन का समर्थन करता है?असेंबली सूचक अंकगणित एलआईए निर्देश

mov rax, 1 
lea rsi, [rsp - rax] 

मैं त्रुटि मिली जब मैं अपने एएसएम फ़ाइल में उपरोक्त कोड का उपयोग करें:

$ nasm -f macho64 test.asm 
$ error: invalid effective address 

मैं यह जान लें कि हम सी में कुछ इस तरह कर सकते हैं:

void foo(char *a, size_t b) { 
    *(a - b) = 1; 
} 
तो

मैं मान लें कि:

lea rsi, [rsp - rax]  

काम करेगा ।

और मैं भी देखने के लिए का उपयोग करके जीसीसी संकलक करना क्या प्रयास करें:

$ gcc -S foo.c // foo.c has the function foo(above) in it 

लेकिन मेरे एएसएम knowleage काफी मेरे लिए जीसीसी संकलक से एएसएम उत्पादन समझ में नहीं आता है।

lea rsi, [rsp - rax] ;; invalid effective address 

काम नहीं करता:

किसी को भी क्यों की व्याख्या कर सकते। और मैं इन samething प्राप्त करने के लिए उपयोग कर रहा हूँ:

;; assume rax has some positive number 
neg rax  
lea rsi, [rsp + rax] 
neg rax 

या

sub rsp, rax 
mov rsi, rsp 
add rsp, rax 

यह कर का एक और अधिक मानक तरीका क्या है?

मैं एनएएसएम संस्करण 2.11.08 पर मैक OSX 26 नवंबर 2015 को संकलित 10.11

आपकी मदद के लिए अग्रिम रूप से धन्यवाद का उपयोग कर रहा हूँ!

+2

क्योंकि सीपीयू इस प्रकार के ऑपरेशन का समर्थन नहीं करता है? – MikeCAT

+1

'mov rsi, rsp \ sub rsi, rax' – harold

+0

@MikeCAT के बारे में कैसे पर्याप्त है, आप इसे उत्तर के रूप में बना सकते हैं। धन्यवाद! – user62453

उत्तर

7

lea निर्देश विस्थापन के संकेत के बारे में परवाह नहीं करता है। लेकिन आपको हमेशा घटकों को जोड़ने की आवश्यकता है।

mov rax, -1 
lea rsi, [rsp + rax] 

1 घटाकर याद रखें -1 जोड़ने के समान होता है।

संबंधित मुद्दे