जब nasm
के साथ इस कोड कोडांतरण:"mov rax, 0x1" के बजाय हमेशा "mov eax, 0x1" का उपयोग किया जा सकता है?
b8 01 00 00 00 b8 01 00 00 00
जो है mov eax, 0x1
के लिए opcode दो बार दोहराया:
BITS 64
mov eax, 0x1
mov rax, 0x1
मैं इस उत्पादन मिलता है।
इसका मतलब यह है कि mov rax, 0x1
हमेशाmov eax, 0x1
द्वारा बदला जा सकता है या यह सिर्फ इस मामले में है?
यदि यह सही यह तुलना में उपयोग करने के लिए बेहतर नहीं होगा है: जब इकट्ठे जबकि mov eax, 0x1
केवल 5 बाइट्स
xor rax, rax
inc rax
कि 6 बाइट्स हो जाता है के रूप में
?
प्रासंगिक: http://stackoverflow.com/questions/8502839/loading-small-numbers-into-64-bit-x86-registers –
असल में, क्योंकि पहला स्निपेट सही है, दूसरा स्निपेट केवल 4 बाइट्स लेगा (कोई आरईएक्स उपसर्ग आवश्यक)। – harold
'xor eax, eax' /' inc eax' 4B है, 'mov eax, 1' से थोड़ा छोटा है। लेकिन तब तक इसका उपयोग न करें जब तक कि आप कोड-आकार के लिए अत्यधिक अनुकूलित नहीं होते। एक निर्देश (और एक फ़्यूज्ड-डोमेन यूओपी) को सहेजने के लिए 1 बाइट खर्च करना आधुनिक CPUs के लिए इसके लायक है। –