2013-11-28 5 views
6

जब मैं मुख्य तोड़ता हूं तो ऐसा लगता है कि बोल्ड लाइन है जहां मुझे बनाया जा रहा है और शुरू किया गया है। मुझे लगता है कि मैं इस सब गलत पर जा रहा हूं, मैं x86_64 असेंबली को एक पुस्तक से जांचने की कोशिश कर रहा हूं जो x86 को समझा रहा है। यह अजीब लगता है और मुझे पूरा यकीन है कि मैं इस पुस्तक में देखकर समझ में नहीं आता हूं कि वह कहता है कि वह 4-बाइट्स के रूप में एक शब्द और शब्द का उल्लेख करेगा। अगर मुझे अपनी पहचान में सहायता करने के लिए स्पष्टीकरण मिल सकता है तो इसकी सराहना की जाएगी। पहली बार असेंबली सीखना, क्या यह कह रहा है कि एक शब्द का आकार 8-बाइट है?

 (gdb) list 
    1 #include <stdio.h> 
    2 
    3 int main() 
    4 { 
    5  int i; 
    6  for(i=0; i < 10; i++) 
    7  { 
    8   printf("Hello, world!\n"); 
    9  } 
    10  return 0; 
    (gdb) disassemble main 
    Dump of assembler code for function main: 
     0x0000000100000f10 <+0>: push rbp 
     0x0000000100000f11 <+1>: mov rbp,rsp 
     0x0000000100000f14 <+4>: sub rsp,0x10 
     0x0000000100000f18 <+8>: mov DWORD PTR [rbp-0x4],0x0 
     0x0000000100000f1f <+15>: mov DWORD PTR [rbp-0x8],0x0 
     0x0000000100000f26 <+22>: cmp DWORD PTR [rbp-0x8],0xa 
     0x0000000100000f2d <+29>: jge 0x100000f54 <main+68> 
     0x0000000100000f33 <+35>: lea rdi,[rip+0x48]  # 0x100000f82 
     0x0000000100000f3a <+42>: mov al,0x0 
     0x0000000100000f3c <+44>: call 0x100000f60 
     0x0000000100000f41 <+49>: mov DWORD PTR [rbp-0xc],eax 
     0x0000000100000f44 <+52>: mov eax,DWORD PTR [rbp-0x8] 
     0x0000000100000f47 <+55>: add eax,0x1 
     0x0000000100000f4c <+60>: mov DWORD PTR [rbp-0x8],eax 
     0x0000000100000f4f <+63>: jmp 0x100000f26 <main+22> 
     0x0000000100000f54 <+68>: mov eax,0x0 
     0x0000000100000f59 <+73>: add rsp,0x10 
     0x0000000100000f5d <+77>: pop rbp 
     0x0000000100000f5e <+78>: ret  
    End of assembler dump. </code> 
+0

आपने इस बात से कैसे पता लगाया कि एक शब्द का आकार 8 बाइट है? – ScarletAmaranth

+0

प्रोसेसर 64 बिट है, इसलिए मैं कहूंगा कि शब्द 64 बिट लंबा है, जैसा कि बाईं ओर दिए गए पते द्वारा पुष्टि की गई है। फिर, हाँ, एक शब्द 8 बाइट्स है। शायद आपकी पुस्तक 32 बिट प्रोसेसर को संदर्भित करती है। – HAL9000

+0

@ HAL9000 शब्द 64 बिट लंबा है? nope.jpg – ScarletAmaranth

उत्तर

7

The terms used to describe sizes in the x86 architecture are:

  • byte: 8 बिट
  • word: 2 बाइट्स
  • dword: 4 बाइट्स ("डबल शब्द" के लिए खड़ा है)
  • qword: 8 बाइट्स

यह वह जगह है ("ट्रैक्टर शब्द" के लिए खड़ा है) कुछ हद तक "शब्द" के सामान्य अर्थ के साथ बाधाओं में: word की 16-बिट प्रकृति, उनके 16 बिट उत्पत्ति से x86 मशीनों के विकास का परिणाम है, न कि मशीन के प्राकृतिक शब्द आकार का प्रतिबिंब। संगतता कारणों के लिए word ऑपरेंड का आकार हमेशा 64-बिट मशीन पर भी वही रहता है।

ध्यान दें कि आपके प्रोग्राम में परिवर्तनीय i 32 बिट्स है: आप संबंधित स्टैक एक्सेस में dword आकार एनोटेशन देख सकते हैं। i के प्रकार के साथ long int के प्रकार के साथ अपने प्रोग्राम को पुन: संकलित करने के लिए निर्देशक हो सकता है।

+0

धन्यवाद, मैं अब स्क्रब-हुड से बाहर निकलने के लिए अपना रास्ता सीखने के लिए वापस जाऊंगा। –

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