Integer Multiplication and Division ICS 233 Computer Architecture and Assembly Language Dr. Aiman El-Maleh College of Computer Sciences and Engineering.

Slides:



Advertisements
Similar presentations
Arithmetic for Computers
Advertisements

Datorteknik IntegerMulDiv bild 1 MIPS mul/div instructions Multiply: mult $2,$3Hi, Lo = $2 x $3;64-bit signed product Multiply unsigned: multu$2,$3Hi,
CMPE 325 Computer Architecture II
Computer Architecture ECE 361 Lecture 6: ALU Design
Prof. John Nestor ECE Department Lafayette College Easton, Pennsylvania ECE Computer Organization Lecture 8 - Multiplication.
THE ARITHMETIC-LOGIC UNIT. BINARY HALF-ADDER BINARY HALF-ADDER condt Half adder InputOutput XYSC
Division CPSC 321 Computer Architecture Andreas Klappenecker.
Lecture 15: Computer Arithmetic Today’s topic –Division 1.
CMPT 334 Computer Organization Chapter 3 Arithmetic for Computers [Adapted from Computer Organization and Design 5 th Edition, Patterson & Hennessy, ©
Lecture Objectives: 1)Perform binary division of two numbers. 2)Define dividend, divisor, quotient, and remainder. 3)Explain how division is accomplished.
Princess Sumaya Univ. Computer Engineering Dept. Chapter 3: IT Students.
CML CML CS 230: Computer Organization and Assembly Language Aviral Shrivastava Department of Computer Science and Engineering School of Computing and Informatics.
Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 1 Multiplicand and HI are sign-extended  Sign is the sign of the result Signed.
Chapter 3 Arithmetic for Computers. Multiplication More complicated than addition accomplished via shifting and addition More time and more area Let's.
361 div.1 Computer Architecture ECE 361 Lecture 7: ALU Design : Division.
Lecture 9 Sept 28 Chapter 3 Arithmetic for Computers.
ECE 15B Computer Organization Spring 2010 Dmitri Strukov Lecture 4: Arithmetic / Data Transfer Instructions Partially adapted from Computer Organization.
Arithmetic IV CPSC 321 Andreas Klappenecker. Any Questions?
Computer Organization Multiplication and Division Feb 2005 Reading: Portions of these slides are derived from: Textbook figures © 1998 Morgan Kaufmann.
Chap 3.3~3.5 Construction an Arithmetic Logic Unit (ALU) Jen-Chang Liu, Spring 2006.
Integer Multiplication and Division
1 Lecture 8: Binary Multiplication & Division Today’s topics:  Addition/Subtraction  Multiplication  Division Reminder: get started early on assignment.
ECE 15B Computer Organization Spring 2010 Dmitri Strukov Lecture 6: Logic/Shift Instructions Partially adapted from Computer Organization and Design, 4.
Data Representation ICS 233
COE 308: Computer Architecture (T041) Dr. Marwan Abu-Amara Integer & Floating-Point Arithmetic (Appendix A, Computer Architecture: A Quantitative Approach,
DIGITAL SYSTEMS TCE1111 Representation and Arithmetic Operations with Signed Numbers Week 6 and 7 (Lecture 1 of 2)
ECE 232 L9.Mult.1 Adapted from Patterson 97 ©UCBCopyright 1998 Morgan Kaufmann Publishers ECE 232 Hardware Organization and Design Lecture 9 Computer Arithmetic.
Lecture Objectives: 1)Explain the relationship between addition and subtraction with twos complement numbering systems 2)Explain the concept of numeric.
1 Arithmetic and Logical Operations - Part II. Unsigned Numbers Addition in unsigned numbers is the same regardless of the base. Given a pair of bit sequences.
Lec 13Systems Architecture1 Systems Architecture Lecture 13: Integer Multiplication and Division Jeremy R. Johnson Anatole D. Ruslanov William M. Mongan.
King Fahd University of Petroleum and Minerals King Fahd University of Petroleum and Minerals Computer Engineering Department Computer Engineering Department.
Multiplication of signed-operands
July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.
Lecture 6: Multiply, Shift, and Divide
Chapter 3 Arithmetic for Computers (Integers). Florida A & M University - Department of Computer and Information Sciences Arithmetic for Computers Operations.
Conversion to Larger Number of Bits Ex: Immediate Field (signed 16 bit) to 32 bit Positive numbers have implied 0’s to the left. So, put 16 bit number.
Cs 152 l6 Multiply 1 DAP Fa 97 © U.C.B. ECE Computer Architecture Lecture Notes Multiply, Shift, Divide Shantanu Dutt Univ. of Illinois at.
05/03/2009CA&O Lecture 8,9,10 By Engr. Umbreen sabir1 Computer Arithmetic Computer Engineering Department.
Integer Multiplication and Division
Integer Multiplication and Division ICS 233 Computer Architecture and Assembly Language Dr. Aiman El-Maleh College of Computer Sciences and Engineering.
Csci 136 Computer Architecture II – Multiplication and Division
Mohamed Younis CMCS 411, Computer Architecture 1 CMSC Computer Architecture Lecture 11 Performing Division March 5,
EI 209 Chapter 3.1CSE, 2015 EI 209 Computer Organization Fall 2015 Chapter 3: Arithmetic for Computers Haojin Zhu ( )
Division Check for 0 divisor Long division approach – If divisor ≤ dividend bits 1 bit in quotient, subtract – Otherwise 0 bit in quotient, bring down.
CDA 3101 Spring 2016 Introduction to Computer Organization
Division Quotient Divisor Dividend – – Remainder.
Integer Multiplication and Division COE 301 Computer Organization Dr. Muhamed Mudawar College of Computer Sciences and Engineering King Fahd University.
Integer Operations Computer Organization and Assembly Language: Module 5.
Integer Multiplication and Division ICS 233 Computer Architecture & Assembly Language Prof. Muhamed Mudawar College of Computer Sciences and Engineering.
1 Lecture 5Multiplication and Division ECE 0142 Computer Organization.
More Binary Arithmetic - Multiplication
Computer Architecture & Operations I
Computer Architecture & Operations I
Integer Multiplication and Division
MIPS mul/div instructions
Single Bit ALU 3 R e s u l t O p r a i o n 1 C y I B v b 2 L S f w d O
Morgan Kaufmann Publishers
Morgan Kaufmann Publishers
Lecture 8: Binary Multiplication & Division
Multiplication & Division
CDA 3101 Summer 2007 Introduction to Computer Organization
CS352H: Computer Systems Architecture
Lecture 8: Addition, Multiplication & Division
King Fahd University of Petroleum and Minerals
Lecture 8: Addition, Multiplication & Division
Topic 3c Integer Multiply and Divide
Part III The Arithmetic/Logic Unit
MIPS Arithmetic and Logic Instructions
MIPS Arithmetic and Logic Instructions
Presentation transcript:

Integer Multiplication and Division ICS 233 Computer Architecture and Assembly Language Dr. Aiman El-Maleh College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 2 Outline  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 3  Paper and Pencil Example: Multiplicand = 12 Multiplier × = Product = 156  m-bit multiplicand × n-bit multiplier = (m+n)-bit product  Accomplished via shifting and addition Unsigned Multiplication Binary multiplication is easy 0 × multiplicand = 0 1 × multiplicand = multiplicand

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 4 Version 1 of Multiplication Hardware Start Multiplier[0]? 1a. Product = Product + Multiplicand 2. Shift the Multiplicand Left 1 bit 3. Shift the Multiplier Right 1 bit 32 nd Repetition? Done = 0= 1 No Yes  Initialize Product = 0  Multiplicand is zero extended Multiplicand 64-bit ALU Control Multiplier Product 64 bits write shift left add shift right Multiplier[0] 32 bits 64 bits

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 5 Multiplication Example (Version 1)  Consider: × , Product =  4-bit multiplicand and multiplier are used in this example  Multiplicand is zero extended because it is unsigned SLL Multiplicand and SRL Multiplier Multiplier[0] = 0 => Do Nothing SLL Multiplicand and SRL Multiplier SLL Multiplicand and SRL Multiplier SLL Multiplicand and SRL Multiplier Multiplier[0] = 1 => ADD Multiplier[0] = 1 => ADD Multiplier[0] = 1 => ADD Initialize MultiplicandProductMultiplierIteration

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 6 Observation on Version 1 of Multiply  Hardware in version 1 can be optimized  Rather than shifting the multiplicand to the left Instead, shift the product to the right Has the same net effect and produces the same results  Reduce Hardware  Multiplicand register can be reduced to 32 bits only  We can also reduce the adder size to 32 bits  One cycle per iteration  Shifting and addition can be done simultaneously

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 7  Product = HI and LO registers, HI=0  Product is shifted right  Reduced 32-bit Multiplicand & Adder Version 2 of Multiplication Hardware = 0 Start Multiplier[0]? HI = HI + Multiplicand 32 nd Repetition? Done = 1 No Yes Shift Product = (HI,LO) Right 1 bit Shift Multiplier Right 1 bit 32-bit ALU Control 64 bits 32 bits write add Multiplicand shift right 32 bits 33 bits HILO 32 bits carry Multiplier shift right Multiplier[0] 32 bits

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 8  Eliminate Multiplier Register  Initialize LO = Multiplier, HI=0  Product = HI and LO registers Refined Version of Multiply Hardware = 0 Start LO[0]? HI = HI + Multiplicand 32 nd Repetition? Done = 1 No Yes LO=Multiplier, HI=0 Shift Product = (HI,LO) Right 1 bit 32-bit ALU Control 64 bits 32 bits write add LO[0] Multiplicand shift right 32 bits 33 bits HILO 32 bits carry

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 9 Multiply Example (Refined Version)  Consider: × , Product =  4-bit multiplicand and multiplier are used in this example  4-bit adder produces a 5-bit sum (with carry) Shift Right Product = (HI, LO) LO[0] = 0 => Do Nothing Shift Right Product = (HI, LO) Shift Right Product = (HI, LO) Shift Right Product = (HI, LO) Initialize (LO = Multiplier, HI=0) MultiplicandProduct = HI, LOCarryIteration LO[0] = 1 => ADD LO[0] = 1 => ADD LO[0] = 1 => ADD +

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 10 Next...  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 11 Signed Multiplication  So far, we have dealt with unsigned integer multiplication  Version 1 of Signed 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  Refined Version:  Use the refined version of 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 DivisionICS 233 – KFUPM © Muhamed Mudawar slide 12 Signed Multiplication (Pencil & Paper)  Case 1: Positive Multiplier Multiplicand = -4 Multiplier × = Product = -20  Case 2: Negative Multiplier Multiplicand = -4 Multiplier × = (2's complement of 1100) Product = +12 Sign-extension

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 13  Similar to Unsigned Multiplier  ALU produces a 33-bit result  Multiplicand and HI are sign-extended  Sign is the sign of the result Signed Multiplication Hardware = 0 Start LO[0]? First 31 iterations: HI = HI + Multiplicand Last iteration: HI = HI – Multiplicand 32 nd Repetition? Done = 1 No Yes LO=Multiplier, HI=0 Shift Right Product = (HI, LO) 1 bit 33-bit ALU Control 64 bits 32 bits write add, sub LO[0] Multiplicand shift right 32 bits 33 bits HILO 32 bits sign

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 14 Signed Multiplication Example  Consider: (-4) × (-3), Product =  Multiplicand and HI are sign-extended before addition  Last iteration: add 2's complement of Multiplicand Shift Product = (HI, LO) right 1 bit LO[0] = 0 => Do Nothing Shift Product = (HI, LO) right 1 bit Shift Product = (HI, LO) right 1 bit Shift Product = (HI, LO) right 1 bit Initialize (LO = Multiplier) MultiplicandProduct = HI, LOSignIteration LO[0] = 1 => ADD LO[0] = 1 => ADD LO[0] = 1 => SUB (ADD 2's compl) +

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 15 Next...  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 16 Faster Multiplication Hardware  32-bit adder for each bit of the multiplier  31 adders are needed for a 32-bit 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  Least significant bit is a product bit  Upper 32 bits go to next adder  Array multiplier can be optimized  Carry save adders reduce delays  Pipelining further improves the speed 32-bit A B1B1 32 bits A B0B0 32-bit A B2B2 32 bits 1 33 bits 32 bits 1 33 bits 32-bit A B3B3 32 bits 1 33 bits 32-bit A B bits 1 bit 33 bits P1P1 P2P2 P3P3 P 31 P bits... P0P0 1

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 17 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 ripple-carry adder  This is why the carry save adder is much faster than ripple-carry  A carry save adder has 3 inputs and produces two outputs  It adds 3 numbers and produces partial sum and carry bits Ripple Carry Adder + a0a0 b0b0 s0s0 + a1a1 b1b1 s1s1 + a 31 b 31 s c out c in Carry Save Adder... + a 31 b 31 s' 31 c' 31 c 31 + a1a1 b1b1 s' 1 c' 1 c1c1 + a0a0 b0b0 s' 0 c' 0 c0c0

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 18 Consider Adding: S = A + B + C + D d0d0 d1d1 d2d2 d3d3 c0c0 c1c1 c2c2 c3c3 a0a0 a1a1 a2a2 a3a3 b0b0 b1b1 b2b2 b3b3 + s0s0 s1s1 s2s2 s3s3 s4s4 s5s d0d0 d1d1 d2d2 d3d3 a0a0 a1a1 a2a2 a3a3 b0b0 b1b1 b2b2 b3b3 + s0s0 s1s1 s2s2 s3s3 s4s4 s5s5 c0c0 c1c1 c2c2 c3c3 Ripple Carry Adder AB C S D Carry Save Adder Ripple Carry Adder ABC D S Carry Save Adder

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 19 Next...  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 20 Try to see how big a number can be subtracted, creating a digit of the quotient on each attempt = 19 Quotient Divisor = 217 Dividend = 8 Remainder Unsigned Division (Paper & Pencil) Binary division is accomplished via shifting and subtraction Dividend = Quotient × Divisor + Remainder 217 = 19 ×

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 21 First Division Algorithm & Hardware  Initialize:  Remainder = Dividend (0-extended)  Load Upper 32 bits of Divisor  Quotient = 0 Start Difference? 2.Remainder = Difference Set least significant bit of Quotient 32 nd Repetition? Done < 0≥ 0 No Yes 1.Shift the Divisor Right 1 bit Shift the Quotient Left 1 bit Difference = Remainder – Divisor Divisor 64-bit ALU Control Quotient Remainder 64 bits write shift right sub shift left 32 bits Difference sign set lsb

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 22 2: Diff Do Nothing Division Example (Version 1)  Consider: / (4-bit dividend & divisor)  Quotient = and Remainder =  8-bit registers for Remainder and Divisor (8-bit ALU) 2: Rem = Diff, set lsb Quotient : Diff Do Nothing Initialize Remainder Quotient DivisorIteration Difference 00001: SRL, SLL, Difference : SRL, SLL, Difference : SRL, SLL, Difference : SRL, SLL, Difference

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 23 Observations on Version 1 of Divide  Version 1 of Division hardware can be optimized  Instead of shifting divisor right, Shift the remainder register left Has the same net effect and produces the same results  Reduce Hardware:  Divisor register can be reduced to 32 bits (instead of 64 bits)  ALU can be reduced to 32 bits (instead of 64 bits)  Remainder and Quotient registers can be combined

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 24 Refined Division Hardware  Observation:  Shifting remainder left does the same as shifting the divisor right  Initialize:  Quotient = Dividend, Remainder = 0 Start Difference? 2.Remainder = Difference Set least significant bit of Quotient 32 nd Repetition? Done < 0≥ 0 No Yes 1.Shift (Remainder, Quotient) Left Difference = Remainder – Divisor shift left Divisor 32-bit ALU Quotient 32 bits write sub 32 bits Difference sign set lsb Remainder 32 bits Control

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 25 2: Diff Do Nothing Division Example (Refined Version)  Same Example: / (4-bit dividend & divisor)  Quotient = and Remainder =  4-bit registers for Remainder and Divisor (4-bit ALU) 2: Rem = Diff, set lsb Quotient : Diff Do Nothing Initialize RemainderDifferenceQuotientIteration Divisor : SLL, Difference : SLL, Difference : SLL, Difference : SLL, Difference

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 26 Next...  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 27 Signed 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 DivisionICS 233 – KFUPM © Muhamed Mudawar slide 28 Signed Division Examples 1.Positive Dividend and Positive Divisor  Example: +17 / +3Quotient = +5Remainder = +2 2.Positive Dividend and Negative Divisor  Example: +17 / –3 Quotient = –5Remainder = +2 3.Negative Dividend and Positive Divisor  Example: –17 / +3Quotient = –5Remainder = –2 4.Negative Dividend and Negative Divisor  Example: –17 / –3Quotient = +5Remainder = –2 The following equation must always hold: Dividend = Quotient × Divisor + Remainder

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 29 Next...  Unsigned Multiplication  Signed Multiplication  Faster Multiplication  Unsigned Division  Signed Division  Multiplication and Division in MIPS

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 30 Multiplication in MIPS  Two 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  LO = low-order 32-bit  Result of multiplication is always in HI & LO  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 HILO $1.... $31

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 31 Division in MIPS  Two 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 to HI/LO from MIPS registers  mthi Rs (move to HI from Rs)  mtlo Rs (move to LO from Rs) Multiply Divide $0 HILO $1.... $31

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 32 Integer Multiply/Divide Instructions InstructionMeaningFormat multRs, Rt Hi, Lo = Rs × Rt op 6 = 0Rs 5 Rt 5 000x18 multuRs, Rt Hi, Lo = Rs × Rt op 6 = 0Rs 5 Rt 5 000x19 divRs, Rt Hi, Lo = Rs / Rt op 6 = 0Rs 5 Rt 5 000x1a divuRs, Rt Hi, Lo = Rs / Rt op 6 = 0Rs 5 Rt 5 000x1b mfhiRdRd= Hiop 6 = 000Rd 5 00x10 mfloRdRd= Loop 6 = 000Rd 5 00x12 mthiRsHi= Rsop 6 = 0Rs x11 mtloRsLo= Rsop 6 = 0Rs x13  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 Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 33 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/10quotient = 203remainder = 7char = '7'  Divide 203/10quotient = 20remainder = 3char = '3'  Divide 20/10quotient = 2remainder = 0char = '0'  Divide 2/10quotient = 0remainder = 2char = '2'

Integer Multiplication and DivisionICS 233 – KFUPM © Muhamed Mudawar slide 34 Integer to String Procedure # # int2str: Converts an unsigned integer into a string # Parameters: $a0 = integer to be converted # $a1 = string pointer (can store 10 digits) # int2str: move$t0, $a0# $t0 = dividend = integer value li$t1, 10# $t1 = divisor = 10 addiu$a1, $a1, 10# start at end of string sb$zero, 0($a1)# store a NULL byte convert: divu$t0, $t1# LO = quotient, HI = remainder mflo$t0# $t0 = quotient mfhi$t2# $t2 = remainder ori$t2, $t2, 0x30# convert digit to a character addiu$a1, $a1, -1# point to previous char sb$t2, 0($a1)# store digit character bnez$t0, convert# loop if quotient is not 0 jr$ra