Systems Programming and Computer Architecture ( )

Similar documents
CS140 Lecture 08: Data Representation: Bits and Ints. John Magee 13 February 2017

Representa7on of integers: unsigned and signed Conversion, cas7ng Expanding, trunca7ng Addi7on, nega7on, mul7plica7on, shiaing

Computer Systems CEN591(502) Fall 2011

Integers Sep 3, 2002

Systems 1. Integers. Unsigned & Twoʼs complement. Addition, negation, multiplication

Integers. Dr. Steve Goddard Giving credit where credit is due

Representing and Manipulating Integers. Jo, Heeseung

Bits, Bytes, and Integers August 26, 2009

Integers. Today. Next time. ! Numeric Encodings! Programming Implications! Basic operations. ! Floats

Manipulating Integers

CS 270: Computer Organization. Integer Arithmetic Operations

Bits, Bytes, and Integers

Lecture 5-6: Bits, Bytes, and Integers

Topics of this Slideset. CS429: Computer Organization and Architecture. Encoding Integers: Unsigned. C Puzzles. Integers

CS429: Computer Organization and Architecture

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VII 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Integer Arithmetic. CS 347 Lecture 03. January 20, 1998

Bits, Bytes, and Integers Part 2

Arithmetic and Bitwise Operations on Binary Data

Computer Organization: A Programmer's Perspective

Jin-Soo Kim Systems Software & Architecture Lab. Seoul National University. Integers. Spring 2019

CS 33. Data Representation, Part 2. CS33 Intro to Computer Systems VIII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Arithmetic and Bitwise Operations on Binary Data

Integer Encoding and Manipulation

But first, encode deck of cards. Integer Representation. Two possible representations. Two better representations WELLESLEY CS 240 9/8/15

Bits, Bytes and Integers Part 1

Page # CISC360. Integers Sep 11, Encoding Integers Unsigned. Encoding Example (Cont.) Topics. Twoʼs Complement. Sign Bit

Foundations of Computer Systems

ICS Instructor: Aleksandar Kuzmanovic TA: Ionut Trestian Recitation 2

Bits, Bytes, and Integers

Bits, Bytes, and Integers

Bits and Bytes: Data Presentation Mohamed Zahran (aka Z)

BITS, BYTES, AND INTEGERS

Bits, Bytes, and Integer

Bits, Bytes and Integers

Page 1 CISC360. Encoding Integers Unsigned. Integers Sep 8, Numeric Ranges. Encoding Example (Cont.)

C Puzzles! Taken from old exams. Integers Sep 3, Encoding Integers Unsigned. Encoding Example (Cont.) The course that gives CMU its Zip!

Representing Integers. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Integers II. CSE 351 Autumn Instructor: Justin Hsia

Representing and Manipulating Integers Part I

Integers II. CSE 351 Autumn 2018

Representing Integers

Bitwise Data Manipulation. Bitwise operations More on integers

Course Overview. Jo, Heeseung

CS 33. Data Representation, Part 1. CS33 Intro to Computer Systems VII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Bits, Bytes, and Integers. Bits, Bytes, and Integers. The Decimal System and Bases. Everything is bits. Converting from Decimal to Binary

Integer Representation

C Puzzles The course that gives CMU its Zip! Integer Arithmetic Operations Jan. 25, Unsigned Addition. Visualizing Integer Addition

Bits and Bytes. Why bits? Representing information as bits Binary/Hexadecimal Byte representations» numbers» characters and strings» Instructions

Why Don t Computers Use Base 10? Lecture 2 Bits and Bytes. Binary Representations. Byte-Oriented Memory Organization. Base 10 Number Representation

Page 1. Where Have We Been? Chapter 2 Representing and Manipulating Information. Why Don t Computers Use Base 10?

Why Don t Computers Use Base 10? Lecture 2 Bits and Bytes. Binary Representations. Byte-Oriented Memory Organization. Base 10 Number Representation

Bits and Bytes January 13, 2005

2.1. Unit 2. Integer Operations (Arithmetic, Overflow, Bitwise Logic, Shifting)

CSCI2467: Systems Programming Concepts

Chapter 2 Float Point Arithmetic. Real Numbers in Decimal Notation. Real Numbers in Decimal Notation

Systems I. Floating Point. Topics IEEE Floating Point Standard Rounding Floating Point Operations Mathematical properties

Floating Point Puzzles. Lecture 3B Floating Point. IEEE Floating Point. Fractional Binary Numbers. Topics. IEEE Standard 754

Floating Point January 24, 2008

Simple Data Types in C. Alan L. Cox

System Programming CISC 360. Floating Point September 16, 2008

CS367 Test 1 Review Guide

REMEMBER TO REGISTER FOR THE EXAM.

University*of*Washington*

The course that gives CMU its Zip! Floating Point Arithmetic Feb 17, 2000

Floating Point Puzzles The course that gives CMU its Zip! Floating Point Jan 22, IEEE Floating Point. Fractional Binary Numbers.

Giving credit where credit is due

Giving credit where credit is due

Floating Point Puzzles. Lecture 3B Floating Point. IEEE Floating Point. Fractional Binary Numbers. Topics. IEEE Standard 754

Computer Architecture and System Software Lecture 02: Overview of Computer Systems & Start of Chapter 2

Hardware: Logical View

CS429: Computer Organization and Architecture

Basic operators, Arithmetic, Relational, Bitwise, Logical, Assignment, Conditional operators. JAVA Standard Edition

CSE 351 Midterm - Winter 2017

Programming in C++ 5. Integral data types

CS 107 Lecture 3: Integer Representations

Integer Representation Floating point Representation Other data types

Topics of this Slideset. CS429: Computer Organization and Architecture. It s Bits All the Way Down. Why Binary? Why Not Decimal?

CS429: Computer Organization and Architecture

Module 2: Computer Arithmetic

Floating point. Today. IEEE Floating Point Standard Rounding Floating Point Operations Mathematical properties Next time.

CS61B Lecture #14: Integers. Last modified: Wed Sep 27 15:44: CS61B: Lecture #14 1

Data III & Integers I

COMP2611: Computer Organization. Data Representation

Computer System and programming in C

Computer Organization & Systems Exam I Example Questions

Today: Bits, Bytes, and Integers. Bits, Bytes, and Integers. For example, can count in binary. Everything is bits. Encoding Byte Values

Floating Point. CSE 238/2038/2138: Systems Programming. Instructor: Fatma CORUT ERGİN. Slides adapted from Bryant & O Hallaron s slides

CS241 Computer Organization Spring

SIGNED AND UNSIGNED SYSTEMS

Semester Transition Point. EE 109 Unit 11 Binary Arithmetic. Binary Arithmetic ARITHMETIC

Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition. Carnegie Mellon

Floating-Point Data Representation and Manipulation 198:231 Introduction to Computer Organization Lecture 3

Data III & Integers I

Arithmetic Operators. Portability: Printing Numbers

Chapter 4. Operations on Data

CSE 351 Midterm - Winter 2015 Solutions

Floating Point : Introduction to Computer Systems 4 th Lecture, May 25, Instructor: Brian Railing. Carnegie Mellon

Transcription:

Systems Group Department of Computer Science ETH Zürich Systems Programming and Computer Architecture (252-0061-00) Timothy Roscoe Herbstsemester 2016 1

3: Integers in C Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 2

Representing integers int A = 15213; int B = -15213; long int C = 15213; Decimal: 15213 Binary: 0011 1011 0110 1101 Hex: 3 B 6 D A on ia32, x86-64 A on SPARC C on ia32 C on x86-64 C on SPARC 6D 3B 00 00 B on ia32, x86-64 93 C4 FF FF 00 00 3B 6D B on SPARC FF FF C4 93 6D 3B 00 00 6D 3B 00 00 00 00 00 00 Two s complement representation Integers in C 00 00 3B 6D 3

Bit-level operations in C Operations &,, ~, ^ available in C Apply to any integral data type long, int, short, char, unsigned View arguments as bit vectors Arguments applied bit-wise &,, ~, ^ Examples (char data type): ~0x41 0xBE ~01000001 2 10111110 2 ~0x00 0xFF ~00000000 2 11111111 2 0x69 & 0x55 0x41 01101001 2 & 01010101 2 01000001 2 0x69 0x55 0x7D 01101001 2 01010101 2 01111101 2 4

Contrast: Logic operations in C &&,,! View 0 as False Anything nonzero as True Always return 0 or 1 Early termination &&,,! Examples (char data type)!0x41 0x00!0x00 0x01!!0x41 0x01 0x69 && 0x55 0x01 0x69 0x55 0x01 p && *p (avoids null pointer access) 5

Representing & manipulating sets Width w bit vector represents subsets of {0,, w 1} a j = 1 if j A: 01101001 { 0, 3, 5, 6 } 76543210 01010101 { 0, 2, 4, 6 } 76543210 Operations: Operator Operation Result Meaning & Intersection 01000001 { 0, 6 } Union 01111101 { 2, 3, 4, 5, 6 } ^ Symmetric difference 00111100 { 2, 3, 4, 5 } ~ Complement 10101010 { 1, 3, 5, 7 } 6

Shift operations Left shift: x << y Shift bit-vector x left y positions Throw away extra bits on left Fill with 0 s on right Right shift: x >> y Shift bit-vector x right y positions Throw away extra bits on right Logical shift Fill with 0 s on left Arithmetic shift Replicate most significant bit on right Undefined behavior Shift amount < 0 or word size Argument x << 3 Log. >> 2 Arith. >> 2 Argument x << 3 Log. >> 2 Arith. >> 2 01100010 00010000 00011000 00011000 10100010 00010000 00101000 11101000 Java writes this >>>. 7

Summary Integer encoding Bit-level operators Set representation Logic operators Shift operators 8

3.1: Integer ranges Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 9

Encoding integers Unsigned w 1 B2U X = x i 2 i i=0 Two s complement w 2 B2T X = x w 1 2 w 1 + x i 2 i i=0 short int x = 15213; short int y = -15213; Sign Bit A C short is 2 bytes long: Decimal Hex Binary x 15213 3B 6D 00111011 01101101 y -15213 C4 93 11000100 10010011 Sign bit For 2 s complement, most significant bit = 1 indicates negative 10

Numeric ranges Unsigned values UMin = 0 000 0 UMax = 2 w 1 111 1 Two s complement values TMin = 2 w 1 100 0 TMax = 2 w 1 1 011 1 Decimal Hex Binary Values for w=16 UMax 65535 FF FF 11111111 11111111 TMax 32767 7F FF 01111111 11111111 TMin -32768 80 00 10000000 00000000-1 -1 FF FF 11111111 11111111 0 0 00 00 00000000 00000000 11

Values for different word sizes 8 16 32 64 UMax 255 65,535 4,294,967,295 18,446,744,073,709,551,615 TMax 127 32,767 2,147,483,647 9,223,372,036,854,775,807 TMin -128-32,768-2,147,483,648-9,223,372,036,854,775,808 Observations TMin = TMax + 1 Asymmetric range UMax = 2 * TMax + 1 C Programming #include <limits.h> Declares constants, e.g., ULONG_MAX LONG_MAX LONG_MIN Values platform specific 12

Mapping signed unsigned = +16 Signed 0 1 2 3 4 5 6 7-8 -7-6 -5-4 -3-2 -1 Unsigned 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Bits 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 13

Conversion visualized 2 s Comp. Unsigned Ordering inversion Negative big positive TMax UMax UMax 1 TMax + 1 TMax Unsigned range 2 s complement range 0 1 2 0 TMin AS 2016 14

Signed vs. unsigned in C Constants By default are considered to be signed integers Unsigned if have U as suffix: Casting Explicit casting between signed & unsigned same as U2T and T2U: 0U 4294967259U int tx, ty; unsigned ux, uy; tx = (int) ux; uy = (unsigned) ty; Implicit casting also occurs via assignments and procedure calls tx = ux; uy = ty; 15

Casting surprises Expression evaluation If mix unsigned and signed in single expression, signed values implicitly cast to unsigned Including comparison operations <, >, ==, <=, >= Examples for W = 32: TMIN = -2,147,483,648, TMAX = 2,147,483,647 Constant 1 Constant 2 Relation Evaluation 0 0U == Unsigned -1 0 < Signed -1 0U > Unsigned 2147483647-2147483647-1 > Signed 2147483647U -2147483647-1 < Unsigned -1-2 > Signed (unsigned)-1-2 > Unsigned 2147483647 2147483648U < Unsigned 2147483647 (int) 2147483648U > signed AS 2016 16

Code security example /* Kernel memory region holding user-accessible data */ #define KSIZE 1024 char kbuf[ksize]; /* Copy at most maxlen bytes from kernel region to user buffer */ int copy_from_kernel(void *user_dest, int maxlen) { /* Byte count len is minimum of buffer size and maxlen */ int len = KSIZE < maxlen? KSIZE : maxlen; memcpy(user_dest, kbuf, len); return len; } Similar to code found in FreeBSD s implementation of getpeername There are legions of smart people trying to find vulnerabilities in programs 17

Typical usage /* Kernel memory region holding user-accessible data */ #define KSIZE 1024 char kbuf[ksize]; /* Copy at most maxlen bytes from kernel region to user buffer */ int copy_from_kernel(void *user_dest, int maxlen) { /* Byte count len is minimum of buffer size and maxlen */ int len = KSIZE < maxlen? KSIZE : maxlen; memcpy(user_dest, kbuf, len); return len; } #define MSIZE 528 void getstuff() { char mybuf[msize]; copy_from_kernel(mybuf, MSIZE); printf( %s\n, mybuf); } 18

Malicious usage /* Kernel memory region holding user-accessible data */ #define KSIZE 1024 char kbuf[ksize]; /* Copy at most maxlen bytes from kernel region to user buffer */ int copy_from_kernel(void *user_dest, int maxlen) { /* Byte count len is minimum of buffer size and maxlen */ int len = KSIZE < maxlen? KSIZE : maxlen; memcpy(user_dest, kbuf, len); return len; } #define MSIZE 528 void getstuff() { char mybuf[msize]; copy_from_kernel(mybuf, -MSIZE);... } /* Declaration of library function memcpy */ void *memcpy(void *dest, void *src, size_t n); 19

Sign extension Task: Given w-bit signed integer x Convert it to w+k-bit integer with same value Rule: Make k copies of sign bit: X = x w 1,, x w 1, x w 1, x w 2,, x 0 w k copies of MSB X X k w 20

Sign extension example short int x = 15213; int ix = (int) x; short int y = -15213; int iy = (int) y; Decimal Hex Binary x 15213 3B 6D 00111011 01101101 ix 15213 00 00 3B 6D 00000000 00000000 00111011 01101101 y -15213 C4 93 11000100 10010011 iy -15213 FF FF C4 93 11111111 11111111 11000100 10010011 Converting from smaller to larger integer data type C automatically performs sign extension for signed values 21

Summary Casting signed unsigned Bit pattern is maintained but reinterpreted Can have unexpected effects: adding or subtracting 2 w Expression containing signed and unsigned int int is cast to unsigned! Expanding (e.g., short int int) Unsigned: zeros added Signed: sign extension Truncating (e.g., unsigned unsigned short) Unsigned: modulus operation Signed: similar to modulus For small numbers yields expected behaviour 22

3.2: Integer addition and subtraction in C Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 23

Negation: complement & increment Recall the following holds for 2 s complement: ~x + 1 == -x Complement Observation: ~x + x == 1111 111 == -1 + x ~x -1 1 0 0 1 1 1 0 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 Complete proof? 24

Complement & increment examples x = 15213 x = 0 Decimal Hex Binary x 15213 3B 6D 00111011 01101101 ~x -15214 C4 92 11000100 10010010 ~x+1-15213 C4 93 11000100 10010011 y -15213 C4 93 11000100 10010011 Decimal Hex Binary 0 0 00 00 00000000 00000000 ~0-1 FF FF 11111111 11111111 ~0+1 0 00 00 00000000 00000000 25

Unsigned addition Operands: w bits True sum: w+1 bits Discard carry: w bits u + v u + v UAdd w u, v Standard addition function Ignores carry output Implements modular arithmetic s = UAdd w u, v = u + v mod 2 w UAdd w u, v = u + v, u + v < 2w u + v 2 w, u + v 2 w 26

Visualizing (mathematical) integer addition Integer addition 4-bit integers u, v Add 4 (u, v) Integer Addition Compute true sum Add 4 (u, v) Values increase linearly with u and v 32 28 24 Forms planar surface 20 16 12 8 u 4 0 0 2 4 6 8 10 12 14 0 2 v 4 6 8 10 12 14 27

Visualizing unsigned addition Wraps around If true sum 2 w At most once UAdd 4 (u, v) Overflow True Sum 2 w+1 Overflow 16 14 12 10 2 w 0 Modular Sum 8 6 4 2 0 0 u 2 4 6 8 10 12 14 0 2 4 6 8 10 12 v 14 28

Mathematical properties Modular addition forms an Abelian group Closed under addition 0 UAdd w u, v 2 w 1 Commutative UAdd w u, v = UAdd w v, u Associative UAdd w t, UAdd w u, v = UAdd w UAdd w t, u, v 0 is additive identity UAdd w u, 0 = u Every element has additive inverse Let: UComp w u = 2 w u Then: UAdd w u, UComp w u = 0 29

Two s complement addition Operands: w bits True sum: w+1 bits Discard carry: w bits u + v u + v TAdd w u, v TAdd and UAdd have identical bit-level behavior Signed vs. unsigned addition in C: int s, t, u, v; s = (int) ((unsigned) u + (unsigned) v); t = u + v; Will give: s == t 30

TAdd overflow Functionality True sum requires w+1 bits Drop off MSB 0 111 1 0 100 0 0 000 0 True Sum 2 w 1 2 w 1 0 PosOver TAdd Result 011 1 000 0 Treat remaining bits as 2 s comp. integer 1 011 1 1 000 0 2 w 1 1 2 w NegOver 100 0 31

Visualizing 2 s compl. addition Values 4-bit two s comp. Range from -8 to +7 Wraps around If sum 2 w 1 Becomes negative At most once If sum < 2 w 1 Becomes positive At most once NegOver 8 6 4 2 0-2 -4-6 -8-8 -6-4 -2 u 0 2 TAdd 4 (u, v) -6-8 4 6-4 -2 6 4 2 0 v PosOver 32

Characterizing TAdd Functionality True sum requires w+1 bits Drop off MSB Treat remaining bits as 2 s comp. integer TAdd(u, v) > 0 v < 0 < 0 > 0 u Negative Overflow Positive Overflow TAdd w u, v = u + v + 2 w u + v u + v 2 w u + v < TMin w TMin w u + v TMax w TMax w < u + v (Neg. overflow) (Pos. overflow) 33

Mathematical properties of TAdd Group isomorphic to unsigneds with UAdd Since both have identical bit patterns TAdd w u, v = U2T UAdd w T2U u, T2U v 2 s complement under TAdd forms a group Closed, commutative, associative, 0 is additive identity Every element has additive inverse TComp w u = u TMin w u TMin w u = TMin w 34

3.3: Integer multiplication in C Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 35

Multiplication Computing exact product of w-bit numbers x, y Either signed or unsigned Ranges Unsigned (up to 2 w bits): 0 x y 2 w 1 2 = 2 2w 2 w+1 + 1 Two s complement min (up to 2 w 1 bits): x y 2 w 1 2 w 1 1 = 2 2w 2 + 2 w 1 Two s complement max (up to 2 w bits, but only for TMin 2 w ): x y 2 w 1 2 = 2 2w 2 Maintaining exact results Would need to keep expanding word size with each product computed Done in software by arbitrary precision arithmetic packages 36

Unsigned multiplication in C Operands: w bits u v True product: 2*w bits u v Discard w bits: w bits UMult w u, v Standard multiplication function Ignores high order w bits Implements modular arithmetic UMult w u, v = u v mod 2 w 37

Unsigned multiplication Unsigned multiplication with addition forms a commutative ring: Addition is a commutative group Closed under multiplication 0 UMult w u, v 2 w 1 Multiplication is commutative UMult w u, v = UMult w v, u Multiplication is associative UMult w t, UMult w u, v = UMult w UMult w t, u, v 1 is multiplicative identity UMult w u, 1 = u Multiplication distributes over addition UMult w t, UAdd w u, v = UAdd w UMult w t, u, UMult w t, v 38

Signed multiplication in C Operands: w bits u v True product: 2*w bits u v Discard w bits: w bits TMult w u, v Standard multiplication function Ignores high order w bits Some of which are different for signed vs. unsigned multiplication Lower bits are the same 39

Signed multiplication Isomorphic algebra to unsigned multiplication and addition Both isomorphic to ring of integers mod 2 w Comparison to (mathematical) integer arithmetic Both are rings True integers obey ordering properties, e.g., u > 0 u + v > v u > 0, v > 0 u v > 0 Not the case for two s complement arithmetic: TMax + 1 == TMin 15213 * 30426 == -10030 (e.g. for 16-bit words) 40

3.4: Integer multiplication and division using shifts Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 41

Power-of-2 multiply with shift Operation u << k gives u * 2 k Both signed and unsigned Operands: w bits True product: w+k bits Discard k bits: w bits u 2 k Examples u << 3 == u * 8 u << 5 - u << 3 == u * 24 Most machines shift and add faster than multiply Compiler generates this code automatically u * 2 k UMult w u, 2 k TMult w u, 2 k k 0 0 1 0 0 0 0 0 0 0 0 0 42

Compiled multiplication code C Function int mul12(int x) { return x*12; } Compiled arithmetic operations leal (%eax,%eax,2), %eax sall $2, %eax Explanation t <- x+x*2 return t << 2; C compiler automatically generates shift/add code when multiplying by constant 43

Unsigned power-of-2 divide w/ shift Quotient of unsigned by power of 2 u >> k gives u / 2 k Uses logical shift k u Operands: / 2 k 0 0 1 0 0 0 Binary Point Division: u / 2 k 0 0 0. Result: u / 2 k 0 0 0 Division Computed Hex Binary x 15213 15213 3B 6D 00111011 01101101 x >> 1 7606.5 7606 1D B6 00011101 10110110 x >> 4 950.8125 950 03 B6 00000011 10110110 x >> 8 59.4257813 59 00 3B 00000000 00111011 44

Compiled unsigned division code C Function unsigned udiv8(unsigned x) { return x/8; } Compiled Arithmetic Operations shrl $3, %eax Explanation # Logical shift return x >> 3; Uses logical shift for unsigned For Java users: logical shift written as >>> 45

Signed power-of-2 divide w/ shift Quotient of Signed by Power of 2 x >> k gives x / 2 k Uses arithmetic shift Rounds wrong direction when u < 0 k x Operands: 2 k 0 0 1 0 0 0 x Division: 2 k. Binary Point Result: RoundDown x 2 k Division Computed Hex Binary y -15213-15213 C4 93 11000100 10010011 y >> 1-7606.5-7607 E2 49 11100010 01001001 y >> 4-950.8125-951 FC 49 11111100 01001001 y >> 8-59.4257813-60 FF C4 11111111 11000100 46

Correct power-of-2 divide Quotient of negative number by power of 2 We want x 2 k (round toward 0) We compute it as x + 2 k 1 2 k In C: (x + (1<<k)-1) >> k Biases the dividend toward 0 47

Correct power-of-2 divide Quotient of negative number by power of 2 We want x 2 k (round toward 0) We compute it as x + 2 k 1 2 k In C: (x + (1<<k)-1) >> k Biases the dividend toward 0 Case 1: No rounding Dividend: Divisor: u 2 k u 2 k k 1 0 0 0 +2 k 1 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 1 1 1. Binary Point 1 1 1 Biasing has no effect 48

Correct power-of-2 divide (Cont.) Case 2: Rounding: Dividend: u +2 k 1 k 1 0 0 0 1 1 1 1 Incremented by 1 Binary Point Divisor: 2 k u 2 k 0 0 1 0 0 0 1 1 1 1. Incremented by 1 Biasing adds 1 to final result 49

C function Compiled signed division code int idiv8(int x) { return x/8; } Compiled arithmetic operations testl %eax, %eax js L4 L3: sarl $3, %eax ret L4: addl $7, %eax jmp L3 Explanation if x < 0 x += 7; # Arithmetic shift return x >> 3; Uses arithmetic shift for int For Java users Arith. shift written as >> 50

Summary Signed/unsigned multiply: Unsigned divide: Signed divide: x * 2 k = x << k x / 2 k = x >> k Logical shift x / 2 k = x >> k for x > 0 x / 2 k = x + (2 k 1) >> k for x < 0 Arithmetic shift AS 2016 51

3.5: C Integer puzzles Computer Architecture and Systems Programming 252-0061-00, Herbstsemester 2016 Timothy Roscoe 52

Integer C Puzzles Assume 32-bit word size, two s complement integers For each of the following C expressions, either: Argue that it is true for all argument values Give an example where it is not true Initialization int x = foo(); int y = bar(); unsigned ux = x; unsigned uy = y; x < 0 ((x*2) < 0) ux >= 0 x & 7 == 7 (x<<30) < 0 ux > -1 x > y -x < -y x * x >= 0 x>0 && y>0 x + y > 0 x >= 0 -x <= 0 x <= 0 -x >= 0 (x -x)>>31 == -1 ux >> 3 == ux/8 x >> 3 == x/8 x & (x-1)!= 0 53