Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
129
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.     push offset fin
  279.     push offset str1
  280.     push offset str2
  281. qwe1:  
  282.     call mult
  283.  
  284.     mov si, offset str1
  285.     mov di, offset str2
  286.    
  287.     mov al, [si+1]
  288.     mov ah, [di+1]
  289.  
  290.     cmp al, 1
  291.     je exit1
  292.     ;al!=1
  293.     cmp ah, 1
  294.     je exit1
  295.     ;ah!=1
  296.  
  297.     pop si
  298.     pop si
  299.     pop si
  300.     mov bl, 1 ;счетчик внешнего цикла + сдвиг
  301.     mov di, offset str2
  302.     mov dh, [di+1]
  303. q:
  304. ; пододвигаю цифру второй строки
  305.     push bx
  306.     push dx
  307.     mov si, offset str2
  308.     mov cl, [si+1]
  309.     add si, cx
  310.     dec cl
  311.     inc si
  312. tr:
  313.     mov al, [si-1]
  314.     mov [si], al
  315.     dec si
  316.     loop tr
  317. ; конец сдвига
  318.  
  319.     ;mov si, offset str2
  320.     ;add si, 2
  321.     ;mov al, [si]
  322.     ;inc si
  323.     ;mov al, [si]
  324.     push offset res
  325.     push offset str2
  326.     push offset str1
  327.    
  328.     call mult
  329.     pop si
  330.     pop si
  331.     pop si
  332.     jmp oo
  333. exit1:
  334.     jmp exit2
  335.  
  336. oo:
  337. ; надо сложить с результатом + сдвиг
  338.     pop dx
  339.     pop bx
  340.     mov si, offset res
  341.     mov di, offset fin
  342.     mov cl, [si] ;10
  343.     ;dec cl ;9
  344.     add si, cx ; в конце строки (9)
  345.     add di, cx ;в конце стркоки (9)
  346.     dec cl  ;8
  347.     sub di, bx ;(8)
  348.     sub cl, bl ;7
  349.     jmp sumres
  350.     afr:
  351.     jmp q
  352. sumres:
  353.     mov al, [di]
  354.     sub al, 30h
  355.     mov ah, [si]
  356.     sub ah, 30h
  357.  
  358.     cmp dl, 0
  359.     je non ;dl = 0
  360.     ;dl !=0
  361.     add al, dl
  362. non:
  363.     add al, ah
  364.     cmp al, 10
  365.     jl hep ; al<10
  366.  
  367.     ;al>=10
  368.     sub al, 10
  369.     mov dl, 1
  370.     jmp edd
  371. hep:
  372.     mov dl, 0
  373. edd:
  374.     add al, 30h
  375.     mov [di], al
  376.     dec si
  377.     dec di
  378.     dec cl
  379.     cmp cl, 0
  380.     je xd ;cl=0
  381.     ;cl!=0
  382.     jmp sumres
  383. xd:
  384.     inc bl
  385.     cmp bl, dh
  386.     jl afr ;bl < bh
  387.     mov bl, 0
  388.     mov dh, 0
  389. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  390.     mov di, offset str3
  391.     mov cl, [di+2]
  392.     sub cl, 30h
  393.     mov ch, 0
  394.     dec cl
  395.     add cl, 30h
  396.     mov [di+2], cl
  397.     cmp cl, 1
  398.     jle finale ;cl=<1
  399.  
  400.     mov al, 0
  401.     mov ah, 0
  402.     mov bl, 0
  403.     mov bh, 0
  404.     mov cl, 0
  405.     mov ch, 0
  406.     mov dl, 0
  407.     mov dh, 0
  408.     push offset str0
  409.     push offset fin
  410.     call perev
  411.     pop si
  412.     pop si
  413.  
  414.     mov si, offset str0
  415.     mov al, [si+1]
  416.     inc al
  417.     ;add al, 30h
  418.     mov [si+1], al
  419.  
  420.     mov si, offset str1
  421.     mov di, offset str2
  422.     mov cl, [si]
  423. lk:
  424.     mov al, [si]
  425.     mov [di], al
  426.     inc si
  427.     inc di
  428.     dec cl
  429.     cmp cl, 0
  430.     je oee1
  431.     jmp lk
  432. finale:
  433.     jmp finale2
  434. oee1:
  435.     mov si, offset str2
  436.     ;mov ah, 09h
  437.     ;int 21h
  438.     add si, 2
  439.     mov cl, 9
  440. outp3:
  441.     mov dl, [si]
  442.     ;add dl, 30h
  443.     mov ah, 02h
  444.     int 21h
  445.     inc si
  446.     loop outp3
  447.  
  448.     mov si, offset str0
  449.     mov di, offset str1
  450.  
  451.     mov cl, [si]
  452. lk1:
  453.     mov al, [si]
  454.     mov [di], al
  455.     inc si
  456.     inc di
  457.     dec cl
  458.     cmp cl, 0
  459.     je oee2
  460.     jmp lk1
  461. oee2:
  462.     push offset str2
  463.     push offset str1
  464.     jmp qwe1
  465.  
  466. finale2:
  467.     mov si, offset fin
  468.     ;mov ah, 09h
  469.     ;int 21h
  470.     add si, 1
  471.     mov cl, 9
  472. outp1:
  473.     mov dl, [si]
  474.     ;add dl, 30h
  475.     mov ah, 02h
  476.     int 21h
  477.     inc si
  478.     loop outp1
  479.     jmp rew
  480. exit2:
  481. rew:
  482.     mov ah, 4ch
  483.     int 21h
  484.     code ends
  485.     end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement