Horner Schema

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Horner Schema

      Quellcode

      1. .include "m32def.inc"
      2. .cseg
      3. .org 0x0000 ; Platziert das Programm ab Adresse 0x0000 im Programmspeicher
      4. ldi r17,low(RAMEND) ; Low Stackpointer und
      5. out spl,r17
      6. ldi r17,high(RAMEND); High Stackpointer auf
      7. out sph,r17 ; Ende des SRAMs setzen
      8. ldi r26, $10 ; Zeiger auf Ende des Ausgabestrings
      9. ldi r27, $02
      10. rcall ausgabe_loeschen
      11. ;-----------------------------------------------------------
      12. ; Eingabe fuer die Konvertierung
      13. ldi r16, 183 ; unteres Byte des Dividenden
      14. ldi r17, 0 ; oberes Byte des Dividenden
      15. ldi r18, 16 ; unteres Byte des Divisors
      16. ldi r19, 0 ; oberes Byte des Divisors
      17. ;-----------------------------------------------------------
      18. ; Konvertierung der Eingabe nach dem Horner-Schema
      19. ; TODO Praktikum 10
      20. ; Praktikum 9: Divisionsroutine durch Ein- und Auskommentieren wählen
      21. rcall div_8 ; 8-Bit Division
      22. ;rcall div_16 ; 16-Bit Division
      23. end:
      24. rjmp end ; Endlosschleife am Programmende
      25. ;-----------------------------------------------------------
      26. ; Routinen zur 8- und 16-Bit Division
      27. ; TODO Praktikum 9
      28. div_8: ; Division r16 : r18
      29. ; fügen Sie Ihren Code hier ein!
      30. ret
      31. div_16: ; Division <r17, r16> : < r19, r18>
      32. ; fügen Sie Ihren Code hier ein!
      33. ret
      34. ;-----------------------------------------------------------
      35. ; Vorgegebene Routinen zur Initialisierung und Ausgabe
      36. ; Wandelt die Binärziffer in r16 in eine ASCII-Ziffer [0-9][A-F]
      37. ; und schreibt diese in den Speicher, auf den das X-Register zeigt
      38. ausgabe_ziffer:
      39. cpi r16, 0x0a
      40. brge hex
      41. ldi r31, 0x30 ; Offset für ASCII Konvertierung für [0-9]
      42. rjmp write
      43. hex:
      44. ldi r31, 0x37 ; Offset für ASCII Konvertierung für [A-F]
      45. write:
      46. add r16, r31 ; Umwandlung in [0-9A-F]
      47. st -X, r16 ; Hex-Ziffer in den Speicher schreiben
      48. ret
      49. ausgabe_loeschen: ; Fuelt das Feld fuer die Ausgabe mit Leerzeichen
      50. push r26 ; ursprueglichen Registerinhalt auf dem Stack sichern
      51. push r27
      52. ldi r31, 0x20 ; 0x20 = Leerzeichen
      53. ldi r30, 0x10 ; Schleifenvariable r30 = 16 Durchläufe
      54. loop2:
      55. st -X, r31
      56. dec r30
      57. brne loop2
      58. pop r27 ; Registerinhalt wiederherstellen
      59. pop r26
      60. ret
      Alles anzeigen