Multiplication Instructions
Multiplication Instructions
Statement Purpose:
Objective of this lab is to introduce students with Integer multiplication in x86 assembly language that can be performed as a 32-bit, 16-bit, or 8-bit operation. In many cases, it revolves around EAX or one of its subsets (AX, AL). The MUL and IMUL instructions perform unsigned and signed integer multiplication, respectively.
Activity Outcomes:
This lab teaches you the following topics:
- Students will know that MUL and IMUL instructions are very helpful in performing multiplication for unsigned and signed integers.
- They will also learn the way these two differs from each other and the way we can use the suitable
- IMUL comes with multiple operands so the students will be able to distinguish the flexibility provide by IMUL over MUL
Instructor Note:
MUL Instruction
- The MUL (unsigned multiply) instruction multiplies an 8-, 16-, or 32-bit operand by either AL, AX, or
The IMUL (signed multiply) instruction performs signed integer multiplication.
- Unlike the MUL instruction, IMUL preserves the sign of the
- It does this by sign extending the highest bit of the lower half of the product into the upper bits of the
Introduction
MUL instruction formats are:
- MUL r/m8
- MUL r/m16
- MUL r/m32
The x86 instruction set supports three formats for the IMUL instruction:
- One operand
- Two operands
- Three operands
The one-operand formats store the product in AX, DX:AX, or EDX:EAX:
The two-operand version of the IMUL instruction stores the product in the first operand, which must be a register.
- The second operand (the multiplier) can be a register, memory operand, or immediate value
The three-operand formats store the product in the first operand.
- The second operand can be a 16-bit register or memory operand, which is multiplied by the third operand, an 8- or 16-bit immediate value:
Activities:
Activity 1:
Unsigned Multiplication: Multiply AL by BL, storing the product in AX.
Solution:
The Carry flag is clear (CF = 0) because AH (the upper half of the product) equals zero
Activity 2:
Unsigned Multiplication: 100h * 2000h, using 16-bit operands.
Solution:
TITLE Lab Multiplication and Division Instructions
; Author: Ashfaq Hussain Farooqi INCLUDE Irvine32.inc
.data
val1 WORD 2000h val2 WORD 100h
.code
mov ax,val1
mul val2 ; DX:AX = 00200000h, CF=1
exit
main ENDP END main
The Carry flag indicates whether or not the upper half of the product contains significant digits.
Activity 3:
Unsigned Multiplication: 12345h * 1000h, using 32-bit operands.
Solution:
TITLE Lab Multiplication and Division Instructions
; Author: Ashfaq Hussain Farooqi INCLUDE Irvine32.inc
.data
.code Main proc
mov eax,12345h mov ebx,1000h
mul ebx ; EDX:EAX = 0000000012345000h, CF=0
exit
main ENDP END main
Activity 4:
Singed Multiplication; Multiply 48 by 4, producing +192 in AX.
Solution:
Although the product is correct, AH is not a sign extension of AL, so the Overflow flag is set.
Activity 5:
Singed Multiplication; Multiply -4 by 4, producing -16 in AX.
Solution:
AH is a sign extension of AL so the Overflow flag is clear.
Activity 6:
Singed Multiplication; Multiply 48 by 4, producing 192 in DX:AX.
Solution:
DX is a sign extension of AX, so the Overflow flag is clear
Activity 7:
Singed Multiplication; 4823424 * -423.
Solution:
TITLE Lab Multiplication and Division Instructions
; Author: Ashfaq Hussain Farooqi INCLUDE Irvine32.inc
.data
.code Main proc
exit
mov eax,4823424 mov ebx,-423
imul ebx ; EDX:EAX = FFFFFFFF86635D80h, OF=0
main ENDP END main
Activity 8:
Singed Multiplication; Give examples of two operands as much as possible.
Solution:
TITLE Lab Multiplication and Division Instructions
; Author: Ashfaq Hussain Farooqi INCLUDE Irvine32.inc
.data | ||
word1 | SWORD | 4 |
dword1 | SDWORD | 4 |
.code | ||
mov | ax, -16 | ; AX = -16 |
mov | bx , 2 | ; BX = 2 |
mull | bx, ax | ; BX = -32 |
imul | bx, 2 | ; BX = -64 |
imul | bx, word1 | ; BX = -256 |
mov | eax, -16 | ; EAX = -16 |
mov | ebx, 2 | ; EBX = 2 |
imul | ebx, eax | ; EBX = -32 |
imul | ebx, 2 | ; EBX = -64 |
imul | ebx, dword1 | ; EBX = -256 |
exit
main ENDP END main
Activity 9:
Singed Multiplication; Give examples of three operands as much as possible.
Solution:
TITLE Lab Multiplication and Division Instructions
; Author: Ashfaq Hussain Farooqi INCLUDE Irvine32.inc
.data
word1 | SWORD | 4 | ||
dword1 | SDWORD | 4 | ||
.code | ||||
imul | bx, | word1, -16 | ; BX = -64 | |
imul | ebx, | dword1,-16 | ; EBX = -64 |
imul ebx, dword1,-2000000000 ; OF = 1 exit
main ENDP END main
Home Activities:
Activity 1:
Take two unsigned numbers from the user and display its product (8Bit, 16Bit, and 32Bit variables).
Activity 2:
Take two signed numbers from the user and display its product (8Bit, 16Bit, and 32Bit variables).
Assignment:
Consider there are two arrays having six indexes. Populate them by taking inputs from the user. Now, populate the third array by multiplying the same index values. If the numbers are positive use MUL and if the numbers are signed use IMUL instruction.
Note: Consider numbers as Signed/Unsigned and are 32Bit values.