Advertisement
Guest User

Untitled

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