Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. .model small
  2. .stack 100h
  3. .data
  4. buf db 1 dup (6), 8 dup (?)
  5. buf_out db 7 dup(?)
  6. a dw 0
  7. x dw 0
  8. y1 dw ?
  9. y2 dw ?
  10. y dw ?
  11. m dw 0
  12. mes_a db "Input a: ", '$'
  13. mes_x db 13, 10, "Input x: ", '$'
  14. mes_res db 13, 10, "Result: ", '$'
  15. .code
  16. start:
  17. mov ax, @data
  18. mov ds, ax
  19.  
  20. ;Ввод
  21. mov ax, 0900h
  22. mov dx, offset mes_a
  23. int 21h
  24. call input
  25. pop ax
  26. mov a, ax
  27. ;Вводим x
  28. mov ax, 0900h
  29. mov dx, offset mes_x
  30. int 21h
  31. call input
  32. pop ax
  33. mov x, ax
  34. ;Конец ввода
  35.  
  36. ;Задание
  37.  
  38. mov ax, x
  39. mov bx, 4
  40. idel bx
  41. test dx, 8000h
  42. jns @next2
  43. neg dx
  44.  
  45. @next2:
  46.  
  47. cmp dx, 4
  48. jne one
  49. two:
  50. mov ax, a
  51. add ax, x
  52. mov y1,ax
  53. jmp next
  54. one:
  55. mov ax,x
  56. mov y1,ax
  57. jmp next
  58. next:
  59. mov dx, 0
  60. mov ax,x
  61. cmp ax,a
  62. jl three
  63. four:
  64. mov ax,a
  65. mov bx,x
  66. imul bx
  67. mov y2,ax
  68. jmp exit
  69. three:
  70. mov ax,a
  71. sub ax,x
  72. mov y2,ax
  73. jmp exit
  74. exit:
  75. mov ax,y1
  76. mov bx,y2
  77. ;imul bx
  78. test ax, 8000h
  79. jns @jmp_next
  80. mov dx, 65535
  81. @jmp_next:
  82. imul bx
  83. mov y,ax
  84.  
  85. ;Конец задания
  86.  
  87. ;Вывод
  88. ;Перевод строки
  89. mov ax, 0900h
  90. mov dx, offset mes_res
  91. int 21h
  92. push y
  93. call out_func
  94. ;Конец вывода
  95. mov ax, 4C00h
  96. int 21h
  97.  
  98. input proc
  99. ;Ввод
  100. ;Получаем строку от пользователя
  101. mov dx, offset buf
  102. mov ah, 0Ah
  103. int 21h
  104.  
  105. xor cx, cx
  106. xor dx, dx
  107. xor ax, ax
  108.  
  109. mov bx, 10 ;Множитель
  110. mov cl, buf[1] ;Счетчик
  111. mov si, offset buf
  112. ;mov si, 0 ;Смещение относительно начала массива
  113. cmp buf[2], 2Dh ;Проверяем на знак минуса
  114. jne @lp1 ;Если не минус
  115. inc si ;Увеличиваем смещение
  116. sub cx, 1 ;Уменьшаем счетчик
  117. @lp1:
  118. mul bl
  119. mov dl, [si+2]
  120. sub dx, 30h
  121. add ax, dx
  122. inc si
  123. loop @lp1
  124.  
  125. cmp buf[2], 2Dh ;Проверяем на знак минуса
  126. jne @next ;Если не минус
  127. neg ax ;Делаем число отрицательным
  128. @next:
  129. ;Обмениваем значения с адресом возврата
  130. pop bx
  131. push ax
  132. push bx
  133. ;Обнуляем регистры
  134. xor ax, ax
  135. xor bx, bx
  136. xor cx, cx
  137. xor dx, dx
  138. ;xor di, di
  139. xor si, si
  140. ret
  141. input endp
  142.  
  143. out_func proc
  144. pop bx ;Сохраняем адрес возврата
  145. pop ax ;Извлекаем число из стека
  146. push bx ;Возвращаем адрес обратно
  147.  
  148. mov bx, 10 ;Делитель
  149. xor cx, cx
  150. mov si, offset buf_out
  151. ;Проверяем, отрицательное ли число
  152. test ax, 8000h
  153. jns @lp
  154. mov byte ptr [si], '-'
  155. inc si
  156. neg ax
  157. ;Разбираем число на символы
  158. @lp:
  159. xor dx, dx
  160. div bx
  161. add dl, 30h
  162. push dx
  163. inc cx
  164. cmp ax, 0
  165. jne @lp
  166.  
  167. mov ah, 02h
  168. ;Выводим число на экран
  169. @out_lp:
  170. pop dx
  171. mov [si], dl
  172. inc si
  173. loop @out_lp
  174.  
  175. mov byte ptr [si], '$'
  176. mov ax, 0900h
  177. mov dx, offset buf_out
  178. int 21h
  179.  
  180. xor ax, ax
  181. xor bx, bx
  182. xor dx, dx
  183.  
  184. mov ah,0 ;Ожидание нажатия клавиши
  185. int 16h
  186. ret
  187. out_func endp
  188. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement