Als «assembly» getaggte Fragen

Fragen zur Assembler-Programmierung (asm). Stellen Sie sicher, dass Sie auch den Prozessor und / oder den Befehlssatz, den Sie verwenden, sowie den Assembler markieren. WARNUNG: Verwenden Sie für .NET-Assemblys stattdessen das Tag [.net-Assembly]. Verwenden Sie für Java ASM stattdessen das Tag [java-bytecode-asm].



3
Warum funktioniert das GCC-Pad mit NOPs?
Ich habe eine kurze Zeit mit C gearbeitet und vor kurzem angefangen, mich mit ASM zu beschäftigen. Wenn ich ein Programm kompiliere: int main(void) { int a = 0; a += 1; return 0; } Die objdump-Demontage hat den Code, aber nops nach dem ret: ... 08048394 <main>: 8048394: 55 …
80 c  gcc  assembly 

3
Was ist Intel-Mikrocode?
Nach dem, was ich gelesen habe, wird es verwendet, um Fehler in der CPU zu beheben, ohne das BIOS zu ändern. Aus meinen Grundkenntnissen in Assembly weiß ich, dass Assembly-Anweisungen von der CPU intern in Mikrocodes aufgeteilt und entsprechend ausgeführt werden. Aber Intel gibt irgendwie Zugriff auf einige Updates, während …
78 linux  assembly  intel 

5
Warum ist ein bedingter Umzug nicht anfällig für Branch Prediction Failure?
Nachdem ich diesen Beitrag gelesen hatte (Antwort auf StackOverflow) (im Optimierungsabschnitt), habe ich mich gefragt, warum bedingte Verschiebungen nicht für Branch Prediction Failure anfällig sind. Ich habe hier einen Artikel über Cond Moves gefunden (PDF von AMD) . Auch dort beanspruchen sie den Leistungsvorteil von cond. bewegt sich. Aber warum …


2
Was sind SP (Stack) und LR in ARM?
Ich lese immer wieder Definitionen und verstehe immer noch nicht, was SP und LR in ARM sind. Ich verstehe PC (es zeigt die Adresse der nächsten Anweisung), SP und LR sind wahrscheinlich ähnlich, aber ich verstehe einfach nicht, was es ist. Kannst du mir bitte Helfen? edit: Wenn du es …
76 assembly  stack  arm 

2
Was bedeutet @plt hier?
0x00000000004004b6 <main+30>: callq 0x400398 <printf@plt> Weiß jemand Bescheid? AKTUALISIEREN Warum disas printfgeben mir zwei unterschiedliche Ergebnisse? (gdb) disas printf Dump of assembler code for function printf@plt: 0x0000000000400398 <printf@plt+0>: jmpq *0x2004c2(%rip) # 0x600860 <_GLOBAL_OFFSET_TABLE_+24> 0x000000000040039e <printf@plt+6>: pushq $0x0 0x00000000004003a3 <printf@plt+11>: jmpq 0x400388 (gdb) disas printf Dump of assembler code for function …



7
Was sind .S-Dateien?
Ich habe .SDateien in verschiedenen Projekten gesehen, beispielsweise im Linux-Kernel, im FreeBSD-Kernel oder in einigen anderen Projekten. Was machen diese Dateien und warum können wir .cstattdessen keine Dateien haben ?
75 assembly 

7
Wie kompiliere ich den von GCC generierten ASM?
Ich spiele mit ASM-Code herum und etwas stört mich. Ich kompiliere das: #include <stdio.h> int main(int argc, char** argv){ printf("Hello World\n"); return 0; } mit gcc file.c -S -o file.Sdieser erzeugt ein schönes kleines Stück asm - Code: .cstring LC0: .ascii "Hello World\0" .text .globl _main _main: LFB3: pushq %rbp …


9
Warum kehrt die Funktion "noreturn" zurück?
Ich habe diese Frage zum noreturnAttribut gelesen , das für Funktionen verwendet wird, die nicht zum Aufrufer zurückkehren. Dann habe ich ein Programm in C gemacht. #include <stdio.h> #include <stdnoreturn.h> noreturn void func() { printf("noreturn func\n"); } int main() { func(); } Und Montage des Codes erzeugt unter Verwendung dieser …

2
Warum generiert die Verwendung des ternären Operators zur Rückgabe einer Zeichenfolge einen erheblich anderen Code als die Rückgabe in einem äquivalenten if / else-Block?
Ich habe mit dem Compiler Explorer gespielt und bin auf ein interessantes Verhalten mit dem ternären Operator gestoßen, wenn ich so etwas verwendet habe: std::string get_string(bool b) { return b ? "Hello" : "Stack-overflow"; } Der vom Compiler generierte Code dafür (Clang Trunk, mit -O3) lautet wie folgt: get_string[abi:cxx11](bool): # …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.