Advertisement
Julia_S

new

May 25th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.21 KB | None | 0 0
  1. .model small
  2. .486
  3.  
  4. .data
  5. buff db 20 dup(?) ;буфер для строки из файл
  6. buffs db 80 dup('$') ;буфер для строки в файл
  7. filename db "a.txt",0 ;имя файла
  8. handler dw ? ;описатель файла
  9. R dw ? ;длина строки в документе
  10. firnum dw ? ;первый член прогрессии
  11. factor dw ? ;множитель прогрессии
  12. len1 dw ? ;длина строки первого члена ГП
  13. len2 dw ? ;длина строки множителя ГП
  14. len3 dw ? ;длина числа множителя ГП
  15. lcx1 dw ? ;запоминать cx
  16. lcx2 dw ? ;запоминать cx
  17. next dw ? ;каждый следующий член ГП
  18. N EQU 8 ;число членов ГП записывать в файл
  19. first db 5 dup(?) ;первый член прогрессии в строке
  20. second db 5 dup(?) ;множитель прогрессии в строке
  21. nexts db 10 DUP(?) ;следующий член прогрессии в строке
  22. gap db ' ','$' ; пробел
  23. mes db "Первые N членов геометрической прогрессии: ", 0ah, 0dh, '$'
  24.  
  25. OPEN macro filename, handler
  26. mov ah,3Dh
  27. mov al,2
  28. mov dx, offset filename
  29. mov cx,0
  30. int 21h
  31. mov handler,ax
  32. endm
  33.  
  34.  
  35. READ macro buff
  36. mov ah, 3fh
  37. mov bx, handler
  38. lea dx, buff
  39. mov cx, 10
  40. int 21h
  41. endm
  42.  
  43. WRITE macro buff, a
  44. mov bx,handler
  45. lea dx, buff
  46. mov ah,40h
  47. mov cx,a
  48. int 21h
  49. endm
  50.  
  51. SSTART macro
  52. mov ah, 42h
  53. mov al, 0
  54. mov bx, handler
  55. mov cx, 0
  56. mov dx, 0
  57. int 21h
  58. endm
  59.  
  60. CLOSE macro
  61. mov ah, 3eh
  62. mov bx, handler
  63. int 21h
  64. endm
  65.  
  66. .code
  67. assume ds: @data, es:@data
  68. start:
  69. mov ax,@data
  70. mov ds,ax
  71. mov es,ax
  72.  
  73.  
  74. OPEN filename, handler
  75. READ buff
  76. mov R, ax ;после чтоения файла в ax число прочитанных символов
  77. ;============================ помещаем первый член в first, множитель в second======================
  78.  
  79. mov cx,R ;длина буфера
  80. mov di,offset buff
  81. cld
  82. mov al,' '
  83. repne scasb ;сравнивать пока не встретится пробел в буфере
  84.  
  85.  
  86. mov cx,di ;позиция буфера после пробела (начало следующего числа)
  87. mov bx, di
  88. lea dx, buff
  89. sub cx, dx
  90. dec cx ;длина первого числа
  91. mov len1, cx
  92. push di
  93. mov si,offset buff
  94.  
  95. mov di,offset first
  96. cld
  97. rep movsb ;копировать из buff в second cx символов
  98.  
  99.  
  100. lea cx,R
  101. sub CX,BX
  102. pop di
  103. mov dx, di
  104. xor si,si
  105. cld
  106. mov AL,' '
  107. repne scasb
  108.  
  109. mov CX,di
  110. sub CX,BX
  111. dec CX
  112. mov len2, cx
  113. mov si,dx
  114. mov di,offset second
  115. cld
  116. rep movsb
  117.  
  118.  
  119. ;======================= преобразование first и second из строк в числа=====================
  120.  
  121.  
  122. mov cx, len1
  123. lea di, first
  124. xor ax,ax ;обнуляется регистр
  125. xor ch,ch ;обнуляется регистр
  126. mov si,10 ;si содержит множитель 10
  127. xor bh,bh ;обнуляется регистр
  128. m1:
  129. mul si ;умножить ax на si(10)
  130. mov bl,[di] ;к произведению добавить число
  131. sub bl,30h ;отнять 30h
  132. add ax,bx ;добавить число к сумме ax
  133. inc di ;инкремент di
  134. loop m1 ;повтор цикла
  135. mov firnum, ax
  136.  
  137. mov cx, len2
  138. lea di, second
  139. xor ax,ax ;обнуляется регистр
  140. xor ch,ch ;обнуляется регистр
  141. mov si,10 ;si содержит множитель 10
  142. xor bh,bh ;обнуляется регистр
  143. m2:
  144. mul si ;умножить ax на si(10)
  145. mov bl,[di] ;к произведению добавить число
  146. sub bl,30h ;отнять 30h
  147. add ax,bx ;добавить число к сумме ax
  148. inc di ;инкремент di
  149. loop m2 ;повтор цикла
  150. mov factor, ax
  151.  
  152. ; ===================== запись в файл первого числа===========================================
  153. SSTART
  154. WRITE mes, 43
  155. WRITE first, len1
  156. WRITE gap, 1
  157. ; ===================== запись в файл N-1 оставшихся членов ==================================
  158. mov cx, N
  159. dec cx ;первый член записан, осталось записать N-1
  160. mov dx, firnum ;первый член ГП
  161. mov next, dx
  162. cyc:
  163. mov ax,next ;предыдущий член ГП
  164. mov lcx1,cx ;в сх количество циклов записи членов ГП
  165. imul factor ;умножили первый член ГП на множитель
  166. mov next, ax ; новый член ГП
  167. ;=============================посимвольный вывод===========================================
  168.  
  169. mov cx, 10 ; cx - основание системы счисления
  170. xor di, di ; di - кол. цифр в числе
  171.  
  172.  
  173. m3:
  174. xor dx, dx
  175. div cx ; dx = next mod 10
  176. add dx, 30h ; перевод в символьный формат (в dx остаток от деления )
  177.  
  178. push dx ; складываем в стэк
  179. inc di
  180. xor dx, dx
  181. cmp ax, 0
  182. jne m3
  183. ;================ выводим из стэка в файл через пробел==================================
  184.  
  185. mov len3, di
  186. lea bx, buffs
  187. m4:
  188.  
  189. pop dx ; dx = очередной символ
  190. mov [bx], dx
  191. inc bx
  192.  
  193.  
  194. dec di ; повторяем пока di<>0
  195. jnz m4
  196.  
  197. WRITE buffs, len3
  198. WRITE gap, 1
  199.  
  200. mov cx, lcx1 ;в сх количество циклов записи членов ГП
  201. loop cyc
  202.  
  203.  
  204. CLOSE
  205.  
  206. mov ax,4c00h
  207. int 21h
  208. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement