Machine- Level Programming II: Arithme6c & Control

Similar documents
Machine-Level Programming II: Arithmetic & Control /18-243: Introduction to Computer Systems 6th Lecture, 5 June 2012

Credits to Randy Bryant & Dave O Hallaron

Machine-Level Programming II: Control and Arithmetic

Machine-Level Programming II: Arithmetic & Control. Complete Memory Addressing Modes

Machine- Level Programming II: Arithme6c & Control

Machine- Level Programming II: Arithme c & Control

Machine Level Programming II: Arithmetic &Control

Sungkyunkwan University

CS241 Computer Organization Spring Addresses & Pointers

Sungkyunkwan University

The Hardware/Software Interface CSE351 Spring 2013

Questions about last homework? (Would more feedback be useful?) New reading assignment up: due next Monday

CS 33. Machine Programming (2) CS33 Intro to Computer Systems XI 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

CS 33. Machine Programming (2) CS33 Intro to Computer Systems XII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Machine Level Programming: Control

The Hardware/Software Interface CSE351 Spring 2015

Homework 0: Given: k-bit exponent, n-bit fraction Find: Exponent E, Significand M, Fraction f, Value V, Bit representation

Machine-Level Programming II: Control

Machine-Level Programming II: Control

Outline. Review: Assembly/Machine Code View. Processor State (x86-64, Par2al) Condi2on Codes (Explicit Se^ng: Compare) Condi2on Codes (Implicit Se^ng)

ASSEMBLY II: CONTROL FLOW. Jo, Heeseung

Assembly II: Control Flow. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Machine-Level Programming II: Control Flow

Three Kinds of Instruc;ons

Machine- level Programming II: Control Flow

hnp://

Assembly I: Basic Operations. Computer Systems Laboratory Sungkyunkwan University

Process Layout and Function Calls

Condition Codes The course that gives CMU its Zip! Machine-Level Programming II Control Flow Sept. 13, 2001 Topics

Condition Codes. Lecture 4B Machine-Level Programming II: Control Flow. Setting Condition Codes (cont.) Setting Condition Codes (cont.

Turning C into Object Code Code in files p1.c p2.c Compile with command: gcc -O p1.c p2.c -o p Use optimizations (-O) Put resulting binary in file p

Chapter 3 Machine-Level Programming II Control Flow

Assembly II: Control Flow. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

CF Carry Flag SF Sign Flag ZF Zero Flag OF Overflow Flag. ! CF set if carry out from most significant bit. "Used to detect unsigned overflow

Assembly II: Control Flow

ASSEMBLY I: BASIC OPERATIONS. Jo, Heeseung

Giving credit where credit is due

2/12/2016. Today. Machine-Level Programming II: Control. Condition Codes (Implicit Setting) Processor State (x86-64, Partial)

Controlling Program Flow

Assembly I: Basic Operations. Jo, Heeseung

CISC 360. Machine-Level Programming II: Control Flow Sep 23, 2008

Page # CISC 360. Machine-Level Programming II: Control Flow Sep 23, Condition Codes. Setting Condition Codes (cont.)

CISC 360. Machine-Level Programming II: Control Flow Sep 17, class06

Process Layout, Function Calls, and the Heap

Machine Programming 2: Control flow

Control flow. Condition codes Conditional and unconditional jumps Loops Switch statements

Page 1. Condition Codes CISC 360. Machine-Level Programming II: Control Flow Sep 17, Setting Condition Codes (cont.)

Machine-Level Programming II: Control

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

CS429: Computer Organization and Architecture

Machine Language CS 3330 Samira Khan

Machine-Level Programming (2)

Machine- Level Programming II: Control Structures and Procedures

CS367. Program Control

Machine- Level Programming II: Control Structures and Procedures

L09: Assembly Programming III. Assembly Programming III. CSE 351 Spring Guest Lecturer: Justin Hsia. Instructor: Ruth Anderson

Meet & Greet! Come hang out with your TAs and Fellow Students (& eat free insomnia cookies) When : TODAY!! 5-6 pm Where : 3rd Floor Atrium, CIT

Assembly Programmer s View Lecture 4A Machine-Level Programming I: Introduction

x86 Programming II CSE 351 Winter

x86-64 Programming II

Machine-Level Programming I: Introduction Jan. 30, 2001

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

System Programming and Computer Architecture (Fall 2009)

X86 Addressing Modes Chapter 3" Review: Instructions to Recognize"

Machine- level Programming

Assembly Programming III

Instructor: Alvin R. Lebeck

Assembly level Programming. 198:211 Computer Architecture. (recall) Von Neumann Architecture. Simplified hardware view. Lecture 10 Fall 2012

CS241 Computer Organization Spring 2015 IA

The Hardware/Software Interface CSE351 Spring 2015

CS 31: Intro to Systems ISAs and Assembly. Kevin Webb Swarthmore College February 9, 2016

CS 31: Intro to Systems ISAs and Assembly. Kevin Webb Swarthmore College September 25, 2018

Machine-Level Programming I: Introduction

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

CISC 360. Machine-Level Programming I: Introduction Sept. 18, 2008

CSC 8400: Computer Systems. Machine-Level Representation of Programs

Credits and Disclaimers

X86 Assembly -Data II:1

x86 Programming III CSE 351 Autumn 2016 Instructor: Justin Hsia

Giving credit where credit is due

Data Representa/ons: IA32 + x86-64

Software. Hardware. x86 basics. ISA View. a brief history of x86 10/6/15. Program, Application. Programming Language. Compiler/Interpreter

CS241 Computer Organization Spring Loops & Arrays

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Reading assignment. Chapter 3.1, 3.2 Chapter 4.1, 4.3

Machine Programming 1: Introduction

x86 64 Programming II

This is a medical robot, guided by a skilled surgeon and designed to get to places doctors are unable to reach without opening a pacent up.

Machine- Level Representa2on: Procedure

Handout #2: Machine-Level Programs

Control. Young W. Lim Mon. Young W. Lim Control Mon 1 / 16

Machine-Level Programming Introduction

Page # CISC 360. Machine-Level Programming I: Introduction Sept. 18, IA32 Processors. X86 Evolution: Programmerʼs View.

15-213/ Final Exam Notes Sheet Spring 2013!

CSC 2400: Computer Systems. Towards the Hardware: Machine-Level Representation of Programs

Assembly I: Basic Operations. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

The course that gives CMU its Zip! Machine-Level Programming I: Introduction Sept. 10, 2002

Second Part of the Course

Assembly Language: IA-32 Instructions

Instruction Set Architecture

Transcription:

Machine- Level Programming II: Arithme6c & Control Computer Architecture Instructor: Norbert Lu*enberger based on the book by Randy Bryant and Dave O Hallaron 1

Today Complete addressing mode, address computa6on (Load Effec6ve Address instruc6on, leal) Arithme6c opera6ons Control: Condi6on codes Condi6onal branches While loops 2

Complete Memory Addressing Modes Most General Form D(Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]+ D] D: Constant displacement 1, 2, or 4 bytes Rb: Base register: Any of 8 integer registers Ri: Index register: Any, except for %esp Unlikely you d use %ebp, either S: Scale: 1, 2, 4, or 8 (why these numbers?) Special Cases (Rb,Ri) Mem[Reg[Rb]+Reg[Ri]] D(Rb,Ri) Mem[Reg[Rb]+Reg[Ri]+D] (Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]] 3

Address Computa6on Examples %edx %ecx 0xf000 0x0100 Expression Address ComputaSon Address 0x8(%edx) (%edx,%ecx) (%edx,%ecx,4) 0x80(,%edx,2) 0xf000 + 0x8 0xf000 + 0x100 0xf000 + 4*0x100 2*0xf000 + 0x80 0xf008 0xf100 0xf400 0x1e080 4

Address Computa6on Instruc6on leal Src,Dest (Load Effec+ve Address) Src is address mode expression Set Dest to address denoted by expression Uses CompuSng addresses without a memory reference E.g., translason of p = &x[i]; CompuSng arithmesc expressions of the form x + k*y k = 1, 2, 4, or 8 Example int mul12(int x) { return x*12; Converted to ASM by compiler: leal (%eax,%eax,2), %eax ;t <- x+x*2 sall $2, %eax ;return t<<2 5

Today Complete addressing mode, address computa6on (leal) Arithme6c opera6ons Control: Condi6on codes Condi6onal branches While loops 6

Some Arithme6c Opera6ons Two Operand Instruc6ons: Format ComputaSon addl Src,Dest Dest = Dest + Src subl Src,Dest Dest = Dest - Src imull Src,Dest Dest = Dest * Src sall Src,Dest Dest = Dest << Src Also called shll sarl Src,Dest Dest = Dest >> Src ArithmeSc shrl Src,Dest Dest = Dest >> Src Logical xorl Src,Dest Dest = Dest ^ Src andl Src,Dest Dest = Dest & Src orl Src,Dest Dest = Dest Src Watch out for argument order! No dis6nc6on between signed and unsigned int (why?) 7

Some Arithme6c Opera6ons One Operand Instruc6ons incl Dest Dest = Dest + 1 decl Dest Dest = Dest - 1 negl Dest Dest = - Dest notl Dest Dest = ~Dest See book for more instruc6ons 8

Arithme6c Expression Example int arith(int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; arith: pushl %ebp movl %esp, %ebp movl 8(%ebp), %ecx movl 12(%ebp), %edx leal (%edx,%edx,2), %eax sall $4, %eax leal 4(%ecx,%eax), %eax addl %ecx, %edx addl 16(%ebp), %edx imull %edx, %eax Set Up Body popl %ebp ret Finish 9

Understanding arith int arith(int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; Offset 16 z 12 y 8 x 4 Rtn Addr 0 Old %ebp %ebp movl 8(%ebp), %ecx movl 12(%ebp), %edx leal (%edx,%edx,2), %eax sall $4, %eax leal 4(%ecx,%eax), %eax addl %ecx, %edx addl 16(%ebp), %edx imull %edx, %eax 10

Understanding arith int arith(int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; Offset 16 z 12 y 8 x 4 Rtn Addr 0 Old %ebp Stack %ebp movl 8(%ebp), %ecx # ecx = x movl 12(%ebp), %edx # edx = y leal (%edx,%edx,2), %eax # eax = y*3 sall $4, %eax # eax *= 16 (t4) leal 4(%ecx,%eax), %eax # eax = t4 +x+4 (t5) addl %ecx, %edx # edx = x+y (t1) addl 16(%ebp), %edx # edx += z (t2) imull %edx, %eax # eax = t2 * t5 (rval) 11

Observa6ons about arith int arith(int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; InstrucSons in different order from C code Some expressions require mulsple instrucsons Some instrucsons cover mulsple expressions Get exact same code when compile: (x+y+z)*(x+4+48*y) movl 8(%ebp), %ecx # ecx = x movl 12(%ebp), %edx # edx = y leal (%edx,%edx,2), %eax # eax = y*3 sall $4, %eax # eax *= 16 (t4) leal 4(%ecx,%eax), %eax # eax = t4 +x+4 (t5) addl %ecx, %edx # edx = x+y (t1) addl 16(%ebp), %edx # edx += z (t2) imull %edx, %eax # eax = t2 * t5 (rval) 12

Another Example int logical(int x, int y) { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; int rval = t2 & mask; return rval; logical: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax xorl 8(%ebp),%eax sarl $17,%eax andl $8185,%eax popl %ebp ret Set Up Body Finish movl 12(%ebp),%eax # eax = y xorl 8(%ebp),%eax # eax = x^y (t1) sarl $17,%eax # eax = t1>>17 (t2) andl $8185,%eax # eax = t2 & mask (rval) 13

Another Example int logical(int x, int y) { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; int rval = t2 & mask; return rval; logical: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax xorl 8(%ebp),%eax sarl $17,%eax andl $8185,%eax popl %ebp ret Set Up Body Finish movl 12(%ebp),%eax # eax = y xorl 8(%ebp),%eax # eax = x^y (t1) sarl $17,%eax # eax = t1>>17 (t2) andl $8185,%eax # eax = t2 & mask (rval) 14

Another Example int logical(int x, int y) { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; int rval = t2 & mask; return rval; logical: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax xorl 8(%ebp),%eax sarl $17,%eax andl $8185,%eax popl %ebp ret Set Up Body Finish movl 12(%ebp),%eax # eax = y xorl 8(%ebp),%eax # eax = x^y (t1) sarl $17,%eax # eax = t1>>17 (t2) andl $8185,%eax # eax = t2 & mask (rval) 15

Another Example int logical(int x, int y) { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; int rval = t2 & mask; return rval; logical: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax xorl 8(%ebp),%eax sarl $17,%eax andl $8185,%eax popl %ebp ret Set Up Body Finish 2 13 = 8192, 2 13 7 = 8185 movl 12(%ebp),%eax # eax = y xorl 8(%ebp),%eax # eax = x^y (t1) sarl $17,%eax # eax = t1>>17 (t2) andl $8185,%eax # eax = t2 & mask (rval) 16

Today Complete addressing mode, address computa6on (leal) Arithme6c opera6ons Control: Condi6on codes Condi6onal branches Loops 17

Processor State (IA32, Par6al) Informa6on about currently execu6ng program Temporary data ( %eax, ) LocaSon of runsme stack ( %ebp,%esp ) LocaSon of current code control point ( %eip, ) Status of recent tests ( CF, ZF, SF, OF ) %eax %ecx %edx %ebx %esi %edi %esp %ebp %eip General purpose registers Current stack top Current stack frame InstrucSon pointer CF ZF SF OF CondiSon codes 18

Condi6on Codes (Implicit SeZng) Single bit registers CF Carry Flag (for unsigned) SF Sign Flag (for signed) ZF Zero Flag OF Overflow Flag (for signed) Implicitly set (think of it as side effect) by arithme6c opera6ons Example: addl/addq Src,Dest t = a+b CF set if carry out from most significant bit (unsigned overflow) ZF set if t == 0 SF set if t < 0 (as signed) OF set if two s- complement (signed) overflow (a>0 && b>0 && t<0) (a<0 && b<0 && t>=0) Not set by lea instruc6on Full documenta6on (IA32), link on course website 19

Condi6on Codes (Explicit SeZng: Compare) Explicit SeZng by Compare Instruc6on cmpl/cmpq Src2, Src1 cmpl b,a like compusng a-b without seong dessnason CF set if carry out from most significant bit (used for unsigned comparisons) ZF set if a == b SF set if (a-b) < 0 (as signed) OF set if two s- complement (signed) overflow (a>0 && b<0 && (a-b)<0) (a<0 && b>0 && (a-b)>0) 20

Condi6on Codes (Explicit SeZng: Test) Explicit SeZng by Test instruc6on testl/testq Src2, Src1 testl b,a like compusng a&b without seong dessnason Sets condison codes based on value of Src1 & Src2 Useful to have one of the operands be a mask ZF set when a&b == 0 SF set when a&b < 0 21

Reading Condi6on Codes SetX Instruc6ons Set single byte based on combinasons of condison codes SetX CondiSon DescripSon sete ZF Equal / Zero setne ~ZF Not Equal / Not Zero sets SF NegaSve setns ~SF NonnegaSve setg ~(SF^OF)&~ZF Greater (Signed) setge ~(SF^OF) Greater or Equal (Signed) setl (SF^OF) Less (Signed) setle (SF^OF) ZF Less or Equal (Signed) seta ~CF&~ZF Above (unsigned) setb CF Below (unsigned) 22

Reading Condi6on Codes (Cont.) SetX Instruc6ons: Set single byte based on combinason of condison codes One of 8 addressable byte registers Does not alter remaining 3 bytes Typically use movzbl to finish job int gt (int x, int y) { return x > y; %eax %ecx %edx %ebx %esi %ah %al %ch %cl %dh %dl %bh %bl Body movl 12(%ebp),%eax # eax = y cmpl %eax,8(%ebp) # Compare x : y setg %al # al = x > y movzbl %al,%eax # Zero rest of %eax %edi %esp %ebp 23

Reading Condi6on Codes: x86-64 SetX Instruc6ons: Set single byte based on combinason of condison codes Does not alter remaining 3 bytes int gt (long x, long y) { return x > y; long lgt (long x, long y) { return x > y; cmpl %esi, %edi setg %al movzbl %al, %eax Bodies cmpq %rsi, %rdi setg %al movzbl %al, %eax Is %rax zero? Yes: 32- bit instrucsons set high order 32 bits to 0! 24

Today Complete addressing mode, address computa6on (leal) Arithme6c opera6ons x86-64 Control: Condi6on codes Condi6onal branches & Moves Loops 25

Jumping jx Instruc6ons Jump to different part of code depending on condison codes jx CondiSon DescripSon jmp 1 UncondiSonal je ZF Equal / Zero jne ~ZF Not Equal / Not Zero js SF NegaSve jns ~SF NonnegaSve jg ~(SF^OF)&~ZF Greater (Signed) jge ~(SF^OF) Greater or Equal (Signed) jl (SF^OF) Less (Signed) jle (SF^OF) ZF Less or Equal (Signed) ja ~CF&~ZF Above (unsigned) jb CF Below (unsigned) 26

Condi6onal Branch Example int absdiff(int x, int y) { int result; if (x > y) { result = x-y; else { result = y-x; return result; absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle.l6 subl %eax, %edx movl %edx, %eax jmp.l7.l6: subl %edx, %eax.l7: popl %ebp ret Setup Body1 Body2a Body2b Finish 27

Condi6onal Branch Example (Cont.) int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; goto Exit; Else: result = y-x; Exit: return result; C allows goto as means of transferring control Closer to machine- level programming style Generally considered bad coding style absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle.l6 subl %eax, %edx movl %edx, %eax jmp.l7.l6: subl %edx, %eax.l7: popl %ebp ret Setup Body1 Body2a Body2b Finish 28

Condi6onal Branch Example (Cont.) int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; goto Exit; Else: result = y-x; Exit: return result; absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle.l6 subl %eax, %edx movl %edx, %eax jmp.l7.l6: subl %edx, %eax.l7: popl %ebp ret Setup Body1 Body2a Body2b Finish 29

Condi6onal Branch Example (Cont.) int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; goto Exit; Else: result = y-x; Exit: return result; absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle.l6 subl %eax, %edx movl %edx, %eax jmp.l7.l6: subl %edx, %eax.l7: popl %ebp ret Setup Body1 Body2a Body2b Finish 30

Condi6onal Branch Example (Cont.) int goto_ad(int x, int y) { int result; if (x <= y) goto Else; result = x-y; goto Exit; Else: result = y-x; Exit: return result; absdiff: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax cmpl %eax, %edx jle.l6 subl %eax, %edx movl %edx, %eax jmp.l7.l6: subl %edx, %eax.l7: popl %ebp ret Setup Body1 Body2a Body2b Finish 31

General Condi6onal Expression Transla6on C Code val = Test? Then_Expr : Else_Expr; val = x>y? x-y : y-x; Goto Version nt =!Test; if (nt) goto Else; val = Then_Expr; goto Done; Else: val = Else_Expr; Done:... Test is expression returning integer = 0 interpreted as false 0 interpreted as true Create separate code regions for then & else expressions Execute appropriate one 32

Using Condi6onal Moves Condi6onal Move Instruc6ons InstrucSon supports: if (Test) Dest ß Src Supported in post- 1995 x86 processors GCC does not always use them Wants to preserve compasbility with ancient processors Enabled for x86-64 Use switch march=686 for IA32 Why? Branches are very disrupsve to instrucson flow through pipelines CondiSonal move do not require control transfer C Code val = Test? Then_Expr : Else_Expr; Goto Version tval = Then_Expr; result = Else_Expr; t = Test; if (t) result = tval; return result; 33

Condi6onal Move Example: x86-64 int absdiff(int x, int y) { int result; if (x > y) { result = x-y; else { result = y-x; return result; x in %edi y in %esi absdiff: movl %edi, %edx subl %esi, %edx # tval = x-y movl %esi, %eax subl %edi, %eax # result = y-x cmpl %esi, %edi # Compare x:y cmovg %edx, %eax # If >, result = tval ret 34

Bad Cases for Condi6onal Move Expensive ComputaSons val = Test(x)? Hard1(x) : Hard2(x); Both values get computed Only makes sense when computa6ons are very simple Risky ComputaSons val = p? *p : 0; Both values get computed May have undesirable effects ComputaSons with side effects val = x > 0? x*=7 : x+=3; Both values get computed Must be side- effect free 35

Today Complete addressing mode, address computa6on (leal) Arithme6c opera6ons x86-64 Control: Condi6on codes Condi6onal branches and moves Loops 36

Do- While Loop Example C Code int pcount_do(unsigned x) { int result = 0; do { result += x & 0x1; x >>= 1; while (x); return result; Goto Version int pcount_do(unsigned x) { int result = 0; loop: result += x & 0x1; x >>= 1; if (x) goto loop; return result; Count number of 1 s in argument x ( popcount ) Use condi6onal branch to either con6nue looping or to exit loop 37

Do- While Loop Compila6on Goto Version int pcount_do(unsigned x) { int result = 0; loop: result += x & 0x1; x >>= 1; if (x) goto loop; return result; Registers: %edx x %ecx result movl $0, %ecx # result = 0.L2: # loop: movl %edx, %eax andl $1, %eax # t = x & 1 addl %eax, %ecx # result += t shrl %edx # x >>= 1 jne.l2 # If!0, goto loop 38

General Do- While Transla6on C Code do Body while (Test); Body: { Statement 1 ; Statement 2 ; Statement n ; Goto Version loop: Body if (Test) goto loop Test returns integer = 0 interpreted as false 0 interpreted as true 39

While Loop Example C Code int pcount_while(unsigned x) { int result = 0; while (x) { result += x & 0x1; x >>= 1; return result; Goto Version int pcount_do(unsigned x) { int result = 0; if (!x) goto done; loop: result += x & 0x1; x >>= 1; if (x) goto loop; done: return result; Is this code equivalent to the do- while version? Must jump out of loop if test fails 40

General While Transla6on While version while (Test) Body Do- While Version if (!Test) goto done; do Body while(test); done: Goto Version if (!Test) goto done; loop: Body if (Test) goto loop; done: 41

For Loop Example C Code #define WSIZE 8*sizeof(int) int pcount_for(unsigned x) { int i; int result = 0; for (i = 0; i < WSIZE; i++) { unsigned mask = 1 << i; result += (x & mask)!= 0; return result; Is this code equivalent to other versions? 42

For Loop Form General Form for (Init; Test; Update ) Body for (i = 0; i < WSIZE; i++) { unsigned mask = 1 << i; result += (x & mask)!= 0; i = 0 i < WSIZE i++ { Init Test Update Body unsigned mask = 1 << i; result += (x & mask)!= 0; 43

For Loop à While Loop For Version for (Init; Test; Update ) Body While Version Init; while (Test ) { Body Update; 44

For Loop à à Goto For Version for (Init; Test; Update ) Body While Version Init; if (!Test) goto done; loop: Body Update if (Test) goto loop; done: Init; while (Test ) { Body Update; Init; if (!Test) goto done; do Body Update while(test); done: 45

For Loop Conversion Example C Code #define WSIZE 8*sizeof(int) int pcount_for(unsigned x) { int i; int result = 0; for (i = 0; i < WSIZE; i++) { unsigned mask = 1 << i; result += (x & mask)!= 0; return result; IniSal test can be opsmized away Goto Version int pcount_for_gt(unsigned x) { int i; int result = 0; i = 0; if (!(i < WSIZE)) goto done; loop: { unsigned mask = 1 << i; result += (x & mask)!= 0; i++; Update if (i < WSIZE) goto loop; done: return result; Test Init!Test Body 46

Summary Today Complete addressing mode, address computason (leal) ArithmeSc operasons Control: CondiSon codes CondiSonal branches & condisonal moves Loops Next Time Switch statements Stack Call / return Procedure call discipline 47