Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .data
- doofcode: .long 0xd00fc0de # definition der variablen
- erg: .ascii "Ergebnis: %d \n\0"
- .section .bss
- .section .text
- .globl _start
- _start:
- movl doofcode, %eax # kopieren der variablen nach eax
- movl $32, %ecx # gibt an wie oft die loop durchlaufen werden soll(laenge einer Registers
- movl $0, %ebx
- start:
- shl $1, %eax # Verschiebt alle Bits im Register eax um 1 Stellen nach links und das bit gantz links in das c flag
- jnc continue # wenn in eflags c nicht gesetzt ist sprinnge zum label continue
- incl %ebx # zahlt wie oft
- continue:
- loop start
- pushl %ebx # legt den wert von ebx auf den stack
- pushl $erg # legt den wert der unter dem label erg auf den stack
- call printf # printet die letzen beiden werte auf dem stack
- addl $8, %esp # loescht die letzen beiden werte vom stack
- movl $1, %eax # aufruf zum beenden des programms
- movl $0, %ebx
- int $0x80
- (b)Ergebnis: 12
- (c) das programm zaehlt alle bits, die auf 1 stehen.
- (d) Skizzieren Sie für jede der Zeilen 20–23, wie der Stack unmittelbar nach der Ausführung
- der jeweiligen Instruktion aussieht. Benutzen Sie dazu einen fiktiven Ausgangswert für
- den ESP (z. B. 0x4711).
- Instruktion ESP wert(an der Stelle ESP)
- 0x4711 --
- pushl %ebx 0x4710 12
- pushl $erg 0x4709 Ergebnis: %d \n\0
- call printf keine veraenderung
- addl $8, %esp 0x4711 --
Add Comment
Please, Sign In to add comment