Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. assume cs: code, ds: data
  2.  
  3. data segment
  4. str1 db 10, 9 dup (0)
  5. str2 db 10, 9 dup (0)
  6. str3 db 10, 9 dup (0)
  7. ennd db 0dh,0ah, '$'
  8. res db 10, 9 dup (0)
  9. res2 db 10, 9 dup (0)
  10. str0 db 10, 9 dup (0)
  11. fin db 10, 9 dup (0)
  12. data ends
  13.  
  14. code segment
  15.  
  16. perev proc
  17.     push bp
  18.     mov bp, sp
  19.    
  20.     mov bl, 0
  21.     mov si, [bp+4]
  22.     mov di, [bp+6]
  23.     mov bl, 10
  24.     mov [di], bl
  25.     mov al, [di]
  26.     mov bl, 0
  27.     add si, 2
  28. point:
  29.     mov al, [si]
  30.     sub al, '0'
  31.     cmp al, 0
  32.     jne ded
  33.     add bl, 1
  34.     add si, 1
  35.     jmp point
  36. ded:
  37.     add di, 1
  38.     mov cl, 10
  39.     sub cl, bl
  40.     sub cl, 2
  41.     ;add al, '0'
  42.     mov [di], cl
  43. lop:
  44.     add di, 1
  45.     mov dh, [si]
  46.     ;add dh, '0'
  47.     mov [di], dh
  48.     ;mov dl, 0
  49.     ;mov [si], dl
  50.     cmp cl, 0
  51.     je vixod
  52.     dec cl
  53.     add si, 1
  54.     jmp lop
  55. vixod:
  56.    
  57.     mov di, [bp+6]
  58.     mov al, [di]
  59.     inc di
  60.     mov al, [di]
  61.     inc di
  62.     mov al, [di]
  63.     inc di
  64.     mov al, [di]
  65.     inc di
  66.     mov al, [di]
  67.  
  68.     mov si, offset str0
  69.     ;mov ah, 09h
  70.     ;int 21h
  71.     add si, 2
  72.     mov cl, 9
  73. outp2:
  74.     mov dl, [si]
  75.     ;add dl, 30h
  76.     mov ah, 02h
  77.     int 21h
  78.     inc si
  79.     loop outp2
  80.    
  81.    
  82.     pop bp
  83.     ret
  84. perev endp
  85.  
  86. mult proc
  87.     push bp
  88.     mov bp, sp
  89.     mov al, 0
  90.     mov ah, 0
  91.     mov bl, 0
  92.     mov bh, 0
  93.     mov cl, 0
  94.     mov ch,0
  95.     mov dl, 0
  96.     mov dh,0
  97.  
  98.  
  99.     mov si, [bp+4] ; str1
  100.     mov di, [bp+6] ; цифра
  101.  
  102.     mov al, [si+1] ;n1
  103.     mov bl, [di+1] ;n2
  104.  
  105.     cmp al, bl
  106.     jge iter   ;n1 >= n2
  107.     mov cl, bl
  108.     jmp setIter
  109. iter:
  110.     mov cl, al
  111. setIter:
  112.     mov dl, [si] ;конец массива
  113.     mov ah, 0
  114.  
  115.     add si, ax
  116.     add di, bx
  117.  
  118.     add si, 1 ;последний элемент str2
  119.     add di, 1 ;последний элемент str1
  120.  
  121.     mov bh, 0
  122.  
  123.     mov dh, 0
  124.  
  125. lep1part: ;внутренний цикл
  126.     mov al, [si]
  127.     mov bl, [di]
  128.  
  129.     sub al, 30h
  130.     sub bl, 30h
  131.  
  132.     mul bl
  133.     cmp al, 10
  134.     jl x11 ;al<10
  135.     ;al>=10
  136.     add al, bh ; плюсую десяток, если есть
  137.     mov bl, 10
  138.     div bl
  139.     mov bh, al
  140.     mov al, ah
  141.     jmp x22
  142. x11:
  143.     add al, bh
  144.     mov bh, 0
  145. x22:
  146.     push si
  147.     mov si, [bp+8] ;res
  148.     mov bl, [si+1]
  149.     inc bl ;кладу цифру в массив = увеличиваю n
  150.     mov [si+1], bl
  151.     add si, dx
  152.     add al, 30h
  153.     mov [si], al
  154.     dec dl
  155.  
  156.     pop si
  157.  
  158.     dec si
  159.     loop lep1part
  160.  
  161.     cmp bh, 0
  162.     je eds; bh=0
  163.     ;bh>0
  164.     push si
  165.     mov si, [bp+8] ;res
  166.     mov al, [si+1]
  167.     inc al
  168.     mov [si+1], al
  169.     add si, dx
  170.     dec dl
  171.     add bh, 30h
  172.     mov [si], bh
  173.  
  174.     pop si
  175. eds:
  176. ;отладочная печать, сколько раз работает ф-ия
  177. ;и что она ваще выводит
  178.  
  179.     mov si, [bp+8]
  180.     ;mov ah, 09h
  181.     ;int 21h
  182.     add si, 2
  183.     mov cl, 9
  184. outp:
  185.     mov dl, [si]
  186.     ;add dl, 30h
  187.     mov ah, 02h
  188.     int 21h
  189.     inc si
  190.     loop outp
  191.  
  192. ;конец отладки
  193.     mov al, 0
  194.     mov ah, 0
  195.     mov bl, 0
  196.     mov bh, 0
  197.     mov cl, 0
  198.     mov ch,0
  199.     mov dl, 0
  200.     mov dh,0
  201.  
  202.     pop bp
  203.  
  204.     ret
  205. mult endp
  206.  
  207. start:
  208.     mov ax, data
  209.     mov ds, ax
  210.  
  211.     mov si, offset res
  212.     mov di, offset fin
  213.     mov cl, [si]
  214.     sub cl, 2
  215.     add si, 2
  216.     add di, 2
  217.     mov al, 30h
  218. pep:
  219.     mov [si], al
  220.     mov [di], al
  221.     inc si
  222.     inc di
  223.     loop pep
  224.  
  225.     mov dx, offset str1 ; в dx перемещаем адрес строки
  226.     mov si, dx
  227.     mov ax, 0
  228.     mov ah, 0Ah ; ввод
  229.     int 21h
  230.  
  231.     mov dx, offset ennd ; кинули в конец строки EOL
  232.     ;mov dx, offset wh
  233.     mov ah, 09h ; вывод
  234.     int 21h
  235.  
  236.     mov dx, offset str2 ; в dx перемещаем адрес строки
  237.     mov si, dx
  238.     mov ah, 0Ah ; ввод
  239.     int 21h
  240.  
  241.     mov dx, offset ennd ; кинули в конец строки EOL
  242.     ;mov dx, offset wh
  243.     mov ah, 09h ; вывод
  244.     int 21h
  245.  
  246.     mov al, 0
  247.     mov ah, 0
  248.     mov bl, 0
  249.     mov bh, 0
  250.     mov cl, 0
  251.     mov ch,0
  252.     mov dl, 0
  253.     mov dh,0
  254.  
  255.     mov si, offset str2
  256.     mov di, offset str3
  257.     mov al, [si]
  258.     mov [di], al
  259.     mov al, [si+1]
  260.     mov [di+1], al
  261.     mov al, [si+2]
  262.     mov [di+2], al
  263.  
  264.     mov si, offset str1
  265.     mov di, offset str2
  266.     mov cl, [si]
  267. lk3:
  268.     mov al, [si]
  269.     mov [di], al
  270.     inc si
  271.     inc di
  272.     dec cl
  273.     cmp cl, 0
  274.     je oee3
  275.     jmp lk3
  276. oee3:
  277.  
  278. mov si, offset str2
  279.     ;mov ah, 09h
  280.     ;int 21h
  281.     add si, 2
  282.     mov cl, 9
  283. outp5:
  284.     mov dl, [si]
  285.     ;add dl, 30h
  286.     mov ah, 02h
  287.     int 21h
  288.     inc si
  289.     loop outp5
  290. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  291.     push offset fin
  292.     push offset str1
  293.     push offset str2
  294. qwe1:
  295.     mov si, offset res
  296.     mov di, offset fin
  297.     mov cl, [si]
  298.     sub cl, 2
  299.     add si, 2
  300.     add di, 2
  301.     mov al, 30h
  302. pep1:
  303.     mov [si], al
  304.     mov [di], al
  305.     inc si
  306.     inc di
  307.     loop pep1
  308.        
  309.     call mult
  310.  
  311.     mov si, offset str1
  312.     mov di, offset str2
  313.    
  314.     mov al, [si+1]
  315.     mov ah, [di+1]
  316.  
  317.     cmp al, 1
  318.     je exit1
  319.     ;al!=1
  320.     cmp ah, 1
  321.     je exit1
  322.     ;ah!=1
  323.  
  324.     pop si
  325.     pop si
  326.     pop si
  327.     mov bl, 1 ;счетчик внешнего цикла + сдвиг
  328.     mov di, offset str2
  329.     mov dh, [di+1]
  330. q:
  331. ; пододвигаю цифру второй строки
  332.     push bx
  333.     push dx
  334.     mov si, offset str2
  335.     mov cl, [si+1]
  336.     add si, cx
  337.     dec cl
  338.     inc si
  339. tr:
  340.     mov al, [si-1]
  341.     mov [si], al
  342.     dec si
  343.     loop tr
  344. ; конец сдвига
  345.  
  346.     ;mov si, offset str2
  347.     ;add si, 2
  348.     ;mov al, [si]
  349.     ;inc si
  350.     ;mov al, [si]
  351.     push offset res
  352.     push offset str2
  353.     push offset str1
  354.    
  355.     call mult
  356.     pop si
  357.     pop si
  358.     pop si
  359.     jmp oo
  360. exit1:
  361.     jmp exit2
  362.  
  363. oo:
  364. ; надо сложить с результатом + сдвиг
  365.     pop dx
  366.     pop bx
  367.     mov si, offset res
  368.     mov di, offset fin
  369.     mov cl, [si] ;10
  370.     ;dec cl ;9
  371.     add si, cx ; в конце строки (9)
  372.     add di, cx ;в конце стркоки (9)
  373.     dec cl  ;8
  374.     sub di, bx ;(8)
  375.     sub cl, bl ;7
  376.     jmp sumres
  377.     afr:
  378.     jmp q
  379. sumres:
  380.     mov al, [di]
  381.     sub al, 30h
  382.     mov ah, [si]
  383.     sub ah, 30h
  384.  
  385.     cmp dl, 0
  386.     je non ;dl = 0
  387.     ;dl !=0
  388.     add al, dl
  389. non:
  390.     add al, ah
  391.     cmp al, 10
  392.     jl hep ; al<10
  393.  
  394.     ;al>=10
  395.     sub al, 10
  396.     mov dl, 1
  397.     jmp edd
  398. hep:
  399.     mov dl, 0
  400. edd:
  401.     add al, 30h
  402.     mov [di], al
  403.     dec si
  404.     dec di
  405.     dec cl
  406.     cmp cl, 0
  407.     je xd ;cl=0
  408.     ;cl!=0
  409.     jmp sumres
  410. xd:
  411.     inc bl
  412.     cmp bl, dh
  413.     jl afr ;bl < bh
  414.     mov bl, 0
  415.     mov dh, 0
  416. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  417.     mov di, offset str3
  418.     mov cl, [di+2]
  419.     sub cl, 30h
  420.     mov ch, 0
  421.     dec cl
  422.     add cl, 30h
  423.     mov [di+2], cl
  424.     sub cl, 30h
  425.     cmp cl, 1
  426.     jle finale ;cl=<1
  427.  
  428.     mov al, 0
  429.     mov ah, 0
  430.     mov bl, 0
  431.     mov bh, 0
  432.     mov cl, 0
  433.     mov ch, 0
  434.     mov dl, 0
  435.     mov dh, 0
  436.     push offset str0
  437.     push offset fin
  438.     call perev
  439.     pop si
  440.     pop si
  441.  
  442.     mov si, offset str0
  443.     mov al, [si+1]
  444.     inc al
  445.     ;add al, 30h
  446.     mov [si+1], al
  447.  
  448.     jmp oee1
  449. finale:
  450.     jmp finale2
  451. oee1:
  452.     mov si, offset str2
  453.     ;mov ah, 09h
  454.     ;int 21h
  455.     add si, 2
  456.     mov cl, 9
  457. outp3:
  458.     mov dl, [si]
  459.     ;add dl, 30h
  460.     mov ah, 02h
  461.     int 21h
  462.     inc si
  463.     loop outp3
  464.  
  465.     mov si, offset str0
  466.     mov di, offset str1
  467.  
  468.     mov cl, [si]
  469. lk1:
  470.     mov al, [si]
  471.     mov [di], al
  472.     inc si
  473.     inc di
  474.     dec cl
  475.     cmp cl, 0
  476.     je oee2
  477.     jmp lk1
  478. oee2:
  479.     mov si, offset str1
  480.     ;mov ah, 09h
  481.     ;int 21h
  482.     add si, 2
  483.     mov cl, 9
  484. outp4:
  485.     mov dl, [si]
  486.     ;add dl, 30h
  487.     mov ah, 02h
  488.     int 21h
  489.     inc si
  490.     loop outp4
  491.  
  492.     push offset fin
  493.     push offset str2
  494.     push offset str1
  495.     jmp qwe1
  496.  
  497. finale2:
  498.     mov si, offset fin
  499.     ;mov ah, 09h
  500.     ;int 21h
  501.     add si, 1
  502.     mov cl, 9
  503. outp1:
  504.     mov dl, [si]
  505.     ;add dl, 30h
  506.     mov ah, 02h
  507.     int 21h
  508.     inc si
  509.     loop outp1
  510.     jmp rew
  511. exit2:
  512. rew:
  513.     mov ah, 4ch
  514.     int 21h
  515.     code ends
  516.     end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement