2013-11-28 28 views
6

Ana devre dışı kaldığımda, kalın çizginin oluşturulduğu ve başlatıldığı yer olduğu anlaşılıyor. Sanırım yanlış anlıyorum, x86_64 derlemesini x86'yı açıklayan bir kitaptan incelemeye çalışıyorum. Bu garip görünüyor ve eminim ki bu kitapta gördüğümü anlamıyorum, bir kelime ve dword'u 4 bayt olarak ifade edeceğini söylüyor. Bilgim olsun diye bir açıklama yapabilseydim, büyük takdir olurdu. İlk kez öğrenme topluluğu, bu kelime büyüklüğü 8 bayt mı?

 (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

Bundan nasıl bir kelime boyutu 8 bayt olduğunu belirlediniz? – ScarletAmaranth

+0

İşlemci 64 bit olduğu için, bu kelimenin soldaki adresler tarafından onaylandığı gibi 64 bit uzunluğunda olduğunu söyleyebilirim. Sonra, evet, bir kelime 8 bayttır. Belki de kitabınız 32 bit işlemci anlamına gelir. – HAL9000

+0

@ HAL9000 word 64 bit uzunluğunda mı? nope.jpg – ScarletAmaranth

cevap

7

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

  • byte: 8 bit
  • word: 2 bayt
  • dword: 4 bayt
  • qword ("çift kelime" anlamına gelir): 8 byte

Bu ("dört kelime" anlamına gelir) "word" kelimesinin olağan anlamı ile bir şekilde: word'un 16-bit doğası, x86 makinelerinin 16 bitlik kökenlerinden evriminin bir sonucudur, makinenin doğal kelime boyutunun bir yansıması değildir. Uyumluluk nedeniyle, bir word işleneninin boyutu, 64 bitlik bir makinede bile her zaman aynı kalmalıdır.

Programınızdaki i değişkeninin 32 bit olduğunu unutmayın: İlgili yığın erişimlerinde dword boyut ek açıklamalarını görebilirsiniz. Programınızı long int olarak değiştirilmiş şekilde yeniden derlemek öğretici olabilir.

+0

Teşekkürler, şimdi ovalamadan çıkış yolumu öğrenmeye geri döneceğim. –