Advertisement
polpoteu

ASM 8bitówka Kalkulator

Nov 3rd, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. org 100h
  2.  
  3. start:
  4. ; wyświetl wiadomość powitalną
  5. mov ah, 9
  6. mov dx, msg0
  7. int 21h
  8.  
  9. mov dx, enter1
  10. int 21h
  11.  
  12. ; pobierz ile liczb ma zostać pobranych (tu zawsze 2)
  13. mov ax, [liczb]
  14. mov [i], ax
  15.  
  16. ; wczytuj i liczb
  17. cinnum:
  18. mov ah, 9
  19. mov dx, msg1
  20. int 21h
  21.  
  22. ; przygotuj zmienne do wczytania liczby
  23. xor ax, ax
  24. xor cx, cx
  25. mov [val], ax
  26. mov bx, 10
  27.  
  28. ; wczytaj liczbę, przerwij po wciśnięciu ENTERa (znak 13)
  29. cinbeg:
  30. mov ah, 1
  31. int 21h
  32. cmp al, 13 ; jeśli enter to przerwij wczytywanie
  33. je cinend
  34. mov cl, al
  35. sub cl, 48
  36. mov ax, [val]
  37. xor dx, dx
  38. mul bx
  39. add ax, cx
  40. mov [val], ax
  41. jmp cinbeg ; wróć do wczytania kolejnej liczby
  42. cinend:
  43. mov ax, [val]
  44. push ax ; przechowaj liczbę na stosie
  45. mov ax, [i]
  46. dec ax
  47. mov [i], ax
  48. cmp ax, 0
  49. ja cinnum
  50.  
  51. ; pokaż komunikat z prośbą o znak operacji
  52. mov ah, 9
  53. mov dx, msg2
  54. int 21h
  55.  
  56. mov ah, 1
  57. int 21h
  58. mov dl, al
  59.  
  60. ; pobierz odłożone na stos liczby
  61. pop bx ; kolejność jest ważna, ponieważ od tego zależy wynik odejmowania / dzielenia
  62. pop ax
  63.  
  64. ; sprawdź znak jaki został wybrany i przejdź do odpowiedniej sekcji operatora
  65. cmp dl, 43
  66. je oadd
  67. cmp dl, 45
  68. je osub
  69. cmp dl, 42
  70. je omul
  71. cmp dl, 47
  72. je odiv
  73. ; jeśli znak nie zostanie znalezion to wypisz błąd
  74. jmp error
  75.  
  76. ; sekcje operacji dla kaĹźdego z operatorĂłw
  77. oadd:
  78. add ax, bx
  79. mov [val], ax
  80. jmp wypisz
  81. osub:
  82. sub ax, bx
  83. mov [val], ax
  84. jmp wypisz
  85. omul:
  86. xor dx, dx
  87. mul bx
  88. mov [val], ax
  89. jmp wypisz
  90. odiv:
  91. xor dx, dx
  92. div bx
  93. mov [val], ax
  94. jmp wypisz
  95.  
  96. ; wypisywanie wyniku
  97. wypisz:
  98. ; komunikat
  99. mov ah, 9
  100. mov dx, enter1
  101. int 21h
  102.  
  103. mov ah, 9
  104. mov dx, msg3
  105. int 21h
  106.  
  107. ; przygotuj rejestry: ax - wartość do wypisania, cx - ile cyfr oraz bx - system liczby do wypisania
  108. mov ax, [val]
  109. mov cx, 0
  110. mov bx, 10
  111. rcyfry:
  112. xor dx, dx
  113. div bx
  114. push dx
  115. inc cx
  116. cmp ax, 0
  117. ja rcyfry
  118.  
  119. ; wypisz cyfry odłożone na stos
  120. mov ah, 2
  121. wcyfry:
  122. pop dx
  123. add dx, 48
  124. int 21h
  125. loop wcyfry
  126.  
  127. koniec:
  128. mov ax, 4C00h
  129. int 21h
  130.  
  131. ; wyświetlanie komunikatu o błędzie
  132. error:
  133. mov ah, 9
  134. mov dx, enter1
  135. int 21h
  136.  
  137. mov dx, msge
  138. int 21h
  139. jmp koniec
  140.  
  141. ; komunikaty
  142. msg0 db "- Podaj dwie liczby -$"
  143. msg1 db "Podaj liczbe: $"
  144. msg2 db "Podaj znak operacji: $"
  145. msg3 db "Wynik = $"
  146. msge db "Bledne dane!$"
  147. enter1 db 10,13,36
  148. val db 123 ; przechowuje wynik
  149. liczb db 2 ; ile liczb ma być wczytanych
  150. i db 0 ; zmienna pomocnicza do monitorowania ile liczb wczytano
  151. oper db 0 ; wybĂłr operatora
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement