Integer Multiplication and Division

Similar documents
Tailoring the 32-Bit ALU to MIPS

Homework 3. Assigned on 02/15 Due time: midnight on 02/21 (1 WEEK only!) B.2 B.11 B.14 (hint: use multiplexors) CSCI 402: Computer Architectures

COMP 303 Computer Architecture Lecture 6

NUMBER OPERATIONS. Mahdi Nazm Bojnordi. CS/ECE 3810: Computer Organization. Assistant Professor School of Computing University of Utah

361 div.1. Computer Architecture EECS 361 Lecture 7: ALU Design : Division

Lecture 8: Addition, Multiplication & Division

Data Representation COE 301. Computer Organization Prof. Muhamed Mudawar

CPS 104 Computer Organization and Programming

Fast Arithmetic. Philipp Koehn. 19 October 2016

Outline. EEL-4713 Computer Architecture Multipliers and shifters. Deriving requirements of ALU. MIPS arithmetic instructions

COMPUTER ORGANIZATION AND DESIGN

Math in MIPS. Subtracting a binary number from another binary number also bears an uncanny resemblance to the way it s done in decimal.

Computer Organization and Structure. Bing-Yu Chen National Taiwan University

EECS150 - Digital Design Lecture 13 - Combinational Logic & Arithmetic Circuits Part 3

MIPS Integer ALU Requirements

EEC 483 Computer Organization

Integer Arithmetic. Jinkyu Jeong Computer Systems Laboratory Sungkyunkwan University

Review: MIPS Organization

MIPS Instruction Format

Overview. Introduction to the MIPS ISA. MIPS ISA Overview. Overview (2)

Lecture Topics. Announcements. Today: Integer Arithmetic (P&H ) Next: The MIPS ISA (P&H ) Consulting hours. Milestone #1 (due 1/26)

Arithmetic for Computers

Chapter 3 Arithmetic for Computers. ELEC 5200/ From P-H slides

Number Systems and Computer Arithmetic

Number Systems and Their Representations

Divide: Paper & Pencil

Signed Multiplication Multiply the positives Negate result if signs of operand are different

ECE331: Hardware Organization and Design

ECE260: Fundamentals of Computer Engineering

MIPS Functions and the Runtime Stack

Chapter 3 Arithmetic for Computers (Part 2)

EEM 486: Computer Architecture. Lecture 2. MIPS Instruction Set Architecture

King Fahd University of Petroleum and Minerals College of Computer Science and Engineering Computer Engineering Department

Review of Last lecture. Review ALU Design. Designing a Multiplier Shifter Design Review. Booth s algorithm. Today s Outline

Thomas Polzer Institut für Technische Informatik

ECE331: Hardware Organization and Design

ECE331: Hardware Organization and Design

Chapter 3 Arithmetic for Computers

Examples of branch instructions

MIPS Instruction Set

Computer Architecture. The Language of the Machine

More complicated than addition. Let's look at 3 versions based on grade school algorithm (multiplicand) More time and more area

Chapter 3. Arithmetic Text: P&H rev

M2 Instruction Set Architecture

Flow of Control -- Conditional branch instructions

COMPUTER ARITHMETIC (Part 1)

ECE232: Hardware Organization and Design. Computer Organization - Previously covered

Chapter Two MIPS Arithmetic

Chapter 3 Arithmetic for Computers

Integer Multiplication and Division

Computer Architecture. Chapter 3: Arithmetic for Computers

Computer Science 61C Spring Friedland and Weaver. Instruction Encoding

CSc 256 Midterm 2 Fall 2011

SPIM Instruction Set

ECE 30 Introduction to Computer Engineering

CS/COE0447: Computer Organization

CS/COE0447: Computer Organization

Mark Redekopp, All rights reserved. EE 357 Unit 11 MIPS ISA

MIPS Reference Guide

Module 2: Computer Arithmetic

Arithmetic Logic Unit

Reduced Instruction Set Computer (RISC)

CS/COE 0447 Example Problems for Exam 2 Spring 2011

Computer Architecture Chapter 3. Fall 2005 Department of Computer Science Kent State University

Part III The Arithmetic/Logic Unit. Oct Computer Architecture, The Arithmetic/Logic Unit Slide 1

CPS311 - COMPUTER ORGANIZATION. A bit of history

MIPS Assembly Language

5DV118 Computer Organization and Architecture Umeå University Department of Computing Science Stephen J. Hegner. Topic 3: Arithmetic

Reduced Instruction Set Computer (RISC)

