TheQuack45

Integer arithmetic operations in x86 MASM

Mar 16th, 2016
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .586
  2. .MODEL FLAT, C
  3.  
  4. .DATA
  5. advOper DB 1 ;Set to 0 if addition or subtraction, 1 if multiplication and division
  6. oper DB 1 ;Set to 0 if addition or multiplication, 1 if subtraction or division
  7. a DWORD 25
  8. b DWORD 5
  9.  
  10. .CODE
  11.  
  12. MAIN PROC
  13.     mov ebx, 1 ;move 0 to EBX register for counter
  14.     mov eax, a
  15.  
  16.     cmp advOper, 0
  17.     je simpCall
  18.     jmp advCall
  19.  
  20.     simpCall:
  21.         cmp oper, 0
  22.         je additionCall
  23.         jmp subtractionCall
  24.  
  25.     advCall:
  26.         cmp oper, 0
  27.         je multiplyCall
  28.         jmp divideCall
  29.  
  30.     additionCall:
  31.         call ADDITION
  32.         jmp endSect
  33.  
  34.     subtractionCall:
  35.         call SUBTRACTION
  36.         jmp endSect
  37.  
  38.     multiplyCall:
  39.         call MULTIPLY
  40.         jmp endSect
  41.  
  42.     divideCall:
  43.         call DIVIDE
  44.         jmp endSect
  45.  
  46.     endSect:
  47.         mov eax, eax
  48. MAIN ENDP
  49.  
  50. ADDITION PROC
  51.     mov eax, a
  52.     add eax, b
  53.     ret
  54. ADDITION ENDP
  55.  
  56. SUBTRACTION PROC
  57.     mov eax, a
  58.     sub eax, b
  59.     ret
  60. SUBTRACTION ENDP
  61.  
  62. MULTIPLY PROC
  63.     multi:
  64.         add eax, a
  65.         inc ebx
  66.         cmp ebx, b
  67.         jl multi
  68.         ret
  69. MULTIPLY ENDP
  70.  
  71. DIVIDE PROC
  72.     divi:
  73.         sub eax, b
  74.         inc ebx
  75.         cmp eax, 1
  76.         jg divi
  77.         mov eax, ebx
  78.         dec eax
  79.         ret
  80. DIVIDE ENDP
  81.  
  82. END
Advertisement
Add Comment
Please, Sign In to add comment