Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- COMMENT !
- This program was created by Nick Meek.
- This program uses bitwise multiplication to calculate
- the product of two small numbers.
- It was last modified on 10/31/16.
- !
- INCLUDE Irvine32.inc
- .data
- var1 BYTE 00000110b ; multiplicant 6h
- var2 BYTE 00000011b ; multiplier 3h = 3
- .code
- main PROC
- call MulTwo
- ;call MulTwoShift
- call MulTwoLoop
- exit ; exit the program
- main ENDP
- MulTwo PROC
- PUSHAD ; pushes all of the 32-bit registers to the stack
- PUSHFD ; pushed all of the 32-bit flags to the stack
- MOV EAX,123456h
- MOV EBX,789ABCh
- MUL EBX ; output EDX:EAX
- POPFD ; pops all of the 32-bit flags from the stack
- POPAD ; pops all of the 32-bit registers from the stack
- RET ; return to where procedure was called
- MulTwo ENDP
- MulTwoShift PROC
- PUSHAD ; pushes all of the 32-bit registers to the stack
- PUSHFD ; pushed all of the 32-bit flags to the stack
- MOV AX,0
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L1
- ADD AL,var1
- L1:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L2
- ADD AL,var1
- L2:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L3
- ADD AL,var1
- L3:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L4
- ADD AL,var1
- L4:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L5
- ADD AL,var1
- L5:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L6
- ADD AL,var1
- L6:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L7
- ADD AL,var1
- L7:
- SHL var1,1
- SHR var2,1
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L8
- ADD AL,var1
- L8:
- SHL var1,1
- SHR var2,1
- POPFD ; pops all of the 32-bit flags from the stack
- POPAD ; pops all of the 32-bit registers from the stack
- RET ; return to where procedure was called
- MulTwoShift ENDP
- MulTwoLoop PROC
- PUSHAD ; pushes all of the 32-bit registers to the stack
- PUSHFD ; pushed all of the 32-bit flags to the stack
- MOV AX,0
- MOV ECX,8 ; initialize loop counter to 8
- L1:
- MOV AH,var2
- AND AH,00000001b
- CMP AH,00000001b
- JNE L2
- ADD AL,var1
- L2:
- SHL var1,1
- SHR var2,1
- LOOP L1
- POPFD ; pops all of the 32-bit flags from the stack
- POPAD ; pops all of the 32-bit registers from the stack
- RET ; return to where procedure was called
- MulTwoLoop ENDP
- END main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement