SlideShare uma empresa Scribd logo
1 de 28
 Paper and Pencil Example:
Multiplicand 11002 = 12
Multiplier × 11012 = 13
1100
0000
1100
1100
Product 100111002 = 156
 m-bit multiplicand × n-bit multiplier = (m+n)-bit product
 Accomplished via shifting and addition
 Consumes more time and more chip area than addition
Unsigned Integer Multiplication
Binary multiplication is easy
0 × multiplicand = 0
1 × multiplicand = multiplicand
Sequential Unsigned Multiplication
 Initialize Product = 0
 Check each bit of the Multiplier
 If Multiplier bit = 1 then Product = Product + Multiplicand
 Rather than shifting the multiplicand to the left
Instead, Shift the Product to the Right
Has the same net effect and produces the same result
Minimizes the hardware resources
 One cycle per iteration (for each bit of the Multiplier)
 Addition and shifting can be done simultaneously
 Initialize HI = 0
 Initialize LO = Multiplier
 Final Product = HI and LO registers
 Repeat for each bit of Multiplier
Sequential Multiplication Hardware
= 0
Start
LO[0]?
HI = HI + Multiplicand
32nd
Repetition?
Done
= 1
No
Yes
HI = 0, LO=Multiplier
Shift (Carry, HI, LO) Right 1 bit32-bit ALU
Control
64 bits
32 bits
write
add
LO[0]
Multiplicand
shift right
32 bits
HI LO
32 bits
carry
Sequential Multiplier Example
 Consider: 11002 × 11012 , Product = 100111002
 4-bit multiplicand and multiplier are used in this example
 4-bit adder produces a 5-bit sum (with carry)
1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 1 1 1 1 0 0 1
LO[0] = 0 => Do Nothing
1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 0 1 1 0 0 1 1
1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 1 1 0 0 1 1 0
1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 1 0 0 1 1 1 0 0
2
1 1 0 0 0 0 0 0 1 1 0 1Initialize (HI = 0, LO = Multiplier)0
1
3
4
Multiplicand Product = HI, LOCarryIteration
0 1 1 0 0 1 1 0 1LO[0] = 1 => ADD +
0 1 1 1 1 0 0 1 1LO[0] = 1 => ADD +
1 0 0 1 1 1 0 0 1LO[0] = 1 => ADD +
Next . . .
 Unsigned Integer Multiplication
 Signed Integer Multiplication
 Faster Integer Multiplication
 Integer Division
 Integer Multiplication and Division in MIPS
Signed Integer Multiplication
 So far, we have dealt with unsigned integer multiplication
 First Attempt:
 Convert multiplier and multiplicand into positive numbers
 If negative then obtain the 2's complement and remember the sign
 Perform unsigned multiplication
 Compute the sign of the product
 If product sign < 0 then obtain the 2's complement of the
product
 Better Version:
 Use the unsigned multiplication hardware
 When shifting right, extend the sign of the product
 If multiplier is negative, the last step should be a subtract
Signed Multiplication (Pencil & Paper)
 Case 1: Positive Multiplier
Multiplicand 11002 = -4
Multiplier × 01012 = +5
11111100
111100
Product 111011002 = -20
 Case 2: Negative Multiplier
Multiplicand 11002 = -4
Multiplier × 11012 = -3
11111100
111100
00100 (2's complement of 1100)
Product 000011002 = +12
Sign-extension
Sign-extension
 ALU produces 32-bit result + Sign bit
 Check for overflow
 No overflow  Extend sign-bit of result
 Overflow  Invert sign bit
Sequential Signed Multiplier
= 0
Start
LO[0]?
First 31 iterations: HI = HI + Multiplicand
Last iteration: HI = HI – Multiplicand
32nd
Repetition?
Done
= 1
No
Yes
HI = 0, LO = Multiplier
Shift Right (Sign, HI, LO) 1 bit32-bit ALU
Control
64 bits
32 bits
write
add, sub
LO[0]
Multiplicand
shift right
32 bits
HI LO
32 bitssign
Signed Multiplication Example
 Consider: 11002 (-4) × 11012 (-3), Product = 000011002
 Check for overflow: No overflow  Extend sign bit
 Last iteration: add 2's complement of Multiplicand
1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 0 1 1 0 0 1
LO[0] = 0 => Do Nothing
1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 1 1 0 0 1 1
1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 1 0 0 1 1 0
Shift (Sign, HI, LO) right 1 bit 0 0 0 0 1 1 0 0
2
1 1 0 0 0 0 0 0 1 1 0 1Initialize (HI = 0, LO = Multiplier)0
1
3
4
Multiplicand Product = HI, LOSignIteration
1 1 1 0 0 1 1 0 1LO[0] = 1 => ADD +
1 1 0 1 1 0 0 1 1LO[0] = 1 => ADD +
0 1 0 0 0 0 0 0 1 1 0 0 1LO[0] = 1 => SUB (ADD 2's compl) +
Next . . .
 Unsigned Integer Multiplication
 Signed Integer Multiplication
 Faster Integer Multiplication
 Integer Division
 Integer Multiplication and Division in MIPS
Faster Integer Multiplier
Uses Multiple Adders (Cost vs. Performance)
 Can be pipelined
Using Multiple Adders
 32-bit adder for each bit of the multiplier
 AND multiplicand with each bit of multiplier
 Product = accumulated shifted sum
 Each adder produces a 33-bit output
 Most significant bit is a carry bit
 Array multiplier can be optimized
 Additions can be done in parallel
 Multiple-level tree reduction to produce final product
 Carry save adders reduce delays
Carry Save Adders
 Used when adding multiple numbers (as in multipliers)
 All the bits of a carry-save adder work in parallel
 The carry does not propagate as in a carry-propagate adder
 This is why a carry-save is faster than a carry-propagate adder
 A carry-save adder has 3 inputs and produces two outputs
 It adds 3 numbers and produces partial sum and carry bits
Carry-Propagate Adder
+
a0 b0
s0
+
a1 b1
s1
+
a31 b31
s31
. . .cout cin
Carry-Save Adder
. . .+
a31 b31
s'31c'31
c31
+
a1 b1
s'1c'1
c1
+
a0 b0
s'0c'0
c0
Tree Multiplier - 1 of 2
 Suppose we want to multiply two numbers A and B
 Example on 4-bit numbers: A = a3 a2 a1 a0 and B = b3 b2 b1 b0
 Step 1: AND (multiply) each bit of A with each bit of B
 Requires n2
AND gates and produces n2
product bits
 Position of aibj = (i+j). For example, Position of a2b3 = 2+3 = 5
a0b0a1b0a2b0a3b0
a0b1a1b1a2b1a3b1
a0b2a1b2a2b2a3b2
a0b3a1b3a2b3a3b3
A × B
Tree Multiplier – 2 of 2
Step 2: Use carry save adders to add the partial products
 Reduce the partial products to just two numbers
Step 3: Add last two numbers using a carry-propagate adder
P0
+
a2b0 a1b1
++
+
a3b0 a2b1 a0b0
+
a1b0 a0b1
+
+
+++
+
a3b1 a2b2
+
a3b2
a2b3
a3b3
a1b3 a0b3
a1b2 a0b2
P1P2P3P4P5P6P7
Carry Save Adder
Carry Propagate Adder
Next . . .
 Unsigned Integer Multiplication
 Signed Integer Multiplication
 Faster Integer Multiplication
 Integer Division
 Integer Multiplication and Division in MIPS
Try to see how big a
number can be
subtracted, creating a
digit of the quotient on
each attempt
= 19 Quotient
Divisor 10112 110110012 = 217 Dividend
-1011
10
101
1010
10100
-1011
1001
10011
-1011
10002 = 8 Remainder
Unsigned Division (Paper & Pencil)
Binary division is
accomplished via
shifting and subtraction
Dividend =
Quotient × Divisor
+ Remainder
217 = 19 × 11 + 8
100112
Sequential Division
 Uses two registers: HI and LO
 Initialize: HI = Remainder = 0 and LO = Dividend
 Shift (HI, LO) LEFT by 1 bit (also Shift Quotient LEFT)
 Shift the remainder and dividend registers together LEFT
 Has the same net effect of shifting the divisor RIGHT
 Compute: Difference = Remainder – Divisor
 If (Difference ≥ 0) then
 Remainder = Difference
 Set Least significant Bit of Quotient
 Observation to Reduce Hardware:
 LO register can be also used to store the computed Quotient
Sequential Division Hardware
 Initialize:
 HI = 0, LO = Dividend
 Results:
 HI = Remainder
 LO = Quotient
Start
Difference?
2. HI = Remainder = Difference
Set least significant bit of LO
32nd
Repetition?
Done
< 0≥ 0
No
Yes
1. Shift (HI, LO) Left
Difference = HI – Divisor
shift left
Divisor
32-bit ALU
LO
32 bits
write
sub
32 bits
Difference
sign
set lsb
HI
32 bits
Control
2: Diff < 0 => Do Nothing
Unsigned Integer Division Example
 Example: 11102 / 00112 (4-bit dividend & divisor)
 Result Quotient = 01002 and Remainder = 00102
 4-bit registers for Remainder and Divisor (4-bit ALU)
2: Rem = Diff, set lsb of LO 1 0 0 10 0 0 0
2: Diff < 0 => Do Nothing
2: Diff < 0 => Do Nothing
2
0 0 0 0 1 1 1 0Initialize0
1
3
4
HI DifferenceLOIteration
0 0 1 1
Divisor
1 1 1 01: Shift Left, Diff = HI - Divisor 0 0 0 1 1 1 0 0 0 0 1 1
0 0 0 01: Shift Left, Diff = HI - Divisor 0 0 1 1 1 0 0 0 0 0 1 1
1 1 1 01: Shift Left, Diff = HI - Divisor 0 0 0 1 0 0 1 0 0 0 1 1
1 1 1 11: Shift Left, Diff = HI - Divisor 0 0 1 0 0 1 0 0 0 0 1 1
Signed Integer Division
 Simplest way is to remember the signs
 Convert the dividend and divisor to positive
 Obtain the 2's complement if they are negative
 Do the unsigned division
 Compute the signs of the quotient and remainder
 Quotient sign = Dividend sign XOR Divisor sign
 Remainder sign = Dividend sign
 Negate the quotient and remainder if their sign is negative
 Obtain the 2's complement to convert them to negative
Signed Integer Division Examples
1. Positive Dividend and Positive Divisor
 Example: +17 / +3 Quotient = +5 Remainder = +2
1. Positive Dividend and Negative Divisor
 Example: +17 / –3 Quotient = –5 Remainder = +2
1. Negative Dividend and Positive Divisor
 Example: –17 / +3 Quotient = –5 Remainder = –2
1. Negative Dividend and Negative Divisor
 Example: –17 / –3 Quotient = +5 Remainder = –2
The following equation must always hold:
Dividend = Quotient × Divisor + Remainder
Next . . .
 Unsigned Integer Multiplication
 Signed Integer Multiplication
 Faster Multiplication
 Integer Division
 Integer Multiplication and Division in MIPS
Integer Multiplication in MIPS
 Multiply instructions
 mult $s1,$s2 Signed multiplication
 multu $s1,$s2 Unsigned multiplication
 32-bit multiplication produces a 64-bit Product
 Separate pair of 32-bit registers
 HI = high-order 32-bit of product
 LO = low-order 32-bit of product
 MIPS also has a special mul instruction
 mul $s0,$s1,$s2 $s0 = $s1 × $s2
 Put low-order 32 bits into destination register
 HI & LO are undefined
Multiply
Divide
$0
HI LO
$1
..
$31
Integer Division in MIPS
 Divide instructions
 div $s1,$s2 Signed division
 divu $s1,$s2 Unsigned division
 Division produces quotient and remainder
 Separate pair of 32-bit registers
 HI = 32-bit remainder
 LO = 32-bit quotient
 If divisor is 0 then result is unpredictable
 Moving data from HI/LO to MIPS registers
 mfhi Rd (move from HI to Rd)
 mflo Rd (move from LO to Rd)
Multiply
Divide
$0
HI LO
$1
..
$31
Integer Multiply/Divide Instructions
Instruction Meaning Format
mult Rs, Rt Hi, Lo = Rs × Rt op6
= 0 Rs5
Rt5
0 0 0x18
multu Rs, Rt Hi, Lo = Rs × Rt op6
= 0 Rs5
Rt5
0 0 0x19
mul Rd, Rs, Rt Rd = Rs × Rt 0x1c Rs5
Rt5
Rd5
0 0x02
div Rs, Rt Hi, Lo = Rs / Rt op6
= 0 Rs5
Rt5
0 0 0x1a
divu Rs, Rt Hi, Lo = Rs / Rt op6
= 0 Rs5
Rt5
0 0 0x1b
mfhi Rd Rd = Hi op6
= 0 0 0 Rd5
0 0x10
mflo Rd Rd = Lo op6
= 0 0 0 Rd5
0 0x12
 Signed arithmetic: mult, div (Rs and Rt are signed)
 LO = 32-bit low-order and HI = 32-bit high-order of multiplication
 LO = 32-bit quotient and HI = 32-bit remainder of division
 Unsigned arithmetic: multu, divu (Rs and Rt are unsigned)
 NO arithmetic exception can occur
Integer to String Conversion
 Objective: convert an unsigned 32-bit integer to a string
 How to obtain the decimal digits of the number?
 Divide the number by 10, Remainder = decimal digit (0 to 9)
 Convert decimal digit into its ASCII representation ('0' to '9')
 Repeat the division until the quotient becomes zero
 Digits are computed backwards from least to most significant
 Example: convert 2037 to a string
 Divide 2037/10 quotient = 203 remainder = 7 char = '7'
 Divide 203/10 quotient = 20 remainder = 3 char = '3'
 Divide 20/10 quotient = 2 remainder = 0 char = '0'
 Divide 2/10 quotient = 0 remainder = 2 char = '2'
Integer to String Procedure
#--------------------------------------------------------------
# int2str: Converts an unsigned integer into a string
# Input: $a0 = unsigned integer
# In/Out: $a1 = address of string buffer (12 bytes)
#--------------------------------------------------------------
int2str:
move $t0, $a0 # $t0 = dividend = unsigned integer
li $t1, 10 # $t1 = divisor = 10
addiu $a1, $a1, 11 # start at end of string buffer
sb $zero, 0($a1) # store a NULL byte
convert:
divu $t0, $t1 # LO = quotient, HI = remainder
mflo $t0 # $t0 = quotient
mfhi $t2 # $t2 = remainder
addiu $t2, $t2, 0x30 # convert digit to a character
addiu $a1, $a1, -1 # point to previous byte
sb $t2, 0($a1) # store digit character
bnez $t0, convert # loop if quotient is not 0
jr $ra # return to caller

Mais conteúdo relacionado

Mais procurados

Digital and logic designs presentation
Digital and logic designs presentationDigital and logic designs presentation
Digital and logic designs presentation
Haya Butt
 
Booth’s algorithm.(a014& a015)
Booth’s algorithm.(a014& a015)Booth’s algorithm.(a014& a015)
Booth’s algorithm.(a014& a015)
Piyush Rochwani
 
8086-instruction-set-ppt
 8086-instruction-set-ppt 8086-instruction-set-ppt
8086-instruction-set-ppt
jemimajerome
 
Microprogram Control
Microprogram Control Microprogram Control
Microprogram Control
Anuj Modi
 

Mais procurados (20)

Chapter 6 register
Chapter 6 registerChapter 6 register
Chapter 6 register
 
Register transfer and micro-operation
Register transfer and micro-operationRegister transfer and micro-operation
Register transfer and micro-operation
 
Digital and logic designs presentation
Digital and logic designs presentationDigital and logic designs presentation
Digital and logic designs presentation
 
Chapter 5: Cominational Logic with MSI and LSI
Chapter 5: Cominational Logic with MSI and LSIChapter 5: Cominational Logic with MSI and LSI
Chapter 5: Cominational Logic with MSI and LSI
 
Register in Digital Logic
Register in Digital LogicRegister in Digital Logic
Register in Digital Logic
 
Booth’s algorithm.(a014& a015)
Booth’s algorithm.(a014& a015)Booth’s algorithm.(a014& a015)
Booth’s algorithm.(a014& a015)
 
Floating point representation
Floating point representationFloating point representation
Floating point representation
 
8086-instruction-set-ppt
 8086-instruction-set-ppt 8086-instruction-set-ppt
8086-instruction-set-ppt
 
HDLC
HDLCHDLC
HDLC
 
Processor Organization and Architecture
Processor Organization and ArchitectureProcessor Organization and Architecture
Processor Organization and Architecture
 
Logical and shift micro operations
Logical and shift micro operationsLogical and shift micro operations
Logical and shift micro operations
 
RISC - Reduced Instruction Set Computing
RISC - Reduced Instruction Set ComputingRISC - Reduced Instruction Set Computing
RISC - Reduced Instruction Set Computing
 
ARM Architecture
ARM ArchitectureARM Architecture
ARM Architecture
 
Microprogram Control
Microprogram Control Microprogram Control
Microprogram Control
 
Arithmetic logic shift unit
Arithmetic logic shift unitArithmetic logic shift unit
Arithmetic logic shift unit
 
pipelining
pipeliningpipelining
pipelining
 
Advance Peripheral Bus
Advance Peripheral Bus Advance Peripheral Bus
Advance Peripheral Bus
 
Unit 3-pipelining &amp; vector processing
Unit 3-pipelining &amp; vector processingUnit 3-pipelining &amp; vector processing
Unit 3-pipelining &amp; vector processing
 
Sequential circuits in Digital Electronics
Sequential circuits in Digital ElectronicsSequential circuits in Digital Electronics
Sequential circuits in Digital Electronics
 
Pipelining and vector processing
Pipelining and vector processingPipelining and vector processing
Pipelining and vector processing
 

Semelhante a 05 multiply divide

ece552_08_integer_multiply.ppt
ece552_08_integer_multiply.pptece552_08_integer_multiply.ppt
ece552_08_integer_multiply.ppt
AnalBhandari
 
Binary Arithmetic
Binary ArithmeticBinary Arithmetic
Binary Arithmetic
gavhays
 
Integer Representation
Integer RepresentationInteger Representation
Integer Representation
gavhays
 

Semelhante a 05 multiply divide (20)

Multiplication algorithm, hardware and flowchart
Multiplication algorithm, hardware and flowchartMultiplication algorithm, hardware and flowchart
Multiplication algorithm, hardware and flowchart
 
2's complement
2's complement2's complement
2's complement
 
ece552_08_integer_multiply.ppt
ece552_08_integer_multiply.pptece552_08_integer_multiply.ppt
ece552_08_integer_multiply.ppt
 
ece552_08_integer_multiply.ppt
ece552_08_integer_multiply.pptece552_08_integer_multiply.ppt
ece552_08_integer_multiply.ppt
 
ece552_08_integer_multiply.ppt
ece552_08_integer_multiply.pptece552_08_integer_multiply.ppt
ece552_08_integer_multiply.ppt
 
09 Arithmetic
09  Arithmetic09  Arithmetic
09 Arithmetic
 
Booth Multiplication.pptx
Booth Multiplication.pptxBooth Multiplication.pptx
Booth Multiplication.pptx
 
Comp Arithmetic Basic.ppt
Comp Arithmetic Basic.pptComp Arithmetic Basic.ppt
Comp Arithmetic Basic.ppt
 
Binaty Arithmetic and Binary coding schemes
Binaty Arithmetic and Binary coding schemesBinaty Arithmetic and Binary coding schemes
Binaty Arithmetic and Binary coding schemes
 
Encoding Schemes for Multipliers
Encoding Schemes for MultipliersEncoding Schemes for Multipliers
Encoding Schemes for Multipliers
 
Unit ii ca--arithmetic
Unit ii ca--arithmeticUnit ii ca--arithmetic
Unit ii ca--arithmetic
 
CA UNIT II.pptx
CA UNIT II.pptxCA UNIT II.pptx
CA UNIT II.pptx
 
Binary Arithmetic
Binary ArithmeticBinary Arithmetic
Binary Arithmetic
 
chapter 3.pptx
chapter 3.pptxchapter 3.pptx
chapter 3.pptx
 
3810-08.ppt
3810-08.ppt3810-08.ppt
3810-08.ppt
 
Integer Representation
Integer RepresentationInteger Representation
Integer Representation
 
Binary Arithmetic
Binary ArithmeticBinary Arithmetic
Binary Arithmetic
 
Number system
Number systemNumber system
Number system
 
1's and 2's Complements
1's and 2's Complements 1's and 2's Complements
1's and 2's Complements
 
Chapter 2_Number system (EEEg4302).pdf
Chapter 2_Number system (EEEg4302).pdfChapter 2_Number system (EEEg4302).pdf
Chapter 2_Number system (EEEg4302).pdf
 

Mais de Piyush Rochwani (20)

Unit 2
Unit 2Unit 2
Unit 2
 
Unit 3
Unit 3Unit 3
Unit 3
 
Biometrics based key generation
Biometrics based key generationBiometrics based key generation
Biometrics based key generation
 
Serial transmission
Serial transmissionSerial transmission
Serial transmission
 
Sequential and combinational alu
Sequential and combinational alu Sequential and combinational alu
Sequential and combinational alu
 
Memory virtualization
Memory virtualizationMemory virtualization
Memory virtualization
 
Risc
RiscRisc
Risc
 
Raid
Raid Raid
Raid
 
Pipelining and co processor.
Pipelining and co processor.Pipelining and co processor.
Pipelining and co processor.
 
Paging and segmentation
Paging and segmentationPaging and segmentation
Paging and segmentation
 
Page replacement algorithms
Page replacement algorithmsPage replacement algorithms
Page replacement algorithms
 
8086 Microprocessor
8086 Microprocessor8086 Microprocessor
8086 Microprocessor
 
Dma
DmaDma
Dma
 
Control unit
Control unitControl unit
Control unit
 
Memory types
Memory typesMemory types
Memory types
 
Solid state solid state drives
Solid state solid state drivesSolid state solid state drives
Solid state solid state drives
 
Coa INTERUPT
Coa INTERUPTCoa INTERUPT
Coa INTERUPT
 
Cisc(a022& a023)
Cisc(a022& a023)Cisc(a022& a023)
Cisc(a022& a023)
 
06 floating point
06 floating point06 floating point
06 floating point
 
Air pollution in mumbai
Air pollution in mumbaiAir pollution in mumbai
Air pollution in mumbai
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

05 multiply divide

  • 1.  Paper and Pencil Example: Multiplicand 11002 = 12 Multiplier × 11012 = 13 1100 0000 1100 1100 Product 100111002 = 156  m-bit multiplicand × n-bit multiplier = (m+n)-bit product  Accomplished via shifting and addition  Consumes more time and more chip area than addition Unsigned Integer Multiplication Binary multiplication is easy 0 × multiplicand = 0 1 × multiplicand = multiplicand
  • 2. Sequential Unsigned Multiplication  Initialize Product = 0  Check each bit of the Multiplier  If Multiplier bit = 1 then Product = Product + Multiplicand  Rather than shifting the multiplicand to the left Instead, Shift the Product to the Right Has the same net effect and produces the same result Minimizes the hardware resources  One cycle per iteration (for each bit of the Multiplier)  Addition and shifting can be done simultaneously
  • 3.  Initialize HI = 0  Initialize LO = Multiplier  Final Product = HI and LO registers  Repeat for each bit of Multiplier Sequential Multiplication Hardware = 0 Start LO[0]? HI = HI + Multiplicand 32nd Repetition? Done = 1 No Yes HI = 0, LO=Multiplier Shift (Carry, HI, LO) Right 1 bit32-bit ALU Control 64 bits 32 bits write add LO[0] Multiplicand shift right 32 bits HI LO 32 bits carry
  • 4. Sequential Multiplier Example  Consider: 11002 × 11012 , Product = 100111002  4-bit multiplicand and multiplier are used in this example  4-bit adder produces a 5-bit sum (with carry) 1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 1 1 1 1 0 0 1 LO[0] = 0 => Do Nothing 1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 0 1 1 0 0 1 1 1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 0 1 1 0 0 1 1 0 1 1 0 0Shift Right (Carry, HI, LO) by 1 bit 1 0 0 1 1 1 0 0 2 1 1 0 0 0 0 0 0 1 1 0 1Initialize (HI = 0, LO = Multiplier)0 1 3 4 Multiplicand Product = HI, LOCarryIteration 0 1 1 0 0 1 1 0 1LO[0] = 1 => ADD + 0 1 1 1 1 0 0 1 1LO[0] = 1 => ADD + 1 0 0 1 1 1 0 0 1LO[0] = 1 => ADD +
  • 5. Next . . .  Unsigned Integer Multiplication  Signed Integer Multiplication  Faster Integer Multiplication  Integer Division  Integer Multiplication and Division in MIPS
  • 6. Signed Integer Multiplication  So far, we have dealt with unsigned integer multiplication  First Attempt:  Convert multiplier and multiplicand into positive numbers  If negative then obtain the 2's complement and remember the sign  Perform unsigned multiplication  Compute the sign of the product  If product sign < 0 then obtain the 2's complement of the product  Better Version:  Use the unsigned multiplication hardware  When shifting right, extend the sign of the product  If multiplier is negative, the last step should be a subtract
  • 7. Signed Multiplication (Pencil & Paper)  Case 1: Positive Multiplier Multiplicand 11002 = -4 Multiplier × 01012 = +5 11111100 111100 Product 111011002 = -20  Case 2: Negative Multiplier Multiplicand 11002 = -4 Multiplier × 11012 = -3 11111100 111100 00100 (2's complement of 1100) Product 000011002 = +12 Sign-extension Sign-extension
  • 8.  ALU produces 32-bit result + Sign bit  Check for overflow  No overflow  Extend sign-bit of result  Overflow  Invert sign bit Sequential Signed Multiplier = 0 Start LO[0]? First 31 iterations: HI = HI + Multiplicand Last iteration: HI = HI – Multiplicand 32nd Repetition? Done = 1 No Yes HI = 0, LO = Multiplier Shift Right (Sign, HI, LO) 1 bit32-bit ALU Control 64 bits 32 bits write add, sub LO[0] Multiplicand shift right 32 bits HI LO 32 bitssign
  • 9. Signed Multiplication Example  Consider: 11002 (-4) × 11012 (-3), Product = 000011002  Check for overflow: No overflow  Extend sign bit  Last iteration: add 2's complement of Multiplicand 1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 0 1 1 0 0 1 LO[0] = 0 => Do Nothing 1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 1 1 0 0 1 1 1 1 0 0Shift (Sign, HI, LO) right 1 bit 1 1 1 0 0 1 1 0 Shift (Sign, HI, LO) right 1 bit 0 0 0 0 1 1 0 0 2 1 1 0 0 0 0 0 0 1 1 0 1Initialize (HI = 0, LO = Multiplier)0 1 3 4 Multiplicand Product = HI, LOSignIteration 1 1 1 0 0 1 1 0 1LO[0] = 1 => ADD + 1 1 0 1 1 0 0 1 1LO[0] = 1 => ADD + 0 1 0 0 0 0 0 0 1 1 0 0 1LO[0] = 1 => SUB (ADD 2's compl) +
  • 10. Next . . .  Unsigned Integer Multiplication  Signed Integer Multiplication  Faster Integer Multiplication  Integer Division  Integer Multiplication and Division in MIPS
  • 11. Faster Integer Multiplier Uses Multiple Adders (Cost vs. Performance)  Can be pipelined
  • 12. Using Multiple Adders  32-bit adder for each bit of the multiplier  AND multiplicand with each bit of multiplier  Product = accumulated shifted sum  Each adder produces a 33-bit output  Most significant bit is a carry bit  Array multiplier can be optimized  Additions can be done in parallel  Multiple-level tree reduction to produce final product  Carry save adders reduce delays
  • 13. Carry Save Adders  Used when adding multiple numbers (as in multipliers)  All the bits of a carry-save adder work in parallel  The carry does not propagate as in a carry-propagate adder  This is why a carry-save is faster than a carry-propagate adder  A carry-save adder has 3 inputs and produces two outputs  It adds 3 numbers and produces partial sum and carry bits Carry-Propagate Adder + a0 b0 s0 + a1 b1 s1 + a31 b31 s31 . . .cout cin Carry-Save Adder . . .+ a31 b31 s'31c'31 c31 + a1 b1 s'1c'1 c1 + a0 b0 s'0c'0 c0
  • 14. Tree Multiplier - 1 of 2  Suppose we want to multiply two numbers A and B  Example on 4-bit numbers: A = a3 a2 a1 a0 and B = b3 b2 b1 b0  Step 1: AND (multiply) each bit of A with each bit of B  Requires n2 AND gates and produces n2 product bits  Position of aibj = (i+j). For example, Position of a2b3 = 2+3 = 5 a0b0a1b0a2b0a3b0 a0b1a1b1a2b1a3b1 a0b2a1b2a2b2a3b2 a0b3a1b3a2b3a3b3 A × B
  • 15. Tree Multiplier – 2 of 2 Step 2: Use carry save adders to add the partial products  Reduce the partial products to just two numbers Step 3: Add last two numbers using a carry-propagate adder P0 + a2b0 a1b1 ++ + a3b0 a2b1 a0b0 + a1b0 a0b1 + + +++ + a3b1 a2b2 + a3b2 a2b3 a3b3 a1b3 a0b3 a1b2 a0b2 P1P2P3P4P5P6P7 Carry Save Adder Carry Propagate Adder
  • 16. Next . . .  Unsigned Integer Multiplication  Signed Integer Multiplication  Faster Integer Multiplication  Integer Division  Integer Multiplication and Division in MIPS
  • 17. Try to see how big a number can be subtracted, creating a digit of the quotient on each attempt = 19 Quotient Divisor 10112 110110012 = 217 Dividend -1011 10 101 1010 10100 -1011 1001 10011 -1011 10002 = 8 Remainder Unsigned Division (Paper & Pencil) Binary division is accomplished via shifting and subtraction Dividend = Quotient × Divisor + Remainder 217 = 19 × 11 + 8 100112
  • 18. Sequential Division  Uses two registers: HI and LO  Initialize: HI = Remainder = 0 and LO = Dividend  Shift (HI, LO) LEFT by 1 bit (also Shift Quotient LEFT)  Shift the remainder and dividend registers together LEFT  Has the same net effect of shifting the divisor RIGHT  Compute: Difference = Remainder – Divisor  If (Difference ≥ 0) then  Remainder = Difference  Set Least significant Bit of Quotient  Observation to Reduce Hardware:  LO register can be also used to store the computed Quotient
  • 19. Sequential Division Hardware  Initialize:  HI = 0, LO = Dividend  Results:  HI = Remainder  LO = Quotient Start Difference? 2. HI = Remainder = Difference Set least significant bit of LO 32nd Repetition? Done < 0≥ 0 No Yes 1. Shift (HI, LO) Left Difference = HI – Divisor shift left Divisor 32-bit ALU LO 32 bits write sub 32 bits Difference sign set lsb HI 32 bits Control
  • 20. 2: Diff < 0 => Do Nothing Unsigned Integer Division Example  Example: 11102 / 00112 (4-bit dividend & divisor)  Result Quotient = 01002 and Remainder = 00102  4-bit registers for Remainder and Divisor (4-bit ALU) 2: Rem = Diff, set lsb of LO 1 0 0 10 0 0 0 2: Diff < 0 => Do Nothing 2: Diff < 0 => Do Nothing 2 0 0 0 0 1 1 1 0Initialize0 1 3 4 HI DifferenceLOIteration 0 0 1 1 Divisor 1 1 1 01: Shift Left, Diff = HI - Divisor 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 01: Shift Left, Diff = HI - Divisor 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 01: Shift Left, Diff = HI - Divisor 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 11: Shift Left, Diff = HI - Divisor 0 0 1 0 0 1 0 0 0 0 1 1
  • 21. Signed Integer Division  Simplest way is to remember the signs  Convert the dividend and divisor to positive  Obtain the 2's complement if they are negative  Do the unsigned division  Compute the signs of the quotient and remainder  Quotient sign = Dividend sign XOR Divisor sign  Remainder sign = Dividend sign  Negate the quotient and remainder if their sign is negative  Obtain the 2's complement to convert them to negative
  • 22. Signed Integer Division Examples 1. Positive Dividend and Positive Divisor  Example: +17 / +3 Quotient = +5 Remainder = +2 1. Positive Dividend and Negative Divisor  Example: +17 / –3 Quotient = –5 Remainder = +2 1. Negative Dividend and Positive Divisor  Example: –17 / +3 Quotient = –5 Remainder = –2 1. Negative Dividend and Negative Divisor  Example: –17 / –3 Quotient = +5 Remainder = –2 The following equation must always hold: Dividend = Quotient × Divisor + Remainder
  • 23. Next . . .  Unsigned Integer Multiplication  Signed Integer Multiplication  Faster Multiplication  Integer Division  Integer Multiplication and Division in MIPS
  • 24. Integer Multiplication in MIPS  Multiply instructions  mult $s1,$s2 Signed multiplication  multu $s1,$s2 Unsigned multiplication  32-bit multiplication produces a 64-bit Product  Separate pair of 32-bit registers  HI = high-order 32-bit of product  LO = low-order 32-bit of product  MIPS also has a special mul instruction  mul $s0,$s1,$s2 $s0 = $s1 × $s2  Put low-order 32 bits into destination register  HI & LO are undefined Multiply Divide $0 HI LO $1 .. $31
  • 25. Integer Division in MIPS  Divide instructions  div $s1,$s2 Signed division  divu $s1,$s2 Unsigned division  Division produces quotient and remainder  Separate pair of 32-bit registers  HI = 32-bit remainder  LO = 32-bit quotient  If divisor is 0 then result is unpredictable  Moving data from HI/LO to MIPS registers  mfhi Rd (move from HI to Rd)  mflo Rd (move from LO to Rd) Multiply Divide $0 HI LO $1 .. $31
  • 26. Integer Multiply/Divide Instructions Instruction Meaning Format mult Rs, Rt Hi, Lo = Rs × Rt op6 = 0 Rs5 Rt5 0 0 0x18 multu Rs, Rt Hi, Lo = Rs × Rt op6 = 0 Rs5 Rt5 0 0 0x19 mul Rd, Rs, Rt Rd = Rs × Rt 0x1c Rs5 Rt5 Rd5 0 0x02 div Rs, Rt Hi, Lo = Rs / Rt op6 = 0 Rs5 Rt5 0 0 0x1a divu Rs, Rt Hi, Lo = Rs / Rt op6 = 0 Rs5 Rt5 0 0 0x1b mfhi Rd Rd = Hi op6 = 0 0 0 Rd5 0 0x10 mflo Rd Rd = Lo op6 = 0 0 0 Rd5 0 0x12  Signed arithmetic: mult, div (Rs and Rt are signed)  LO = 32-bit low-order and HI = 32-bit high-order of multiplication  LO = 32-bit quotient and HI = 32-bit remainder of division  Unsigned arithmetic: multu, divu (Rs and Rt are unsigned)  NO arithmetic exception can occur
  • 27. Integer to String Conversion  Objective: convert an unsigned 32-bit integer to a string  How to obtain the decimal digits of the number?  Divide the number by 10, Remainder = decimal digit (0 to 9)  Convert decimal digit into its ASCII representation ('0' to '9')  Repeat the division until the quotient becomes zero  Digits are computed backwards from least to most significant  Example: convert 2037 to a string  Divide 2037/10 quotient = 203 remainder = 7 char = '7'  Divide 203/10 quotient = 20 remainder = 3 char = '3'  Divide 20/10 quotient = 2 remainder = 0 char = '0'  Divide 2/10 quotient = 0 remainder = 2 char = '2'
  • 28. Integer to String Procedure #-------------------------------------------------------------- # int2str: Converts an unsigned integer into a string # Input: $a0 = unsigned integer # In/Out: $a1 = address of string buffer (12 bytes) #-------------------------------------------------------------- int2str: move $t0, $a0 # $t0 = dividend = unsigned integer li $t1, 10 # $t1 = divisor = 10 addiu $a1, $a1, 11 # start at end of string buffer sb $zero, 0($a1) # store a NULL byte convert: divu $t0, $t1 # LO = quotient, HI = remainder mflo $t0 # $t0 = quotient mfhi $t2 # $t2 = remainder addiu $t2, $t2, 0x30 # convert digit to a character addiu $a1, $a1, -1 # point to previous byte sb $t2, 0($a1) # store digit character bnez $t0, convert # loop if quotient is not 0 jr $ra # return to caller