PROCS.ASM 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. .model small
  2. .code
  3. org 100h
  4. start:
  5. mov ah, 0Ah
  6. mov dx, offset isize
  7. int 21h
  8. mov di, offset iinp
  9. mov si, offset num1
  10. loop3: cmp byte ptr [di], ' '
  11. je num1end1
  12. cmp byte ptr [di], '+'
  13. je num1end2
  14. cmp byte ptr [di], '-'
  15. je num1end2
  16. cmp byte ptr [di], '*'
  17. je num1end2
  18. cmp byte ptr [di], '/'
  19. je num1end2
  20. mov al, [di]
  21. mov [si], al
  22. inc si
  23. inc di
  24. jmp loop3
  25. num1end1:
  26. inc di
  27. cmp byte ptr [di], '+'
  28. je num1end2
  29. cmp byte ptr [di], '-'
  30. je num1end2
  31. cmp byte ptr [di], '*'
  32. je num1end2
  33. cmp byte ptr [di], '/'
  34. je num1end2
  35. num1end2:
  36. mov byte ptr [si], 0
  37. mov si, offset deyst
  38. mov al, [di]
  39. mov [si], al
  40. inc di
  41. loop4: cmp byte ptr [di], ' '
  42. jne num2beg
  43. inc di
  44. jmp loop4
  45. num2beg:mov si, offset num2
  46. loop5: mov al, [di]
  47. mov [si], al
  48. inc si
  49. inc di
  50. cmp byte ptr [di], 0Dh
  51. je rends
  52. jmp loop5
  53. rends: mov byte ptr [si], 0
  54. mov si, offset num2
  55. call StrToByte
  56. PUSH ax
  57. mov si, offset num1
  58. call StrToByte
  59. POP BX
  60. ;---------------------------------------
  61. mov di, offset deyst
  62. cmp byte ptr [di],'*'
  63. je umnoch
  64. cmp byte ptr [di],'+'
  65. je plus
  66. cmp byte ptr [di],'-'
  67. je minus
  68. mov ah, 0
  69. div bl
  70. mov dl, al
  71. jmp prints
  72. umnoch: mul bl
  73. mov dl, al
  74. jmp prints
  75. plus: add al, bl
  76. mov dl, al
  77. jmp prints
  78. minus: sub al, bl
  79. mov dl, al
  80. prints: PUSH dx
  81. mov ah, 02h
  82. mov dl, 0dh
  83. int 21h
  84. mov ah, 02h
  85. mov dl, 0ah
  86. int 21h
  87. POP dx
  88. call print_dec
  89. int 20h
  90. ;print_char
  91. print_char proc near
  92. mov ah, 02h
  93. int 21h
  94. ret
  95. endp
  96. ;print_dec
  97. print_dec proc near
  98. mov di, offset outp
  99. mov al, dl
  100. mov ah, 0
  101. mov bl, 100
  102. mov cx, 2
  103. loop1: div bl
  104. PUSH ax
  105. cmp al, 0
  106. je dontadd
  107. mov dl, al
  108. mov dh, 0
  109. add dx, '0'
  110. mov byte ptr [di], dl
  111. inc di
  112. dontadd:
  113. mov dl, 10
  114. mov ah, 0
  115. mov al, bl
  116. div dl
  117. mov bl, al
  118. POP ax
  119. mov al, ah
  120. mov ah, 0
  121. loop loop1
  122. mov dl, al
  123. mov dh, 0
  124. add dx, '0'
  125. mov byte ptr [di], dl
  126. inc di
  127. mov byte ptr [di], '$'
  128. mov ah, 09h
  129. mov dx, offset outp
  130. int 21h
  131. ret
  132. endp
  133. ;StrToByte
  134. StrToByte proc near
  135. mov bl, 0
  136. mov al, [si]
  137. sub al, '0'
  138. loop2: PUSH ax
  139. mov al, 10
  140. mul bl
  141. mov bl, al
  142. POP ax
  143. add bl, al
  144. inc si
  145. mov al, [si]
  146. cmp al, 0
  147. je fends
  148. sub al, '0'
  149. jmp loop2
  150. fends: mov al, bl
  151. ret
  152. endp
  153. outp db 4 dup (?)
  154. isize db 10
  155. ireal db ?
  156. iinp db 10 dup (?)
  157. num1 db 4 dup (?)
  158. num2 db 4 dup (?)
  159. deyst db ?
  160. end start