Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. org 100h
  2.  
  3. start:
  4. mov [wierz], sp
  5.  
  6. mov ah, 9
  7. mov dx, witaj
  8. int 21h
  9.  
  10. mov ah, 10 ;pobiera ciag znakow, zapisuje do zmiennej slowo
  11. mov dx, slowo
  12. int 21h
  13.  
  14. call spronp ;sprawdza, czy ciag jest ONP
  15.  
  16. call oblicz ;jezeli jest to oblicza wartosc wyrazenia
  17.  
  18. call wynik ;wyswietla wynik liczbowy
  19.  
  20. koniec:
  21. mov ah, 9
  22. mov dx, zegnaj
  23. int 21h
  24.  
  25. mov sp, [wierz]
  26.  
  27. mov ax, 4C00h
  28. int 21h
  29.  
  30. ent1 db 10,13,36
  31. witaj db "Witaj w programie - kalkulatorze, ktorzy przyjmuje dzialanie w ONP.",10,13,"Podaj dzialanie w ONP (musi skladac sie z cyfr!):",10,13,36
  32.  
  33. slowo db 255;ile znakow pobierze z klawiatury
  34. db 0;po pobraniu ta wartosc zamieni sie na znaki
  35. times 256 db "$";tworzy 256 pol z dolarem
  36.  
  37. bledny db "Wyjatek. Bledny zapis ONP.",36
  38. wierz db 0
  39. dziel0 db 10,13,"Wyjatek. Proba dzielenia przez 0.",36
  40. wyn1 db 10,13,"Wynik dzialania wynosi: ",36
  41. zakres db 10,13,"Wyjatek. Wynik przekroczyl zakres.",36
  42. zegnaj db 10,13,"Dziekuje za skorzystanie z programu!",36
  43. kolejny db "Czy chcesz zaczac od nowa? [T/N]",10,13,36
  44.  
  45. spronp: ;jezeli trafiam na cyfre, to inkrementuje licznik, jezeli na znak, dekrementuje
  46. xor ax, ax ;koncowa wartosc licznika ma byc rowna 1
  47. xor bx, bx ;oraz dwa pierwsze znaki musza byc cyframi
  48. xor cx, cx ;jezeli nie, koncze dzialanie programu
  49. xor dx, dx
  50. xor si, si
  51.  
  52. mov si, slowo
  53. mov bx, 2
  54.  
  55. wys:
  56. cmp al, 2
  57. je sprawdz
  58.  
  59. mov dl, [si+bx]
  60.  
  61. cmp dl, 13
  62. je spacja
  63.  
  64. cmp dl, 36
  65. je spronpd
  66.  
  67. cmp dl, 32
  68. je spacja
  69.  
  70. cmp dl, '+'
  71. je znak
  72.  
  73. cmp dl, '-'
  74. je znak
  75.  
  76. cmp dl, '*'
  77. je znak
  78.  
  79. cmp dl, '/'
  80. je znak
  81.  
  82. cmp dl, '0'
  83. jb blad
  84.  
  85. cmp dl, '9'
  86. jg blad
  87.  
  88. mov dl, [si+bx+1]
  89. cmp dl, ' '
  90. jne blad
  91.  
  92. inc al
  93. inc cx
  94. cmp cl, 1
  95. jb blad
  96.  
  97. inc bx
  98. jmp wys
  99.  
  100. spacja:
  101. inc bx
  102. jmp wys
  103.  
  104.  
  105. znak:
  106. dec cx
  107.  
  108. cmp cl, 1
  109. jb blad
  110.  
  111. inc bx
  112. jmp wys
  113.  
  114.  
  115. sprawdz:
  116. cmp cl, 2
  117. jne blad
  118.  
  119. inc al
  120. jmp wys
  121.  
  122. blad:
  123. mov ah, 9
  124. mov dx, bledny
  125. int 21h
  126. jmp koniec
  127.  
  128. spronpd:
  129. cmp cl, 1
  130. jne blad
  131. ret
  132.  
  133.  
  134. oblicz: ;jezeli dochodze do tego momentu, to wiem, ze mam ONP wiec juz nie sprawdzam
  135. xor ax, ax ;trafiam na cyfre, wrzucam ja na stos
  136. xor bx, bx ;trafiam na znak, zdejmuje dwie liczby ze stosu i wykonuje dzialanie
  137. xor cx, cx ;wynik koncowy siedzi w CX
  138. xor dx, dx
  139. xor si, si
  140.  
  141. mov si, slowo
  142. mov bx, 2
  143.  
  144. wys1:
  145. mov cl, [si+bx]
  146.  
  147. cmp cl, 13
  148. je tyle
  149.  
  150. cmp cl, 36
  151. je tyle
  152.  
  153. cmp cl, ' '
  154. je spacja1
  155.  
  156. cmp cl, '+'
  157. je dodaj
  158.  
  159. cmp cl, '-'
  160. je odejmij
  161.  
  162. cmp cl, '*'
  163. je pomnoz
  164.  
  165. cmp cl, '/'
  166. je podziel
  167.  
  168.  
  169. xor ch, ch
  170. sub cx, 48
  171. push cx
  172. xor cx, cx
  173.  
  174. inc bx
  175. jmp wys1
  176.  
  177. spacja1:
  178. inc bx
  179. jmp wys1
  180.  
  181. dodaj:
  182. xor ax, ax
  183. xor di, di
  184.  
  185. pop ax
  186. pop di
  187. add ax, di
  188. jc wyjzak
  189. push ax
  190. inc bx
  191. jmp wys1
  192.  
  193. odejmij:
  194. xor ax, ax
  195. xor di, di
  196.  
  197. pop di
  198. pop ax
  199. sub ax, di
  200. jc wyjzak
  201. push ax
  202. inc bx
  203. jmp wys1
  204.  
  205. pomnoz:
  206. xor ax, ax
  207. xor di, di
  208.  
  209. pop di
  210. pop ax
  211. mul di
  212. jc wyjzak
  213. push ax
  214. inc bx
  215. jmp wys1
  216.  
  217. podziel:
  218. xor ax, ax
  219. xor di, di
  220.  
  221. pop di
  222. cmp di, 0
  223. je wyjdziel
  224. pop ax
  225. div di
  226. jc wyjzak
  227. push ax
  228. inc bx
  229. jmp wys1
  230.  
  231. wyjdziel:
  232. mov ah, 9
  233. mov dx, dziel0
  234. int 21h
  235. jmp koniec
  236.  
  237. wyjzak:
  238. mov ah, 9
  239. mov dx, zakres
  240. int 21h
  241. jmp koniec
  242.  
  243. tyle:
  244. pop cx
  245.  
  246. ret
  247.  
  248.  
  249. wynik: ;standardowe wyswietlanie wyniku dziesietnego
  250. mov ah, 9
  251. mov dx, wyn1
  252. int 21h
  253.  
  254. mov ax, cx
  255. xor bx, bx
  256. mov bx, 10
  257. xor cx, cx
  258. xor dx, dx
  259.  
  260. w1:
  261. div bx
  262. push dx
  263. inc cx
  264.  
  265. xor dx, dx
  266.  
  267. cmp ax, 0
  268. jg w1
  269.  
  270. jmp wypisz
  271.  
  272.  
  273. wypisz:
  274. xor dx, dx
  275. mov ah, 2
  276. pop dx
  277. add dx, 48
  278. int 21h
  279.  
  280. loop wypisz
  281.  
  282. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement