Advertisement
kat_power

5-20 flawless

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