2017-03-07 7 views
5

के निम्नलिखित कार्यक्रम है, जो तर्क का एक अहस्ताक्षरित वर्ग की गणना करता है पर विचार करें:रेटक और रिट के बीच क्या अंतर है?

.global foo 
.text 
foo: 
    mov %rdi, %rax 
    mul %rdi 
    ret 

यह ठीक से as द्वारा संकलित किया गया है, लेकिन

0000000000000000 <foo>: 
    0: 48 89 f8    mov %rdi,%rax 
    3: 48 f7 e7    mul %rdi 
    6: c3      retq 

को disassembles वहाँ ret और retq के बीच कोई अंतर है?

+2

'retq' ऑपरेंड आकार के बारे में स्पष्ट है, लेकिन यह वही निर्देश है। – Jester

उत्तर

7

लंबे (64-बिट) मोड में, आप स्टैक से %rip पर एक ट्रैडवर्ड पता पॉप करके (ret) लौटते हैं।

32-बिट मोड में, आप स्टैक से %eip पर एक दस्तावेज़ पता पॉप करके (ret) लौटते हैं।

कुछ उपकरण जैसे objdump -d पहले एक retq पर कॉल करें। यह सिर्फ एक नाम है, निर्देश एन्कोडिंग वही तरीका है (C3)।

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