Advertisement
kerelius

Untitled

Sep 30th, 2019
1,817
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. includelib libcmt.lib
  2. includelib libvcruntime.lib
  3. includelib libucrt.lib
  4. includelib legacy_stdio_definitions.lib  
  5.  
  6. extern printf_s: proc, scanf_s: proc, getchar: proc
  7.  
  8. .data
  9.     prompt byte "Enter an integer number: ", 0
  10.     inputFormatString byte "%d", 0
  11.     invalidInputMessage byte "Error: Invalid Input.", 0
  12.     formatString1 byte "The number %2d is divisible by both 3 and 5", 10, 13, 0
  13.     formatString2 byte "The number %2d is divisible by 3 but not 5", 10, 13, 0
  14.     formatString3 byte "The number %2d is divisible by 5 but not 3", 10, 13, 0
  15.     formatString4 byte "The number %2d is neither divisible by 3 nor 5", 10, 13, 0
  16.  
  17. .data?
  18.    num sdword ?                             ; int x, y, sum, product, difference;                                  
  19.  
  20. .code
  21. main proc  
  22.      enter       32, 0
  23.      lea         rcx,   [prompt]            ; printf("Enter two integers: ");  
  24.      call        printf_s                       ;  
  25.    
  26.      lea         rdx,   [num]                   ;  
  27.      lea         rcx,   [inputFormatString]     ;  
  28.      call        scanf_s                    ;  
  29.      
  30.      cmp         rax, 1
  31.      jne         error
  32.      
  33.      call        getchar
  34.      cmp         rax, 32
  35.      je          program
  36.      cmp         rax, 10
  37.      je          program
  38.      cmp         rax, 9
  39.      je          program
  40.      
  41.      jmp         error
  42.  
  43.      error:
  44.          lea         rcx,   [invalidInputMessage]
  45.          call        printf_s
  46.          jmp         terminate
  47.  
  48.      program:
  49.          mov    eax,    num
  50.          cdq
  51.          mov    ebx,    5  
  52.          idiv   ebx
  53.          cmp    edx, 0
  54.          je     cond1
  55.          jmp    cond2
  56.  
  57.          cond1:                                 ;by 5 and 3
  58.               mov   eax,    num
  59.               cdq
  60.               mov   ebx,    3  
  61.               idiv  ebx
  62.               cmp   edx, 0
  63.               jne   cond3
  64.  
  65.               mov   edx,    dword ptr [num]
  66.               lea   rcx,    [formatString1]
  67.               call   printf_s
  68.               jmp   terminate
  69.  
  70.          cond2:                                 ;by 3 but not 5
  71.               mov   eax,    num
  72.               cdq
  73.               mov   ebx,    3  
  74.               idiv  ebx
  75.               cmp   edx, 0
  76.               jne   cond4
  77.               mov   edx,    dword ptr [num]
  78.               lea   rcx,    [formatString2]
  79.               call   printf_s
  80.               jmp   terminate
  81.    
  82.          cond3:                                 ;by 5 but not 3
  83.               mov   edx,    dword ptr [num]
  84.               lea   rcx,    [formatString3]
  85.               call   printf_s
  86.               jmp   terminate
  87.  
  88.          cond4:                                 ;neither 3 nor 5
  89.               mov   edx,    dword ptr [num]
  90.               lea   rcx,    [formatString4]
  91.               call   printf_s
  92.          
  93.          
  94.  
  95.        
  96.  
  97.  
  98.    
  99.     terminate:
  100.         xor rax, rax
  101.         leave
  102. main endp
  103. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement