Advertisement
kat_power

foryou

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