Erste Zeit mit dem lernen von Montage -, ist dies ein Wort zu sagen die Größe ist 8 Byte?
Wenn ich brechen, Hauptsache es sieht aus wie die Fette Linie ist, wo ich gerade erstellt und initialisiert. Ich denke, ich werde an dieser alles falsch, ich versuche zu prüfen, x86_64 Baugruppe aus einem Buch, das erklärt, wie x86. Dies scheint seltsam und ich bin mir ziemlich sicher, dass ich verstehe nur nicht, zu sehen, wie in diesem Buch, er sagt, er werde Sie finden, um ein word-und dword als 4-bytes. Wenn ich könnte, erhalten Sie eine Erklärung zu Hilfe mein incognisance es würde sehr geschätzt werden.
(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>
- Wie hast du figuure sich daraus, dass eine word-Größe 8 bytes?
- Als Prozessor ist 64-bit ich würde sagen, dass Wort ist 64-bit lang, so bestätigt von Adressen auf der linken Seite. Dann, ja, ein Wort ist 8 bytes. Vielleicht ist Ihr Buch bezieht sich auf ein 32-bit-Prozessor.
- Wort ist 64-bit lang? nope.jpg
- in einer 64-bit-Architektur Wort ist 64-bit lang: en.wikipedia.org/wiki/64-bit_computing stackoverflow.com/questions/5295903/...
- Sorry, habe vergessen zu Fett, aber warum ist diese zweite Linie geht zurück 8 von der base-pointer und die Bedeutung der einen zurück 4 @ScarletAmaranth?
<+8>: mov DWORD PTR [rbp-0x4],0x0
<+15>: mov DWORD PTR [rbp-0x8],0x0
- Ich stehe korrigiert, sieht aus wie ein Weg, der Blick auf die word erlaubt, für diese interpretation, danke.
- Der Begriff "Wort" bedeutet etwas in den alten Tagen zurück, wenn die Daten-bus-Größe war ein Spiel mit dem ALU und register Größe. Diese Zeiten sind lange vorbei und der Begriff bekam hoffnungslos mehrdeutig. Ein 32-bit-Prozessor wie das original Pentium bereits ein 64-bit-Daten-bus. Und eine 64-bit-Prozessor mit 48-bit-Adressbus. Wenn dieses Buch spricht über "Wort" eine Menge dann sind Sie definitiv sollten, anderen zu suchen.
- Es war reden mehr in Bezug auf den gdb Argumente, die verwendet werden, um zu untersuchen, Größen. Es ist nicht so, dass alt ein Buch ist. Ich war nur neugierig und nur für einige Schließung und so kann ich mark diese beantwortet... ein int ist 8 bytes, weil dieser ist 64-bit-assembly, das macht Sinn für mich. Maths.jpg
- Nun, Nein, es gibt keine x86_64 compiler verwendet 8 Byte für eine int. Viel zu teuer. Ein 64-bit-Architektur nicht kaufen Sie die doppelte Menge an cache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Bedingungen verwendet, um zu beschreiben Größen, die in der x86-Architektur sind:
byte
: 8 bitsword
: 2 Bytedword
: 4 bytes (steht für "double word")qword
: 8 bytes (steht für "quad word")Dies ist etwas im Widerspruch mit der üblichen Bedeutung von "Wort": die 16-bit-Natur der
word
ist ein Ergebnis der Entwicklung von x86-Maschinen von der 16-bit-Herkunft, nicht ein Spiegelbild der natürlichen Wortbreite der Maschine. Aus Gründen der Kompatibilität die Größe einesword
Operanden muss immer die gleiche bleiben, auch auf einem 64-bit-Maschine.Beachten Sie, dass die variable
i
im Programm ist 32 bit: sehen Siedword
Größe Anmerkungen in den entsprechenden stack zugreift. Kann es aufschlussreich sein zu kompilieren Sie Ihr Programm mit der Art deri
geändertlong int
.