Advertisement
Guest User

Untitled

a guest
Apr 17th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. org 100h
  2.  
  3. ; передача через стек, ближние процедуры
  4.  
  5. Start:
  6.         call    GetProccessedNum
  7.         mov     ax, dx
  8.         call    GetProccessedNum
  9.         mov     bx,dx
  10.         push    bx
  11.         push    ax
  12.         call    CalculateResult
  13.         mov     dx, ax
  14.         call    OutputSoughtNumber
  15.         call    WaitForClick
  16.  
  17.  
  18.  
  19. CalculateResult:
  20.         push     bp ; это надо,чтобы приняла
  21.         mov      bp ,sp
  22.         mov      ax, [bp + 4]
  23.         mul      ax
  24.         mov      bx, ax
  25.         mov      ax,[bp + 6]
  26.         mov      si, [bp + 6]
  27.         mul      si
  28.         mul      si
  29.         or       ax, bx
  30.         mov      sp, bp
  31.         pop      bp  ;так как сверху запушили bp
  32.         ret      4 ; сколько байтов запушили, столько и достали
  33.  
  34. GetProccessedNum:  ; Result in DX
  35.         push     ax
  36.         mov      ah, 0ah
  37.         mov      dx, input
  38.         int      21h
  39.  
  40.         mov      dh, [input + 1]
  41.         mov      [realSize], dh
  42.         call     ProccessNum
  43.         call     SetNewLine
  44.         pop      ax
  45.         ret
  46.  
  47.  
  48. ProccessNum:    ; Result in DX
  49.         push    cx
  50.         push    bx
  51.         xor     dx, dx
  52.         mov     ax, 1
  53.         mov     ch, 10
  54.         movzx   si, [realSize]
  55.  
  56. LoopDigit:
  57.         xor     bx, bx
  58.         mov     bl, [input + si + 1]
  59.         sub     bl, '0'
  60.         mov     cl, al
  61.         mul     bl
  62.         add     dx, ax
  63.         mov     al, cl
  64.         mul     ch
  65.  
  66.         dec     si
  67.         test    si,si
  68.         jnz     LoopDigit
  69.  
  70.         pop     bx
  71.         pop     cx
  72.         ret
  73.  
  74. SetNewLine:
  75.         push     ax
  76.         push     dx
  77.         mov      ah, 09h
  78.         mov      dx, newLine
  79.         int      21h
  80.         pop      dx
  81.         pop      ax
  82.         ret
  83.  
  84.  
  85. WaitForClick:
  86.         push     ax
  87.         mov      ah, 08h
  88.         int      21h
  89.         pop      ax
  90.         ret
  91.  
  92. OutputSoughtNumber:        ;waits for dx
  93.         mov     [toOutput],dx
  94.         mov     bh, 10
  95.         xor     ax, ax
  96.         mov     ax, [toOutput]
  97.         test    ax, ax
  98.         jz      NumIsZero
  99.         mov     cx, 0
  100. DivideNum:
  101.         add     cx, 1
  102.         div     bh
  103.         xor     dx, dx
  104.         mov     dl, ah
  105.         push    dx
  106.         xor     ah, ah
  107.         test    ax, ax
  108.         jnz     DivideNum
  109.         jmp     OutputDigit
  110.  
  111. NumIsZero:
  112.         push    0
  113.         mov     cx, 1
  114.  
  115. OutputDigit:
  116.         pop     dx
  117.         add     dx, 30h
  118.         mov     ah, 02h
  119.         int     21h
  120.         loop    OutputDigit
  121.         ret  ;OutputSoughtNumber ret
  122.  
  123.  
  124.  
  125. input            db      4,5 dup(?)
  126. newLine          db      13,10,'$'
  127. realSize         db      ?
  128. toOutput         dw      ?
  129. X       dw      ?
  130. Y       dw      ?
  131. Z       dw      ?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement