TheQuack45

Integer arithmetic etc blahblahblah 3/18/16

Mar 18th, 2016
420
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. order1Switch DB 1 ;Set to 0 if addition/multiplication/exponentiation, 1 if subtraction/division/modulus
  6. order2Switch DB 0 ;Set to 0 if addition/subtraction, 1 if multiplication/division
  7. order3Switch DB 1 ;Set to 0 if addition/subtraction/multiplication/division, 1 if exponentiation/modulus
  8. a DD 7
  9. b DD 2
  10.  
  11. .CODE
  12.  
  13. MAIN PROC
  14.     mov ecx, 0 ;Set ECX to 0 for counter
  15.    
  16.     ; Initalize data register (EAX, accumulator) with 0
  17.     mov eax, 0
  18.  
  19.     cmp order3Switch, 0
  20.     jg ord3Exec
  21.  
  22.     cmp order2Switch, 0
  23.     je ord1Exec
  24.     jmp ord2Exec
  25.    
  26.     ord1Exec:
  27.         add eax, a
  28.         cmp order1Switch, 0
  29.         je execAdd
  30.         jmp execSub
  31.    
  32.     ord2Exec:
  33.         cmp order1Switch, 0
  34.         je execMulti
  35.         jmp execDivi
  36.  
  37.     ord3Exec:
  38.         cmp order1Switch, 0
  39.         je execExp
  40.         jmp execMod
  41.  
  42.     execAdd:
  43.         call ADDITION
  44.         jmp endSect
  45.  
  46.     execSub:
  47.         call SUBTRACTION
  48.         jmp endSect
  49.  
  50.     execMulti:
  51.         call MULTIPLICATION
  52.         jmp endSect
  53.  
  54.     execDivi:
  55.         call DIVISION
  56.         jmp endSect
  57.  
  58.     execExp:
  59.         call EXPONENTIATION
  60.         jmp endSect
  61.  
  62.     execMod:
  63.         call MODULUS
  64.         jmp endSect
  65.  
  66.     endSect:
  67.         mov eax, eax
  68. MAIN ENDP
  69.  
  70. ADDITION PROC
  71.     add eax, b
  72.     ret
  73. ADDITION ENDP
  74.  
  75. SUBTRACTION PROC
  76.     sub eax, b
  77.     ret
  78. SUBTRACTION ENDP
  79.  
  80. MULTIPLICATION PROC
  81.     mov ecx, b
  82.     multiply:
  83.         add eax, a
  84.         loop multiply
  85.     ret
  86. MULTIPLICATION ENDP
  87.  
  88. MULTIPLICATIONEXP PROC
  89.     mov ecx, a
  90.     multiply:
  91.         add eax, a
  92.         loop multiply
  93.     ret
  94. MULTIPLICATIONEXP ENDP
  95.  
  96. DIVISION PROC
  97.     mov eax, a
  98.     divi:
  99.         sub eax, b
  100.         inc ecx
  101.         cmp eax, 0
  102.         jg divi
  103.  
  104.     finish:
  105.         cmp eax, 0
  106.         jl fail
  107.         mov eax, ecx
  108.         ret
  109.  
  110.     fail:
  111.         ;Numbers do not evenly divide
  112.         ;Output 0, indicates failure
  113.         mov eax, 0
  114.         ret
  115. DIVISION ENDP
  116.  
  117. EXPONENTIATION PROC
  118.     mov edx, b
  119.     dec edx
  120.     expon:
  121.         call MULTIPLICATIONEXP
  122.         dec edx
  123.         cmp edx, 0
  124.         jne expon
  125.     ret
  126. EXPONENTIATION ENDP
  127.  
  128. MODULUS PROC
  129.     mov eax, a
  130.     divi:
  131.         sub eax, b
  132.         cmp eax, 0
  133.         jg divi
  134.         je finish
  135.         jl modu
  136.  
  137.     finish:
  138.         mov eax, 0
  139.         ret
  140.  
  141.     modu:
  142.         mov edx, 0
  143.         sub edx, eax
  144.         mov eax, edx
  145.         ret
  146. MODULUS ENDP
  147.  
  148. END
Advertisement
Add Comment
Please, Sign In to add comment