Advertisement
kat_power

5-20 vs,2

May 26th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL
  2. .DATA
  3. file_name db 'result.txt',0
  4. handler dw 0
  5. buff  db    0Dh, 0Ah, '$'
  6. .stack 100h
  7.  
  8.     OPEN macro file_name, handler
  9.     mov ah,3dh
  10.     mov al,2
  11.     mov dx, offset file_name
  12.     mov cx,0
  13.     int 21h
  14.     mov handler, ax
  15.     endm
  16.  
  17.     WRITE macro
  18.     mov bx, handler
  19.     lea dx, buff
  20.     mov ah, 40h
  21.     mov cx,1
  22.     int 21h
  23.     endm
  24.  
  25.     CLOSE macro
  26.     mov ah, 3eh
  27.     mov bx, handler
  28.     int 21h
  29.     endm
  30.  
  31. .CODE
  32. assume ds: @data, es:@data
  33.  
  34. start:
  35. mov ax,@data
  36. mov ds,ax
  37. mov es,ax
  38.  
  39.  
  40. OPEN file_name, handler
  41.  
  42. mov ah,0ah
  43. lea dx,buff
  44. int 21h
  45.  
  46. mov dl,0ah
  47. mov ah,02h
  48. int 21h
  49.  
  50. lea bx, buff
  51. mov cl, [bx+1]
  52. lea di, [buff+2]
  53. xor ax,ax ;обнуляется регистр
  54. xor ch,ch ;обнуляется регистр
  55. mov si,10 ;si содержит множитель 10 a
  56.  
  57. xor bh,bh ;обнуляется регистр
  58. m2:
  59. mul si ;умножить ax на si(10)
  60. mov bl,[di] ;к произведению добавить число
  61. sub bl,30h ;отнять 30h
  62. add ax,bx ;добавить число к сумме ax
  63. inc di ;инкремент di
  64. loop m2 ;повтор цикла
  65.  
  66. mov bx, 1  
  67.  
  68. m1:
  69.     cmp ax,bx ;сравниваем числа
  70.     jb BREAK    ; если <= 1 то выходим
  71.  
  72.     inc bx  ;увеличиваем bx т.е будет не 1 а уже 2
  73.     mov cx,ax ;временно сохраняем число из ax
  74.     mov dx,0  ;кидаем 0  в dx это типа нужный остаток
  75.     div bx
  76.     mov ax,cx
  77.  
  78.     test dx, dx ;смотрпим остаток
  79.     jnz m1
  80.  
  81.     push ax          ;вывод делителя и перевод строки
  82.     mov ax, bx
  83.     call  Show_AX
  84.     pop ax
  85.     ;lea dx, [buff]
  86.    
  87. delenie:
  88.     mov cx,ax
  89.     mov dx,0
  90.     div bx
  91.  
  92.     test dx,dx
  93.     jz OKAY
  94.     ja RENEW
  95.  
  96.  
  97. OKAY:
  98.     dec bx
  99.     jmp m1
  100.  
  101. RENEW:
  102.     mov ax,cx ;восстанавливаем ax черех cx  вкотором лежит число
  103.     jmp m1
  104.  
  105. Show_AX:
  106.         push    ax
  107.         push    bx
  108.         push    cx
  109.         push    dx
  110.         push    di
  111.  
  112.         mov     cx, 10
  113.         xor     di, di          ; di - кол. цифр в числе
  114.  
  115.         or      ax, ax
  116.         ;jns Conv
  117. Conv:
  118.  
  119.     xor     dx, dx
  120.         div     cx              ; dl = num mod 10
  121.         add     dl, '0'         ; перевод в символьный формат
  122.         inc     di
  123.         push    dx              ; складываем в стэк
  124.         or      ax, ax
  125.         jnz     Conv
  126.  
  127. Show:
  128.         pop     dx              ; dl = очередной символ
  129.         mov     ah, 2           ; ah - функция вывода символа на экран
  130.         int     21h
  131.         dec     di              ; повторяем пока di<>0
  132.         jnz     Show
  133.  
  134.         pop     di
  135.         pop     dx
  136.         pop     cx
  137.         pop     bx
  138.         pop     ax
  139.         ret
  140.  
  141. BREAK:
  142.     mov ax,4c00h
  143.     int 21h
  144.  
  145. CLOSE
  146.  
  147. mov ax,4c00h
  148. int 21h
  149.  
  150. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement