Guest User

Untitled

a guest
Apr 24th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. .section .data
  2. doofcode: .long 0xd00fc0de # definition der variablen
  3. erg: .ascii "Ergebnis: %d \n\0"
  4. .section .bss
  5. .section .text
  6. .globl _start
  7.  
  8. _start:
  9. movl doofcode, %eax # kopieren der variablen nach eax
  10. movl $32, %ecx # gibt an wie oft die loop durchlaufen werden soll(laenge einer Registers
  11. movl $0, %ebx
  12. start:
  13. shl $1, %eax # Verschiebt alle Bits im Register eax um 1 Stellen nach links und das bit gantz links in das c flag
  14. jnc continue # wenn in eflags c nicht gesetzt ist sprinnge zum label continue
  15. incl %ebx # zahlt wie oft
  16. continue:
  17. loop start
  18.  
  19.  
  20. pushl %ebx # legt den wert von ebx auf den stack
  21. pushl $erg # legt den wert der unter dem label erg auf den stack
  22. call printf # printet die letzen beiden werte auf dem stack
  23. addl $8, %esp # loescht die letzen beiden werte vom stack
  24.  
  25. movl $1, %eax # aufruf zum beenden des programms
  26. movl $0, %ebx
  27. int $0x80
  28.  
  29. (b)Ergebnis: 12
  30.  
  31. (c) das programm zaehlt alle bits, die auf 1 stehen.
  32.  
  33. (d) Skizzieren Sie für jede der Zeilen 20–23, wie der Stack unmittelbar nach der Ausführung
  34. der jeweiligen Instruktion aussieht. Benutzen Sie dazu einen fiktiven Ausgangswert für
  35. den ESP (z. B. 0x4711).
  36.  
  37. Instruktion ESP wert(an der Stelle ESP)
  38. 0x4711 --
  39. pushl %ebx 0x4710 12
  40. pushl $erg 0x4709 Ergebnis: %d \n\0
  41. call printf keine veraenderung
  42. addl $8, %esp 0x4711 --
Add Comment
Please, Sign In to add comment