COE 202: Digital Logic Design Number Systems Part 2. Dr. Ahmad Almulhem ahmadsm AT kfupm Phone: Office:

CSE 141 Computer Architecture Summer Session Lecture 3 ALU Part 2 Single Cycle CPU Part 1. Pramod V. Argade

Boolean Algebra. Chapter 3. Boolean Algebra. Chapter 3 Arithmetic for Computers 1. Fundamental Boolean Operations. Arithmetic for Computers

Week 7: Assignment Solutions

Arithmetic. Chapter 3 Computer Organization and Design

CSc 256 Midterm (green) Fall 2018

Chapter 3: Arithmetic for Computers

Chapter 3. Arithmetic for Computers

Q1: /30 Q2: /25 Q3: /45. Total: /100

COMPUTER ORGANIZATION AND DESIGN. 5 th Edition. The Hardware/Software Interface. Chapter 3. Arithmetic for Computers

CENG 3420 Lecture 05: Arithmetic and Logic Unit

We are quite familiar with adding two numbers in decimal

Arithmetic for Computers. Hwansoo Han

CS 61C: Great Ideas in Computer Architecture MIPS Instruction Formats

ICS DEPARTMENT ICS 233 COMPUTER ARCHITECTURE & ASSEMBLY LANGUAGE. Midterm Exam. First Semester (141) Time: 1:00-3:30 PM. Student Name : _KEY

The MIPS Instruction Set Architecture

MIPS ISA. 1. Data and Address Size 8-, 16-, 32-, 64-bit 2. Which instructions does the processor support

carry in carry 1101 carry carry

Computer Architecture Set Four. Arithmetic

Chapter 3. Arithmetic for Computers

Sparse Notes on an MIPS Processor s Architecture and its Assembly Language

CENG3420 L05: Arithmetic and Logic Unit

CSc 256 Midterm 2 Spring 2012

MIPS Assembly Language Programming

ECE260: Fundamentals of Computer Engineering

EE260: Logic Design, Spring n Integer multiplication. n Booth s algorithm. n Integer division. n Restoring, non-restoring

CPE 335 Computer Organization. MIPS Arithmetic Part I. Content from Chapter 3 and Appendix B

Floating Point COE 308. Computer Architecture Prof. Muhamed Mudawar. Computer Engineering Department King Fahd University of Petroleum and Minerals

ECE 2035 Programming HW/SW Systems Fall problems, 7 pages Exam Two 23 October 2013

CS 110 Computer Architecture MIPS Instruction Formats

Lecture 13: (Integer Multiplication and Division) FLOATING POINT NUMBERS

Transcription:

Integer Multiplication and Division COE 301 Computer Organization Prof. Muhamed Mudawar College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals

Presentation Outline Unsigned Integer Multiplication Signed Integer Multiplication Faster Integer Multiplication Integer Division Integer Multiplication and Division in MIPS Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 2

Unsigned Integer Multiplication Paper and Pencil Example: Multiplicand 1100 2 = 12 Multiplier 1101 2 = 13 1100 0000 1100 1100 Binary multiplication is easy 0 multiplicand = 0 1 multiplicand = multiplicand Product 10011100 2 = 156 n-bit multiplicand n-bit multiplier = (2n)-bit product Accomplished via shifting and addition Consumes more time and more chip area than addition Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 3

Unsigned Sequential 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, 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 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 4

Unsigned Sequential Multiplier Initialize: HI = 0 Initialize: LO = Multiplier Final Product in HI and LO registers Start HI = 0, LO=Multiplier Repeat for each bit of Multiplier = 1 LO[0]? = 0 32 bits Multiplicand 32 bits Carry, Sum = HI + Multiplicand 32-bit ALU add HI, LO = Shift Right (Carry, Sum, LO) Carry Sum HI 32 bits 64 bits LO shift right write Control 32 nd Repetition? Done Yes No LO[0] Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 5

Sequential Multiplier Example Consider: 1100 2 1101 2, Product = 10011100 2 4-bit multiplicand and multiplier are used in this example 4-bit adder produces a 4-bit Sum + Carry bit Iteration 0 1 2 3 4 Initialize (HI = 0, LO = Multiplier) Shift Right (Carry, Sum, LO) by 1 bit 1 1 0 0 0 1 1 0 0 1 1 0 LO[0] = 0 => NO addition Multiplicand LO[0] = 1 => ADD + 1 1 0 0 0 0 0 0 1 1 0 1 Shift Right (HI, LO) by 1 bit 1 1 0 0 0 0 1 1 0 0 1 1 LO[0] = 1 => ADD + Carry Product = HI, LO 0 1 1 0 0 1 1 0 1 Shift Right (Carry, Sum, LO) by 1 bit 1 1 0 0 0 1 1 1 1 0 0 1 LO[0] = 1 => ADD + 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 Shift Right (Carry, Sum, LO) by 1 bit 1 1 0 0 1 0 0 1 1 1 0 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 6

Next... Unsigned Integer Multiplication Signed Integer Multiplication Faster Integer Multiplication Integer Division Integer Multiplication and Division in MIPS Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 7

First attempt: Signed Integer Multiplication 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 Drawback: additional steps to compute the 2's complement 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 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 8

Signed Multiplication (Paper & Pencil) Case 1: Positive Multiplier Multiplicand 1100 2 = -4 Multiplier 0101 2 = +5 Sign-extension 11111100 111100 Product 11101100 2 = -20 Case 2: Negative Multiplier Multiplicand 1100 2 = -4 Multiplier 1101 2 = -3 Sign-extension 11111100 111100 00100 (2's complement of 1100) Product 00001100 2 = +12 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 9

Signed Sequential Multiplier ALU produces: 32-bit sum + sign bit Sign bit can be computed: Start HI = 0, LO = Multiplier No overflow: sign = sum[31] If Overflow: sign = ~sum[31] = 1 LO[0]? = 0 32 bits Multiplicand 32 bits 31 iterations: Sign, Sum = HI + Multiplicand Last iteration: Sign, Sum = HI Multiplicand 32-bit ALU add, sub HI, LO = Shift Right (Sign, Sum, LO) sign sum 32 bits shift right 32 nd Repetition? No HI 64 bits LO write Control Done Yes LO[0] Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 10

Signed Multiplication Example Consider: 1100 2 (-4) 1101 2 (-3), Product = 00001100 2 Check for overflow: No overflow Extend sign bit Last iteration: add 2's complement of Multiplicand Iteration 0 1 2 3 4 Initialize (HI = 0, LO = Multiplier) Shift Right (Sign, Sum, LO) by 1 bit 1 1 0 0 1 1 1 0 0 1 1 0 LO[0] = 0 => NO addition Multiplicand LO[0] = 1 => ADD + 1 1 0 0 0 0 0 0 1 1 0 1 1 1 0 0 Shift Right (Sign, HI, LO) by 1 bit 1 1 1 1 0 0 1 1 LO[0] = 1 => ADD + Sign Product = HI, LO 1 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 1 1 Shift Right (Sign, Sum, LO) by 1 bit 1 1 0 0 1 1 0 1 1 0 0 1 LO[0] = 1 => SUB (ADD 2's compl) 0 1 0 0 + 0 0 0 0 1 1 0 0 1 Shift Right (Sign, Sum, LO) by 1 bit 0 0 0 0 1 1 0 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 11

Next... Unsigned Integer Multiplication Signed Integer Multiplication Faster Integer Multiplication Integer Division Integer Multiplication and Division in MIPS Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 12

Faster Multiplier Suppose we want to multiply two numbers A and B Example on 4-bit numbers: A = a 3 a 2 a 1 a 0 and B = b 3 b 2 b 1 b 0 Step 1: AND (multiply) each bit of A with each bit of B Requires n 2 AND gates and produces n 2 product bits Position of a i b j = (i+j). For example, Position of a 2 b 3 = 2+3 = 5 A B a 3 b 0 a 2 b 0 a 1 b 0 a 0 b 0 a 3 b 1 a 2 b 1 a 1 b 1 a 0 b 1 a 3 b 2 a 2 b 2 a 1 b 2 a 0 b 2 a 3 b 3 a 2 b 3 a 1 b 3 a 0 b 3 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 13

Adding the Partial Products Step 2: Add the partial products The partial products are shifted and added to compute the product P The partial products can be added in parallel Different implementations are possible 4-bit Multiplicand A 3 A 2 A 1 A 0 4-bit Multiplier B 3 B 2 B 1 B 0 Partial Products are shifted and added Can be added in parallel A 3 B 0 A 2 B 0 A 1 B 0 A 0 B 0 A 3 B 1 A 2 B 1 A 1 B 1 A 0 B 1 A 3 B 2 A 2 B 2 A 1 B 2 A 0 B 2 A 3 B 3 A 2 B 3 A 1 B 3 A 0 B 3 8-bit Product P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 14

4-bit 4-bit Binary Multiplier 16 AND gates, Three 4-bit adders, a half-adder, and an OR gate B 3 B 2 B 1 B 0 A 3 A 2 A 1 A 0 A 3 A 2 A 1 A 0 A 3 A 2 A 1 A 0 A 3 A 2 A 1 A 0 0 0 carry 4-bit Adder carry 4-bit Adder Half Adder carry 4-bit Adder P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 15

Carry Save Adders A n-bit carry-save adder produces two n-bit outputs n-bit partial sum bits and n-bit carry bits All the n 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 Useful when adding multiple numbers (as in multipliers) a 31 b 31 a 1 b 1 a 0 b 0 a 31 b 31 c 31 a 1 b 1 c 1 a 0 b 0 c 0 c out +... s 31 + s 1 + s 0 c in c' 31 + s' 31... c' 1 + s' 1 c' 0 + s' 0 Carry-Propagate Adder Carry-Save Adder Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 16

Carry-Save Adders in a Multiplier ADD the product bits vertically using Carry-Save adders Full Adder adds three vertical bits Half Adder adds two vertical bits Each adder produces a partial sum and a carry Use Carry-propagate adder for final addition A B a 3 b 0 a 2 b 0 a 1 b 0 a 0 b 0 a 3 b 1 a 2 b 1 a 1 b 1 a 0 b 1 a 3 b 2 a 2 b 2 a 1 b 2 a 0 b 2 a 3 b 3 a 2 b 3 a 1 b 3 a 0 b 3 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 17

Carry-Save Adders in a Multiplier Step 1: Use carry save adders to add the partial products Reduce the partial products to just two numbers Step 2: Use carry-propagate adder to add last two numbers a 3 b 1 a 2 b 2 a 3 b 0 a 2 b 1 a 2 b 0 a 1 b 1 a 1 b 0 a 0 b 1 a 0 b 0 FA a 1 b 3 FA a 1 b 2 a 0 b 2 FA HA Carry Save a 3 b 2 FA a 2 b 3 HA FA a 0 b 3 HA Carry Save Adder a 3 b 3 FA FA FA HA Carry Propagate Adder P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 18

Summary of a Fast Multiplier A fast n-bit n-bit multiplier requires: n 2 AND gates to produce n 2 product bits in parallel Many adders to perform additions in parallel Uses carry-save adders to reduce delays Higher cost (more chip area) than sequential multiplier Higher performance (faster) than sequential multiplier Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 19

Next... Unsigned Integer Multiplication Signed Integer Multiplication Faster Integer Multiplication Integer Division Integer Multiplication and Division in MIPS Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 20

Unsigned Division (Paper & Pencil) 10011 2 = 19 Quotient Divisor 1011 2 11011001 2 = 217 Dividend Dividend = Quotient Divisor + Remainder 217 = 19 11 + 8-1011 10 101 1010 10100-1011 1001 10011-1011 Check how big a number can be subtracted, creating a bit of the quotient on each attempt Binary division is done via shifting and subtraction 1000 2 = 8 Remainder Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 21

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 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 22

Sequential Division Hardware Initialize: HI = 0, LO = Dividend Results: HI = Remainder LO = Quotient Start 1. Shift (HI, LO) Left Difference = HI Divisor 0 Difference? < 0 Divisor 32 bits 2. HI = Remainder = Difference Set least significant bit of LO Difference 32 bits 32-bit ALU HI LO 32 bits sub sign write shift left Control 32 nd Repetition? Done Yes No set lsb Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 23

Unsigned Integer Division Example Example: 1110 2 / 0100 2 (4-bit dividend & divisor) Result Quotient = 0011 2 and Remainder = 0010 2 4-bit registers for Remainder and Divisor (4-bit ALU) Iteration 0 1 2 3 4 Initialize Diff < 0 => Do Nothing HI LO 0 0 0 0 1 1 1 0 Divisor 0 1 0 0 Shift Left, Diff = HI - Divisor 0 0 0 1 1 1 0 0 0 1 0 0 Shift Left, Diff = HI - Divisor 0 0 1 1 1 0 0 0 0 1 0 0 Diff < 0 => Do Nothing Shift Left, Diff = HI - Divisor 0 1 1 1 0 0 0 0 0 1 0 0 HI = Diff, set lsb of LO 0 0 1 1 0 0 0 1 Shift Left, Diff = HI - Divisor 0 1 1 0 0 0 1 0 0 1 0 0 HI = Diff, set lsb of LO 0 0 1 0 0 0 1 1 Difference < 0 < 0 0 0 1 1 0 0 1 0 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 24

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 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 25

Signed Integer Division Examples 1. Positive Dividend and Positive Divisor Example: +17 / +3 Quotient = +5 Remainder = +2 2. Positive Dividend and Negative Divisor Example: +17 / 3 Quotient = 5 Remainder = +2 3. Negative Dividend and Positive Divisor Example: 17 / +3 Quotient = 5 Remainder = 2 4. Negative Dividend and Negative Divisor Example: 17 / 3 Quotient = +5 Remainder = 2 The following equation must always hold: Dividend = Quotient Divisor + Remainder Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 26

Next... Unsigned Integer Multiplication Signed Integer Multiplication Faster Integer Multiplication Integer Division Integer Multiplication and Division in MIPS Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 27

Integer Multiplication in MIPS Multiply instructions mult Rs, Rt multu Rs, Rt Signed multiplication 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 $0 $1. $31 Multiply Divide mul Rd, Rs, Rt Rd = Rs Rt HI LO Copy LO into destination register Rd Useful when the product is small (32 bits) and HI is not needed Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 28

Divide instructions Integer Division in MIPS div Rs, Rt divu Rs, Rt Signed division 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 $0 $1. $31 Multiply Divide Moving data from HI, LO to MIPS registers mfhi Rd (Rd = HI) mflo Rd (Rd = LO) HI LO Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 29

Integer Multiply and Divide Instructions Instruction Meaning Format mult Rs, Rt HI, LO=Rs s Rt Op = 0 Rs Rt 0 0 0x18 multu Rs,Rt HI, LO=Rs u Rt Op = 0 Rs Rt 0 0 0x19 mul Rd,Rs, Rt Rd = Rs s Rt 0x1c Rs Rt Rd 0 2 div Rs,Rt HI, LO=Rs / s Rt Op = 0 Rs Rt 0 0 0x1a divu Rs,Rt HI, LO=Rs / u Rt Op = 0 Rs Rt 0 0 0x1b mfhi Rd Rd = HI Op = 0 0 0 Rd 0 0x10 mflo Rd Rd = LO Op = 0 0 0 Rd 0 0x12 mthi Rs HI = Rs Op = 0 Rs 0 0 0 0x11 mtlo Rs LO = Rs Op = 0 Rs 0 0 0 0x13 s = Signed multiplication, u = Unsigned multiplication / s = Signed division, / u = Unsigned division NO arithmetic exception can occur Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 30

String to Integer Conversion Consider the conversion of string "91052" into an integer '9' '1' '0' '5' '2' How to convert the string into an integer? Initialize: sum = 0 Load each character of the string into a register Check if the character is in the range: '0' to '9' Convert the character into a digit in the range: 0 to 9 Compute: sum = sum * 10 + digit Repeat until end of string or a non-digit character is encountered To convert "91052", initialize sum to 0 then sum = 9, then 91, then 910, then 9105, then 91052 Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 31

String to Integer Conversion Function #----------------------------------------------------------- # str2int: Convert a string of digits into unsigned integer # Input: $a0 = address of null terminated string # Output: $v0 = unsigned integer value #----------------------------------------------------------- str2int: li $v0, 0 # Initialize: $v0 = sum = 0 li $t0, 10 # Initialize: $t0 = 10 L1: lb $t1, 0($a0) # load $t1 = str[i] blt $t1, '0', done # exit loop if ($t1 < '0') bgt $t1, '9', done # exit loop if ($t1 > '9') addiu $t1, $t1, -48 # Convert character to digit mul $v0, $v0, $t0 # $v0 = sum * 10 addu $v0, $v0, $t1 # $v0 = sum * 10 + digit addiu $a0, $a0, 1 # $a0 = address of next char j L1 # loop back done: jr $ra # return to caller Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 32

Integer to String Conversion Convert an unsigned 32-bit integer into 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 Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 33

Integer to String Conversion Function #---------------------------------------------------------- # int2str: Converts an unsigned integer into a string # Input: $a0 = value, $a1 = buffer address (12 bytes) # Output: $v0 = address of converted string in buffer #---------------------------------------------------------- int2str: li $t0, 10 # $t0 = divisor = 10 addiu $v0, $a1, 11 # start at end of buffer sb $zero, 0($v0) # store a NULL character L2: divu $a0, $t0 # LO = value/10, HI = value%10 mflo $a0 # $a0 = value/10 mfhi $t1 # $t1 = value%10 addiu $t1, $t1, 48 # convert digit into ASCII addiu $v0, $v0, -1 # point to previous byte sb $t1, 0($v0) # store character in memory bnez $a0, L2 # loop if value is not 0 jr $ra # return to caller Integer Multiplication and Division COE 301 / ICS 233 Computer Organization KFUPM Muhamed Mudawar slide 34