Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. COMMENT !
  2. This program was created by Nick Meek.
  3. This program uses bitwise multiplication to calculate
  4. the product of two small numbers.
  5. It was last modified on 10/31/16.
  6. !
  7. INCLUDE Irvine32.inc
  8. .data
  9. var1 BYTE 00000110b ; multiplicant 6h
  10. var2 BYTE 00000011b ; multiplier 3h = 3
  11. .code
  12. main PROC
  13. call MulTwo
  14. ;call MulTwoShift
  15. call MulTwoLoop
  16. exit ; exit the program
  17. main ENDP
  18. MulTwo PROC
  19. PUSHAD ; pushes all of the 32-bit registers to the stack
  20. PUSHFD ; pushed all of the 32-bit flags to the stack
  21. MOV EAX,123456h
  22. MOV EBX,789ABCh
  23. MUL EBX ; output EDX:EAX
  24. POPFD ; pops all of the 32-bit flags from the stack
  25. POPAD ; pops all of the 32-bit registers from the stack
  26. RET ; return to where procedure was called
  27. MulTwo ENDP
  28. MulTwoShift PROC
  29. PUSHAD ; pushes all of the 32-bit registers to the stack
  30. PUSHFD ; pushed all of the 32-bit flags to the stack
  31. MOV AX,0
  32. MOV AH,var2
  33. AND AH,00000001b
  34. CMP AH,00000001b
  35. JNE L1
  36. ADD AL,var1
  37. L1:
  38. SHL var1,1
  39. SHR var2,1
  40. MOV AH,var2
  41. AND AH,00000001b
  42. CMP AH,00000001b
  43. JNE L2
  44. ADD AL,var1
  45. L2:
  46. SHL var1,1
  47. SHR var2,1
  48. MOV AH,var2
  49. AND AH,00000001b
  50. CMP AH,00000001b
  51. JNE L3
  52. ADD AL,var1
  53. L3:
  54. SHL var1,1
  55. SHR var2,1
  56. MOV AH,var2
  57. AND AH,00000001b
  58. CMP AH,00000001b
  59. JNE L4
  60. ADD AL,var1
  61. L4:
  62. SHL var1,1
  63. SHR var2,1
  64. MOV AH,var2
  65. AND AH,00000001b
  66. CMP AH,00000001b
  67. JNE L5
  68. ADD AL,var1
  69. L5:
  70. SHL var1,1
  71. SHR var2,1
  72. MOV AH,var2
  73. AND AH,00000001b
  74. CMP AH,00000001b
  75. JNE L6
  76. ADD AL,var1
  77. L6:
  78. SHL var1,1
  79. SHR var2,1
  80. MOV AH,var2
  81. AND AH,00000001b
  82. CMP AH,00000001b
  83. JNE L7
  84. ADD AL,var1
  85. L7:
  86. SHL var1,1
  87. SHR var2,1
  88. MOV AH,var2
  89. AND AH,00000001b
  90. CMP AH,00000001b
  91. JNE L8
  92. ADD AL,var1
  93. L8:
  94. SHL var1,1
  95. SHR var2,1
  96. POPFD ; pops all of the 32-bit flags from the stack
  97. POPAD ; pops all of the 32-bit registers from the stack
  98. RET ; return to where procedure was called
  99. MulTwoShift ENDP
  100. MulTwoLoop PROC
  101. PUSHAD ; pushes all of the 32-bit registers to the stack
  102. PUSHFD ; pushed all of the 32-bit flags to the stack
  103. MOV AX,0
  104. MOV ECX,8 ; initialize loop counter to 8
  105. L1:
  106. MOV AH,var2
  107. AND AH,00000001b
  108. CMP AH,00000001b
  109. JNE L2
  110. ADD AL,var1
  111. L2:
  112. SHL var1,1
  113. SHR var2,1
  114. LOOP L1
  115. POPFD ; pops all of the 32-bit flags from the stack
  116. POPAD ; pops all of the 32-bit registers from the stack
  117. RET ; return to where procedure was called
  118. MulTwoLoop ENDP
  119. END main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement