Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
131
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. ennd db 0dh,0ah, '$'
  7. res db 10, 9 dup (0)
  8. res2 db 10, 9 dup (0)
  9.  
  10. fin db 10, 9 dup (0)
  11. data ends
  12.  
  13. code segment
  14.  
  15. mult proc
  16.     push bp
  17.     mov bp, sp
  18.     mov al, 0
  19.     mov ah, 0
  20.     mov bl, 0
  21.     mov bh, 0
  22.     mov cl, 0
  23.     mov ch,0
  24.     mov dl, 0
  25.     mov dh,0
  26.  
  27.  
  28.     mov si, [bp+4] ; str1
  29.     mov di, [bp+6] ; цифра
  30.  
  31.     mov al, [si+1] ;n1
  32.     mov bl, [di+1] ;n2
  33.  
  34.     cmp al, bl
  35.     jge iter   ;n1 >= n2
  36.     mov cl, bl
  37.     jmp setIter
  38. iter:
  39.     mov cl, al
  40. setIter:
  41.     mov dl, [si] ;конец массива
  42.     mov ah, 0
  43.  
  44.     add si, ax
  45.     add di, bx
  46.  
  47.     add si, 1 ;последний элемент str2
  48.     add di, 1 ;последний элемент str1
  49.  
  50.     mov bh, 0
  51.  
  52.     mov dh, 0
  53.  
  54. lep1part: ;внутренний цикл
  55.     mov al, [si]
  56.     mov bl, [di]
  57.  
  58.     sub al, 30h
  59.     sub bl, 30h
  60.  
  61.     mul bl
  62.     cmp al, 10
  63.     jl x11 ;al<10
  64.     ;al>=10
  65.     add al, bh ; плюсую десяток, если есть
  66.     mov bl, 10
  67.     div bl
  68.     mov bh, al
  69.     mov al, ah
  70.     jmp x22
  71. x11:
  72.     add al, bh
  73.     mov bh, 0
  74. x22:
  75.     push si
  76.     mov si, [bp+8] ;res
  77.     mov bl, [si+1]
  78.     inc bl ;кладу цифру в массив = увеличиваю n
  79.     mov [si+1], bl
  80.     add si, dx
  81.     add al, 30h
  82.     mov [si], al
  83.     dec dl
  84.  
  85.     pop si
  86.  
  87.     dec si
  88.     loop lep1part
  89.  
  90.     cmp bh, 0
  91.     je eds; bh=0
  92.     ;bh>0
  93.     push si
  94.     mov si, [bp+8] ;res
  95.     mov al, [si+1]
  96.     inc al
  97.     mov [si+1], al
  98.     add si, dx
  99.     dec dl
  100.     add bh, 30h
  101.     mov [si], bh
  102.  
  103.     pop si
  104. eds:
  105. ;отладочная печать, сколько раз работает ф-ия
  106. ;и что она ваще выводит
  107.  
  108. ;   mov si, [bp+8]
  109.     ;mov ah, 09h
  110.     ;int 21h
  111. ;   add si, 2
  112. ;   mov cl, 9
  113. ;outp:
  114. ;   mov dl, [si]
  115.     ;add dl, 30h
  116. ;   mov ah, 02h
  117. ;   int 21h
  118. ;   inc si
  119. ;   loop outp
  120.  
  121. ;конец отладки
  122.     mov al, 0
  123.     mov ah, 0
  124.     mov bl, 0
  125.     mov bh, 0
  126.     mov cl, 0
  127.     mov ch,0
  128.     mov dl, 0
  129.     mov dh,0
  130.  
  131.     pop bp
  132.  
  133.     ret
  134. mult endp
  135.  
  136. start:
  137.     mov ax, data
  138.     mov ds, ax
  139.  
  140.     mov si, offset res
  141.     mov di, offset fin
  142.     mov cl, [si]
  143.     sub cl, 2
  144.     add si, 2
  145.     add di, 2
  146.     mov al, 30h
  147. pep:
  148.     mov [si], al
  149.     mov [di], al
  150.     inc si
  151.     inc di
  152.     loop pep
  153.  
  154.     mov dx, offset str1 ; в dx перемещаем адрес строки
  155.     mov si, dx
  156.     mov ax, 0
  157.     mov ah, 0Ah ; ввод
  158.     int 21h
  159.  
  160.     mov dx, offset ennd ; кинули в конец строки EOL
  161.     ;mov dx, offset wh
  162.     mov ah, 09h ; вывод
  163.     int 21h
  164.  
  165.     mov dx, offset str2 ; в dx перемещаем адрес строки
  166.     mov si, dx
  167.     mov ah, 0Ah ; ввод
  168.     int 21h
  169.  
  170.     mov dx, offset ennd ; кинули в конец строки EOL
  171.     ;mov dx, offset wh
  172.     mov ah, 09h ; вывод
  173.     int 21h
  174.  
  175.     mov si, offset str1
  176.     mov di, offset str2
  177.     mov al, [si+1]
  178.     mov ah, [di+1]
  179.  
  180.     cmp al, ah
  181.     jl we ;al<ah
  182.     push offset fin
  183.     push offset str2
  184.     push offset str1
  185.     jmp wex
  186. we:
  187.     push offset fin
  188.     push offset str1
  189.     push offset str2
  190. wex:
  191.     call mult
  192.  
  193.     mov si, offset str1
  194.     mov di, offset str2
  195.     mov al, [si+1]
  196.     mov ah, [di+1]
  197.  
  198.     cmp al, ah
  199.     jl wes ;al<ah
  200.     mov si, offset str1
  201.     mov di, offset str2
  202.     jmp wess
  203. wes:
  204.     mov di, offset str1
  205.     mov si, offset str2
  206. wess:
  207.     mov al, [si+1]
  208.     mov ah, [di+1]
  209.  
  210.     cmp al, 1
  211.     je exit1
  212.     ;al!=1
  213.     cmp ah, 1
  214.     je exit1
  215.     ;ah!=1
  216.  
  217.     pop si
  218.     pop si
  219.     pop si
  220.     mov bl, 1 ;счетчик внешнего цикла + сдвиг
  221.     mov di, offset str2
  222.     mov dh, [di+1]
  223. q:
  224. ; пододвигаю цифру второй строки
  225.     push bx
  226.     push dx
  227.     mov si, offset str2
  228.     mov cl, [si+1]
  229.     add si, cx
  230.     dec cl
  231.     inc si
  232. tr:
  233.     mov al, [si-1]
  234.     mov [si], al
  235.     dec si
  236.     loop tr
  237. ; конец сдвига
  238.  
  239.     ;mov si, offset str2
  240.     ;add si, 2
  241.     ;mov al, [si]
  242.     ;inc si
  243.     ;mov al, [si]
  244.     mov si, offset str1
  245.     mov di, offset str2
  246.     mov al, [si+1]
  247.     mov ah, [di+1]
  248.  
  249.     cmp al, ah
  250.     jl we1 ;al<ah
  251.     push offset res
  252.     push offset str2
  253.     push offset str1
  254.     jmp wex1
  255. we1:
  256.     push offset res
  257.     push offset str1
  258.     push offset str2
  259. wex1:
  260.     call mult
  261.     pop si
  262.     pop si
  263.     pop si
  264.     jmp oo
  265. exit1:
  266.     jmp exit2
  267.  
  268. oo:
  269. ; надо сложить с результатом + сдвиг
  270.     pop dx
  271.     pop bx
  272.     mov si, offset res
  273.     mov di, offset fin
  274.     mov cl, [si] ;10
  275.     ;dec cl ;9
  276.     add si, cx ; в конце строки (9)
  277.     add di, cx ;в конце стркоки (9)
  278.     dec cl  ;8
  279.     sub di, bx ;(8)
  280.     sub cl, bl ;7
  281.     jmp sumres
  282.     afr:
  283.     jmp q
  284. sumres:
  285.     mov al, [di]
  286.     sub al, 30h
  287.     mov ah, [si]
  288.     sub ah, 30h
  289.  
  290.     cmp dl, 0
  291.     je non ;dl = 0
  292.     ;dl !=0
  293.     add al, dl
  294. non:
  295.     add al, ah
  296.     cmp al, 10
  297.     jl hep ; al<10
  298.  
  299.     ;al>=10
  300.     sub al, 10
  301.     mov dl, 1
  302.     jmp edd
  303. hep:
  304.     mov dl, 0
  305. edd:
  306.     add al, 30h
  307.     mov [di], al
  308.     dec si
  309.     dec di
  310.     dec cl
  311.     cmp cl, 0
  312.     je xd ;cl=0
  313.     ;cl!=0
  314.     jmp sumres
  315. xd:
  316.     inc bl
  317.     cmp bl, dh
  318.     jl afr ;bl < bh
  319.  
  320. finale:
  321.     mov si, offset fin
  322.     ;mov ah, 09h
  323.     ;int 21h
  324.     add si, 2
  325.     mov cl, 9
  326. outp1:
  327.     mov dl, [si]
  328.     ;add dl, 30h
  329.     mov ah, 02h
  330.     int 21h
  331.     inc si
  332.     loop outp1
  333.     jmp rew
  334.  
  335. exit2:
  336.     mov si, offset fin
  337.     ;mov ah, 09h
  338.     ;int 21h
  339.     add si, 2
  340.     mov cl, 9
  341. outp2:
  342.     mov dl, [si]
  343.     ;add dl, 30h
  344.     mov ah, 02h
  345.     int 21h
  346.     inc si
  347.     loop outp2
  348.  
  349. rew:
  350.     mov ah, 4ch
  351.     int 21h
  352.     code ends
  353.     end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement