X86 Assembly Write a subroutine named ShiftMultiplication that multiplies any un
ID: 3818443 • Letter: X
Question
X86 Assembly
Write a subroutine named ShiftMultiplication that multiplies any unsigned 32-bit integer byEAX:
-Useonly shifts and addition instructions.
-Pass the integer to the subroutine in the EBX register, and return the product in the EAX register.
-Assume that the product is never larger than 32 bits.
-You are only allowed to use a loop(do-while)to shift the multiplier to the right, keeping track of the number of shifts that occur.
-The resulting shift count can then be applied to the SHL instruction, using the multiplicand as the destination operand.
-Then, the same process must be repeated until you find the last 1 bit in the multiplier.
-You are not allowed to use the loop instruction and are not allowed to use the factoring method.
-Run your program using the debugger to verify your answers.
-The main program that calls the subroutine and displays the product is given to you as shown below:
oSubmit the following:
Lastname3.asm
INCLUDE Irvine32.inc
.data
p1 BYTE "Enter the multiplicand: ",0
p2 BYTE "Enter the multiplier: ",0
p3 BYTE "The product is ",0
.codemain PROC
call Clrscr;
Input the multiplicand
mov edx,OFFSET p1
call WriteString
call ReadDec ;ReadDec stores the first input (multiplicand) in eax
mov ebx,eax ;save eax in ebx so the next ReadDec will not overwrite it
;
Input the multiplier
mov edx, OFFSET p2
call WriteString
call ReadDec ;ReadDec stores the second input (multiplier) in eax
call Crlf
; multiply EBX by EAX, producing EAX
call Multiply
; Display the product in EAX
mov edx,OFFSET p3
call WriteString
call WriteDec
call Crlf
Explanation / Answer
ShiftMultiplication:
Mov ECX,eax;
Mov eax, #0;
l1: Add eax,ebx;
Dcr ECX;
Jnz l1;
Return ;
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.