Advertisement
Guest User

Untitled

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