Advertisement
kerelius

lab7task2

Mar 4th, 2019
757
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .686
  2. .model flat, c
  3.  
  4. includelib libcmt.lib
  5. includelib libvcruntime.lib
  6. includelib libucrt.lib
  7. includelib legacy_stdio_definitions.lib  
  8.  
  9. extern printf_s: proc, scanf_s: proc
  10.  
  11. .data
  12. enterBaseNumber byte "Enter base number: ", 0
  13. enterExponent byte "Enter the exponent(positive integer): ", 0
  14. inputFormatString byte "%d", 0
  15. outputformatString byte "%d^%d = %d", 13, 10, 0
  16.  
  17. .data?
  18. x dword ?
  19. y dword ?
  20. result dword ?
  21.  
  22. .code
  23. main proc
  24.  
  25.         push        offset enterBaseNumber
  26.         call        printf_s
  27.         add         esp, 4
  28.        
  29.         push        offset x
  30.         push        offset inputFormatString
  31.         call        scanf_s
  32.         add         esp, 8
  33.        
  34.         push        offset enterExponent
  35.         call        printf_s
  36.         add         esp, 4
  37.        
  38.         push        offset y
  39.         push        offset inputFormatString
  40.         call        scanf_s
  41.         add         esp, 8
  42.  
  43.         push        y
  44.         push        x  
  45.         call        power
  46.         add         esp, 8
  47.  
  48.         mov         result, eax
  49.        
  50.         push        result
  51.         push        y
  52.         push        x
  53.         push        offset outputformatString
  54.         call        printf_s
  55.         add         esp, 16
  56.        
  57.         xor         eax, eax
  58.        
  59.         ret
  60. main endp
  61.        
  62. power PROC
  63.  
  64.         push        ebp  
  65.         mov         ebp,  esp  
  66.         sub         esp,  32
  67.         cmp         dword ptr [ebp + 12], 0    ; y
  68.         mov         esi, [ebp + 12]
  69.         jne         L1                        ; [ebp + 12]  x
  70.         mov         eax, 1
  71.         jmp         L2             
  72. L1:
  73.         ;mov            eax, [ebp + 8]
  74.         mov         edi, [ebp + 8]
  75.         mov         ebx, [ebp + 12]              ; return x * power(x, y - 1);
  76.         dec         ebx  
  77.         push        ebx
  78.         push        edi
  79.         call        power
  80.         add         esp, 8  
  81.         mul         dword ptr [ebp + 8]  
  82. L2:
  83.         mov         esp, ebp
  84.         pop         ebp
  85.         ret
  86. power ENDP
  87. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement