Advertisement
Guest User

Praktikum10-RUB

a guest
Dec 9th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  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 für die Konvertierung
  13. ldi r16,188 ; Unteres Bytes der Dezimalzahl
  14. ldi r17,154 ; oberes Byte der Dezimalzahl
  15. ldi r18,8 ; Basis
  16. ldi r19,0
  17. ;-----------------------------------------------------------
  18. ; Konvertierung der Eingabe nach dem Horner-Schema
  19. ; TODO Praktikum 10
  20. ldi r24,0
  21. horner22:
  22.  
  23. rcall div_16
  24. rcall ausgabe_ziffer
  25.  
  26. mov r16,r20
  27. mov r17,r21
  28. cp r20,r24
  29. cpc r21,r24
  30. brne horner22
  31.  
  32.  
  33. end:
  34. rjmp end ; Endlosschleife am Programmende
  35. ;-----------------------------------------------------------
  36. ; Routinen zur 8- und 16-Bit Division
  37. div_8:
  38. ; Vorzeichenlose 8-Bit Division
  39. ; Eingabe: r16 - Dividend; r18 - Divisor
  40. ; Ausgabe: r16 - Teilungsrest; r20 - Ergebnis
  41. ldi r20,0
  42. ldi r22,1 ; Hilfswert
  43. loop_8:
  44. cp r16,r18
  45. brlo less8
  46. sub r16,r18
  47. add r20,r22
  48. rjmp loop_8
  49. less8:
  50. ret
  51.  
  52. div_16:
  53. ; Vorzeichenlose 16-Bit Division
  54. ; Eingabe: <r17,r16> - Dividend; <r19,r18> - Divisor
  55. ; Ausgabe: <r17,r16> - Teilungsrest; <r21,r20> - Ergebnis
  56. ldi r20,0
  57. ldi r21,0
  58. ldi r22,1 ; Hilfswert
  59. ldi r23,0
  60. loop_16:
  61. cp r16,r18
  62. cpc r17,r19
  63. brlo less16
  64. sub r16,r18
  65. sbc r17,r19
  66. add r20,r22
  67. adc r21,r23
  68. rjmp loop_16
  69. less16:
  70. ret
  71. ;-----------------------------------------------------------
  72. ; Vorgegebene Routinen zur Initialisierung und Ausgabe
  73. ausgabe_ziffer:
  74. ; Wandelt die Binärziffer in r16 in eine ASCII-Ziffer [0-9][A-F]
  75. ; und schreibt diese in den Speicher, auf den das X-Register zeigt
  76. ; Eingabe: <r16> - Binärziffer, <r27,r26> - Speicheradresse
  77. ; Ausgabe: <r27,r26> - nächste Speicheradresse
  78. cpi r16,0x0a ; Hex-Ziffer?
  79. brsh hex
  80. ldi r31,0x30 ; Offset für ASCII Konvertierung in [0-9]
  81. rjmp write
  82. hex:
  83. ldi r31,0x37 ; Offset für ASCII Konvertierung in [A-F]
  84. write:
  85. add r16,r31 ; Umwandlung in ASCII
  86. st -X,r16 ; Ziffer in den Speicher schreiben
  87. ret
  88. ausgabe_loeschen:
  89. ; Füllt das Feld für die Ausgabe mit Leerzeichen
  90. ; Eingabe: <r27,r26> - Speicheradresse der Ausgabe
  91. ; Ausgabe: -
  92. push r26 ; ursprünglichen Registerinhalt auf dem Stack sichern
  93. push r27
  94. ldi r31,0x20 ; 0x20 = Leerzeichen
  95. ldi r30,0x10 ; Schleifenvariable r30 = 16 Durchläufe
  96. loeschen:
  97. st -X,r31
  98. dec r30
  99. brne loeschen
  100. pop r27 ; Registerinhalt wiederherstellen
  101. pop r26
  102. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement