Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. DATA SEGMENT
  2. BUFFER DB 7, '?', 6 DUP('?'), '$'
  3. ERROR DB 'ERROR$'
  4. ERROR1 DB 'Error inc symb!$'
  5. HELLO DB 'Enter number from -32768 to 32767: $'
  6. ERROR11 DB 'Error!'
  7. ERROR2 DB 'Error incorrect symbols!1$'
  8. ERROR3 DB 'Error m$'; mul
  9. ERROR4 DB 'Error a$'; add
  10. ERROR5 DB 'Error: out of range$'
  11. ERROR6 DB 'Error: out of range!$'
  12.  
  13. NUM DW ?
  14.  
  15. MESSAGE2 DB '....', 0DH, 0AH, '$'
  16. DATA ENDS
  17.  
  18. CODE SEGMENT
  19. ASSUME CS:CODE, DS:DATA
  20.  
  21. INIT_DS MACRO
  22. MOV AX, DATA
  23. MOV DS, AX
  24. ENDM
  25.  
  26. OUT_STR MACRO STR
  27. PUSH AX
  28. LEA DX, STR
  29. MOV AH, 9
  30. INT 21H
  31. ENDM
  32.  
  33.  
  34. START:
  35.  
  36. PUSH DS;
  37. XOR AX,AX;
  38.  
  39. INIT_DS
  40. OUT_STR HELLO
  41.  
  42. CALL GET_INTEGER
  43.  
  44. CMP DI,2
  45. JZ ER
  46.  
  47. OUT_STR MESSAGE2
  48.  
  49. MOV AH, 10H
  50. INT 16H
  51. POP AX
  52.  
  53. CALL PRINT_INTEGER
  54.  
  55. MOV AH, 10H
  56. INT 16H
  57. MOV AH, 4CH
  58. INT 21H
  59.  
  60. ER:
  61. ;MOV DX, OFFSET ERROR
  62. ; MOV AH,09
  63. ; INT 21H
  64. MOV AH, 10H
  65. INT 16H
  66. MOV AH, 4CH
  67. INT 21H
  68.  
  69. GET_INTEGER PROC
  70.  
  71. MOV AH,0AH ; string input
  72. XOR DI,DI
  73. MOV DX,OFFSET BUFFER
  74. INT 21H
  75. MOV DL,0AH
  76. MOV AH,02 ; screen output
  77. INT 21H
  78.  
  79. MOV SI, OFFSET BUFFER+1
  80. CMP BYTE PTR [SI], 0
  81. JZ ERG11
  82.  
  83. MOV DI,0
  84. MOV SI,OFFSET BUFFER+2
  85. CMP BYTE PTR [SI],"+"
  86. JZ P1
  87. CMP BYTE PTR [SI],"-"
  88. JNZ P2
  89. MOV DI,1
  90. P1:
  91. INC SI
  92. P2:
  93. XOR AX,AX
  94. MOV BX,10
  95. P3:
  96. MOV CL,[SI]
  97. CMP CL,0DH
  98. JZ ENDIN
  99.  
  100.  
  101. CMP CL,'0'
  102. JB ERG1
  103. CMP CL,'9'
  104. JA ERG2
  105.  
  106. SUB CL,'0'; error -988484884
  107. MUL BX
  108. JC ERG3
  109. ADD AX,CX
  110. JC ERG4
  111. CMP AX, -32768
  112. JA ERG5
  113. CMP DI, 1
  114. JE CONT
  115. CMP AX, 32767
  116. JA ERG
  117. CONT:
  118. INC SI
  119. JMP P3
  120.  
  121. ERG: ; error borders
  122. MOV DX, OFFSET ERROR6
  123. MOV AH,09
  124. INT 21H
  125. MOV DI,2
  126. RET
  127.  
  128.  
  129. ERG1: ;incorrect symbols
  130. MOV DX, OFFSET ERROR1
  131. MOV AH,09
  132. INT 21H
  133. MOV DI,2
  134. RET
  135.  
  136. ERG11: ;no symbols entered
  137. MOV DX, OFFSET ERROR11
  138. MOV AH,09
  139. INT 21H
  140. MOV DI,2
  141. RET
  142.  
  143. ERG2: ; incorrect symbols
  144. MOV DX, OFFSET ERROR2
  145. MOV AH,09
  146. INT 21H
  147. MOV DI,2
  148. RET
  149.  
  150. ERG3:
  151. MOV DX, OFFSET ERROR3
  152. MOV AH,09
  153. INT 21H
  154. MOV DI,2
  155. RET
  156.  
  157.  
  158. ERG4:
  159. MOV DX, OFFSET ERROR4
  160. MOV AH,09
  161. INT 21H
  162. MOV DI,2
  163. RET
  164.  
  165. ERG5: ; error out of range
  166. MOV DX, OFFSET ERROR5
  167. MOV AH,09
  168. INT 21H
  169. MOV DI,2
  170. RET
  171.  
  172. ENDIN:
  173. ;CMP AX,0
  174. ;JZ NEWEND
  175. CMP DI,1
  176. JZ P4
  177. MOV NUM, AX
  178. ret ;AND AX,7FFFH
  179. ;CMP AX,0
  180. ;JZ ERG
  181. ;NEWEND:
  182. ;RET
  183.  
  184. P4:
  185.  
  186. NEG AX
  187. MOV NUM, AX
  188. RET
  189.  
  190. GET_INTEGER ENDP
  191.  
  192. PRINT_INTEGER PROC
  193.  
  194. MOV BX, NUM;!!
  195. OR BX, BX
  196. JNS ML
  197. MOV AL, '-'
  198. INT 29H
  199. NEG BX
  200. ML:
  201. MOV AX,BX
  202. XOR CX,CX
  203. MOV BX,10
  204. M2:
  205. XOR DX,DX
  206. DIV BX
  207. ADD DL,'0'
  208. PUSH DX
  209. INC CX
  210. TEST AX,AX
  211. JNZ M2
  212. M3:
  213. POP AX
  214. INT 29H
  215. LOOP M3
  216. RET
  217.  
  218. PRINT_INTEGER ENDP
  219.  
  220. CODE ENDS
  221. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement