cs107, lecture 13 - stanford university€¦ · 10 mov •sometimes, you’ll see the following:...
TRANSCRIPT
![Page 1: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/1.jpg)
1This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved.
Based on slides created by Marty Stepp, Cynthia Lee, Chris Gregg, and others.
CS107, Lecture 13Assembly: Control Flow
Reading: B&O 3.6
![Page 2: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/2.jpg)
2
Learning Assembly
Moving data around
Arithmetic and logical
operationsControl flow Function calls
10/28 11/4 Today 11/11
Reference Sheet: cs107.stanford.edu/resources/x86-64-reference.pdfSee more guides on Resources page of course website!
![Page 3: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/3.jpg)
3
Learning Goals• Learn about how assembly stores comparison and operation results in
condition codes• Understand how assembly implements loops and control flow
![Page 4: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/4.jpg)
4
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 5: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/5.jpg)
5
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 6: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/6.jpg)
6
Register ResponsibilitiesSome registers take on special responsibilities during program execution.• %rax stores the return value• %rdi stores the first parameter to a function• %rsi stores the second parameter to a function• %rdx stores the third parameter to a function• %rip stores the address of the next instruction to execute• %rsp stores the address of the current top of the stack
See the x86-64 Guide and Reference Sheet on the Resources webpage for more!
![Page 7: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/7.jpg)
7
mov Variants• mov can take an optional suffix (b,w,l,q) that specifies the size of data to move: movb, movw, movl, movq
• mov only updates the specific register bytes or memory locations indicated.• Exception: movl writing to a register will also set high order 4 bytes to 0.
![Page 8: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/8.jpg)
8
leaThe lea instruction copies an “effective address” from one place to another.
lea src,dst
Unlike mov, which copies data at the address src to the destination, lea copies the value of src itself to the destination.
![Page 9: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/9.jpg)
9
No-Op• The nop/nopl instructions are “no-op” instructions – they do nothing!• Why? To make functions align on nice multiple-of-8 address boundaries.
“Sometimes, doing nothing is the way to be most productive.” –Philosopher Nick
![Page 10: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/10.jpg)
10
Mov• Sometimes, you’ll see the following: mov %ebx, %ebx• What does this do? It zeros out the top 32 register bits, because when mov is
performed on an e- register, the rest of the 64 bits are zeroed out.
![Page 11: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/11.jpg)
11
xor• Sometimes, you’ll see the following: xor %ebx, %ebx• What does this do? It sets %ebx to zero! May be more efficient than using
mov.
![Page 12: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/12.jpg)
12
Assembly Exercise 100000000004005ac <sum_example1>:
4005bd: 8b 45 e8 mov %esi,%eax4005c3: 01 d0 add %edi,%eax4005cc: c3 retq
Which of the following is most likely to have generated the above assembly?// A)void sum_example1() {
int x;int y;int sum = x + y;
}
// B)int sum_example1(int x, int y) {
return x + y;}
// C)void sum_example1(int x, int y) {
int sum = x + y;}
![Page 13: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/13.jpg)
13
Assembly Exercise 20000000000400578 <sum_example2>:
400578: 8b 47 0c mov 0xc(%rdi),%eax40057b: 03 07 add (%rdi),%eax40057d: 2b 47 18 sub 0x18(%rdi),%eax400580: c3 retq
int sum_example2(int arr[]) {int sum = 0;sum += arr[0];sum += arr[3];sum -= arr[6];return sum;
}
What location or value in the assembly above represents the C code’s sum variable?
![Page 14: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/14.jpg)
14
Assembly Exercise 20000000000400578 <sum_example2>:
400578: 8b 47 0c mov 0xc(%rdi),%eax40057b: 03 07 add (%rdi),%eax40057d: 2b 47 18 sub 0x18(%rdi),%eax400580: c3 retq
int sum_example2(int arr[]) {int sum = 0;sum += arr[0];sum += arr[3];sum -= arr[6];return sum;
}
What location or value in the assembly above represents the C code’s sum variable?
%eax
![Page 15: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/15.jpg)
15
Assembly Exercise 30000000000400578 <sum_example2>:
400578: 8b 47 0c mov 0xc(%rdi),%eax40057b: 03 07 add (%rdi),%eax40057d: 2b 47 18 sub 0x18(%rdi),%eax400580: c3 retq
int sum_example2(int arr[]) {int sum = 0;sum += arr[0];sum += arr[3];sum -= arr[6];return sum;
}
What location or value in the assembly code above represents the C code’s 6 (as in arr[6])?
![Page 16: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/16.jpg)
16
Assembly Exercise 30000000000400578 <sum_example2>:
400578: 8b 47 0c mov 0xc(%rdi),%eax40057b: 03 07 add (%rdi),%eax40057d: 2b 47 18 sub 0x18(%rdi),%eax400580: c3 retq
int sum_example2(int arr[]) {int sum = 0;sum += arr[0];sum += arr[3];sum -= arr[6];return sum;
}
What location or value in the assembly code above represents the C code’s 6 (as in arr[6])?
0x18
![Page 17: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/17.jpg)
17
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 18: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/18.jpg)
18
Control• In C, we have control flow statements like if, else, while, for, etc. to write
programs that are more expressive than just one instruction following another.• This is conditional execution of statements: executing statements if one
condition is true, executing other statements if one condition is false, etc.• How is this represented in assembly?
• A way to store conditions that we will check later• Assembly instructions whose behavior is dependent on these conditions
![Page 19: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/19.jpg)
19
Control
if (x > y) {// a
} else {// b
}
In Assembly:1. Calculate the condition result2. Based on the result, go to a or b
There are special “condition code” registers that automatically store the results of the most recent arithmetic or logical operation.
![Page 20: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/20.jpg)
20
Condition CodesAlongside normal registers, the CPU also has single-bit condition code registers. They store the results of the most recent arithmetic or logical operation.
Most common condition codes:• CF: Carry flag. The most recent operation generated a carry out of the most
significant bit. Used to detect overflow for unsigned operations.• ZF: Zero flag. The most recent operation yielded zero.• SF: Sign flag. The most recent operation yielded a negative value.• OF: Overflow flag. The most recent operation caused a two’s-complement
overflow-either negative or positive.
![Page 21: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/21.jpg)
21
Condition Codes
• CF: Carry flag. The most recent operation generated a carry out of the most significant bit. Used to detect overflow for unsigned operations.
• ZF: Zero flag. The most recent operation yielded zero.
• SF: Sign flag. The most recent operation yielded a negative value.
• OF: Overflow flag. The most recent operation caused a two’s-complement overflow-either negative or positive.
int a = 5;int b = -5;int t = a + b;
Common Condition Codes Which flag would be set after this code?
![Page 22: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/22.jpg)
22
Condition Codes
• CF: Carry flag. The most recent operation generated a carry out of the most significant bit. Used to detect overflow for unsigned operations.
• ZF: Zero flag. The most recent operation yielded zero.
• SF: Sign flag. The most recent operation yielded a negative value.
• OF: Overflow flag. The most recent operation caused a two’s-complement overflow-either negative or positive.
int a = 5;int b = -5;int t = a + b;
Common Condition Codes Which flag would be set after this code?
![Page 23: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/23.jpg)
23
Condition Codes
• CF: Carry flag. The most recent operation generated a carry out of the most significant bit. Used to detect overflow for unsigned operations.
• ZF: Zero flag. The most recent operation yielded zero.
• SF: Sign flag. The most recent operation yielded a negative value.
• OF: Overflow flag. The most recent operation caused a two’s-complement overflow-either negative or positive.
int a = 5;int b = -20;int t = a + b;
Common Condition Codes Which flag would be set after this code?
![Page 24: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/24.jpg)
24
Condition Codes
• CF: Carry flag. The most recent operation generated a carry out of the most significant bit. Used to detect overflow for unsigned operations.
• ZF: Zero flag. The most recent operation yielded zero.
• SF: Sign flag. The most recent operation yielded a negative value.
• OF: Overflow flag. The most recent operation caused a two’s-complement overflow-either negative or positive.
int a = 5;int b = -20;int t = a + b;
Common Condition Codes Which flag would be set after this code?
![Page 25: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/25.jpg)
25
Condition Codes• Different combinations of condition codes can indicate different things.
• E.g. To check equality, we can look at the ZERO flag (a = b means a – b = 0)
• Previously-discussed arithmetic and logical instructions update these flags. leadoes not (it was intended only for address computations).
• Logical operations (xor, etc.) set carry and overflow flags to zero.• Shift operations set the carry flag to the last bit shifted out and set the
overflow flag to zero.• For more complicated reasons, inc and dec set the overflow and zero flags, but
leave the carry flag unchanged.
![Page 26: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/26.jpg)
26
Setting Condition CodesIn addition to being set automatically from logical and arithmetic operations, we can also update condition codes ourselves.• The cmp instruction is like the subtraction instruction, but it does not store the
result anywhere. It just sets condition codes. (Note the operand order!)CMP S1, S2 S2 – S1
Instruction Description
cmpb Compare byte
cmpw Compare word
cmpl Compare double word
cmpq Compare quad word
![Page 27: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/27.jpg)
27
Setting Condition CodesIn addition to being set automatically from logical and arithmetic operations, we can also update condition codes ourselves.• The test instruction is like the AND instruction, but it does not store the result
anywhere. It just sets condition codes.TEST S1, S2 S2 & S1
Cool trick: if we pass the same value for both operands, we can check the sign of that value using the Sign Flag and Zero Flag condition codes!
Instruction Description
testb Test byte
testw Test word
testl Test double word
testq Test quad word
![Page 28: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/28.jpg)
28
Control• In C, we have control flow statements like if, else, while, for, etc. to write
programs that are more expressive than just one instruction following another.• This is conditional execution of statements: executing statements if one
condition is true, executing other statements if one condition is false, etc.• How is this represented in assembly?
• A way to store conditions that we will check later• Assembly instructions whose behavior is dependent on these conditions
![Page 29: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/29.jpg)
29
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 30: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/30.jpg)
30
Condition Code-Dependent InstructionsThere are three common instruction types that use condition codes:• set instructions conditionally set a byte to 0 or 1• new versions of mov instructions conditionally move data• jmp instructions conditionally jump to a different next instruction
![Page 31: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/31.jpg)
31
Conditionally Setting BytesInstruction Synonym Set Condition (1 if true, 0 if false)
sete D setz Equal / zero
setne D setnz Not equal / not zero
sets D Negative
setns D Nonnegative
setg D setnle Greater (signed >)
setge D setnl Greater or equal (signed >=)
setl D setnge Less (signed <)
setle D setng Less or equal (signed <=)
seta D setnbe Above (unsigned >)
setae D setnb Above or equal (unsigned >=)
setb D setnae Below (unsigned <)
setbe D setna Below or equal (unsigned <=)
![Page 32: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/32.jpg)
32
Conditionally Moving DataInstruction Synonym Move Condition
cmove S,R cmovz Equal / zero (ZF = 1)
cmovne S,R cmovnz Not equal / not zero (ZF = 0)
cmovs S,R Negative (SF = 1)
cmovns S,R Nonnegative (SF = 0)
cmovg S,R cmovnle Greater (signed >) (SF = 0 and SF = OF)
cmovge S,R cmovnl Greater or equal (signed >=) (SF = OF)
cmovl S,R cmovnge Less (signed <) (SF != OF)
cmovle S,R cmovng Less or equal (signed <=) (ZF = 1 or SF! = OF)
cmova S,R cmovnbe Above (unsigned >) (CF = 0 and ZF = 0)
cmovae S,R cmovnb Above or equal (unsigned >=) (CF = 0)
cmovb S,R cmovnae Below (unsigned <) (CF = 1)
cmovbe S,R cmovna Below or equal (unsigned <=) (CF = 1 or ZF = 1)
![Page 33: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/33.jpg)
33
Conditionally Moving Data – Lab6int signed_division(int x) {
return x / 4;}
signed_division:leal 3(%rdi), %eaxtestl %edi, %edicmovns %edi, %eaxsarl $2, %eaxret
Put x + 3 into %eaxCheck the sign of xIf x is positive, put x into %eaxDivide %eax by 4
![Page 34: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/34.jpg)
34
jmpThe jmp instruction jumps to another instruction in the assembly code (“Unconditional Jump”).
jmp Label (Direct Jump)jmp *Operand (Indirect Jump)
The destination can be hardcoded into the instruction (direct jump):jmp 404f8 <loop+0xb> # jump to instruction at 0x404f8
The destination can also be read from a memory location (indirect jump):jmp *%rax # jump to instruction at address in %rax
![Page 35: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/35.jpg)
35
Conditional JumpsThere are also variants of jmp that jump only if certain conditions are true (“Conditional Jump”). The jump location for these must be hardcoded into the instruction.
Instruction Synonym Set Condition
je Label jz Equal / zero (ZF = 1)
jne Label jnz Not equal / not zero (ZF = 0)
js Label Negative (SF = 1)
jns Label Nonnegative (SF = 0)
jg Label jnle Greater (signed >) (SF = 0 and SF = OF)
jge Label jnl Greater or equal (signed >=) (SF = OF)
jl Label jnge Less (signed <) (SF != OF)
jle Label jng Less or equal (signed <=) (ZF = 1 or SF! = OF)
ja Label jnbe Above (unsigned >) (CF = 0 and ZF = 0)
jae Label jnb Above or equal (unsigned >=) (CF = 0)
jb Label jnae Below (unsigned <) (CF = 1)
jbe Label jna Below or equal (unsigned <=) (CF = 1 or ZF = 1)
![Page 36: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/36.jpg)
36
Loops and Control FlowJump instructions are critical to implementing control flow in assembly. Let’s see why!
![Page 37: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/37.jpg)
37
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 38: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/38.jpg)
38
Practice: Fill In The Blank
C Code What does this assembly code translate to?int if_then(int param1) {
if (__________) {__________;
}
return ______;}
00000000004004d6 <if_then>:4004d6: cmp $0x6,%edi4004d9: jne 4004de4004db: add $0x1,%edi4004de: lea (%rdi,%rdi,1),%eax4004e1: retq
![Page 39: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/39.jpg)
39
Practice: Fill In The Blank
C Code What does this assembly code translate to?00000000004004d6 <if_then>:
4004d6: cmp $0x6,%edi4004d9: jne 4004de4004db: add $0x1,%edi4004de: lea (%rdi,%rdi,1),%eax4004e1: retq
int if_then(int param1) {if (param1 == 6) {
__________;}
return ______;}
![Page 40: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/40.jpg)
40
Practice: Fill In The Blank
C Code What does this assembly code translate to?int if_then(int param1) {
if (param1 == 6) {param1++;
}
return ______;}
00000000004004d6 <if_then>:4004d6: cmp $0x6,%edi4004d9: jne 4004de4004db: add $0x1,%edi4004de: lea (%rdi,%rdi,1),%eax4004e1: retq
![Page 41: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/41.jpg)
41
Practice: Fill In The Blank
C Code What does this assembly code translate to?int if_then(int param1) {
if (param1 == 6) {param1++;
}
return param1 * 2;}
00000000004004d6 <if_then>:4004d6: cmp $0x6,%edi4004d9: jne 4004de4004db: add $0x1,%edi4004de: lea (%rdi,%rdi,1),%eax4004e1: retq
![Page 42: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/42.jpg)
42
Common If-Else Construction
if (num > 3) {x = 10;
} else {x = 7;
}
num++;
TestJump past if-body if test failsIf-bodyJump past else-bodyElse-bodyPast else body
If-Else In C If-Else In Assembly
![Page 43: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/43.jpg)
43
Announcements• Mid-Quarter Check-in page posted on course website• Midterm grade added to Gradebook page• Note about makeup labs• Assignment 6 released tomorrow – Assembly exercises
• Security• Reverse engineering
![Page 44: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/44.jpg)
44
Mid-Lecture Check-InWe can now answer the following questions:
1. How does assembly keep track of the result of the most recent arithmetic or logical operation?
2. What is the difference between cmp and sub? Between test and and?3. Why is the jmp family of instructions crucial for implementing control flow?
![Page 45: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/45.jpg)
45
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 46: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/46.jpg)
46
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
![Page 47: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/47.jpg)
47
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Set %eax (i) to 0.
![Page 48: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/48.jpg)
48
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Jump to another instruction.
![Page 49: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/49.jpg)
49
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Compare %eax (i) to 0x63 (99) by calculating %eax – 0x63. This is 0 – 99 = -99, so it sets the Sign Flag to 1.
![Page 50: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/50.jpg)
50
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
jle means “jump if less than or equal”. The sign flag indicates the result was negative, so we jump.
![Page 51: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/51.jpg)
51
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Add 1 to %eax (i).
![Page 52: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/52.jpg)
52
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Compare %eax (i) to 0x63 (99) by calculating %eax – 0x63. This is 1 – 99 = -98, so it sets the Sign Flag to 1.
![Page 53: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/53.jpg)
53
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
jle means “jump if less than or equal”. The sign flag indicates the result was negative, so we jump.
![Page 54: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/54.jpg)
54
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
We continue in this pattern until we do not make this conditional jump. When will that be?
![Page 55: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/55.jpg)
55
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
We will stop looping when this comparison says that %eax – 0x63 > 0!
![Page 56: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/56.jpg)
56
Loops and Control Flowvoid loop() {
int i = 0;while (i < 100) {
i++;}
}
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
Then, we return from the function.
![Page 57: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/57.jpg)
57
Common While Loop Construction
while (test) {body
}
Jump to testBodyTestJump to body if success
C Assembly
0x0000000000400570 <+0>: mov $0x0,%eax0x0000000000400575 <+5>: jmp 0x40057a <loop+10>0x0000000000400577 <+7>: add $0x1,%eax0x000000000040057a <+10>: cmp $0x63,%eax0x000000000040057d <+13>: jle 0x400577 <loop+7>0x000000000040057f <+15>: repz retq
From Previous Slide:
![Page 58: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/58.jpg)
58
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
![Page 59: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/59.jpg)
59
Common For Loop Construction
for (init; test; update) {body
}
C
![Page 60: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/60.jpg)
60
Common For Loop Construction
for (init; test; update) {body
}
initwhile(test) {
bodyupdate
}
C C Equivalent While Loop
![Page 61: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/61.jpg)
61
Common For Loop Construction
for (init; test; update) {body
}
initwhile(test) {
bodyupdate
}
C C Equivalent While Loop
Jump to testBodyTestJump to body if success
While Loop Assembly
![Page 62: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/62.jpg)
62
Common For Loop Construction
for (init; test; update) {body
}
initwhile(test) {
bodyupdate
}
C C Equivalent While Loop
InitJump to testBodyUpdateTestJump to body if success
For Loop Assembly
![Page 63: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/63.jpg)
63
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateJump to test
GCC For Loop Output Possible Alternative?
![Page 64: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/64.jpg)
64
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateTestJump to body if succeeds
GCC For Loop Output Optimized For Loop Output
for (int i = 0; i < n; i++) // n = 100
![Page 65: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/65.jpg)
65
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateTestJump to body if succeeds
GCC For Loop Output Optimized For Loop Output
for (int i = 0; i < n; i++) // n = 100
InitializationJump to testTestJump to bodyBodyUpdateTestJump to bodyBodyUpdateTestJump to body...
![Page 66: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/66.jpg)
66
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateTestJump to body if succeeds
GCC For Loop Output Optimized For Loop Output
for (int i = 0; i < n; i++) // n = 100
InitializationJump to testTestJump to bodyBodyUpdateTestJump to bodyBodyUpdateTestJump to body...
![Page 67: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/67.jpg)
67
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateJump to test
Standard For Loop Output Possible Alternative?
for (int i = 0; i < n; i++) // n = 100
InitializationTestNo jumpBodyUpdateJump to testTestNo jumpBodyUpdateJump to test...
![Page 68: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/68.jpg)
68
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateJump to test
Standard For Loop Output Possible Alternative?
for (int i = 0; i < n; i++) // n = 100
InitializationTestNo jumpBodyUpdateJump to testTestNo jumpBodyUpdateJump to test...
![Page 69: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/69.jpg)
69
GCC For Loop Output
InitializationJump to testBodyUpdateTestJump to body if success
InitializationTestJump past loop if failsBodyUpdateJump to test
GCC For Loop Output Possible Alternative?
Which instructions are better when n = 0?
for (int i = 0; i < n; i++)
![Page 70: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/70.jpg)
70
Optimizing Instruction Counts• Both loop forms have the same static instruction count – same number of
written instructions.• But they have different dynamic instruction counts – the number of times
these instructions are executed when the program is run.• If n = 0, right is best• If n is large, left is best
• The compiler may emit static instruction counts many times longer than alternatives, but which is more efficient if loop executes many times.
• Problem: the compiler may not know whether the loop will execute many times! Hard problem….. (take EE108, EE180, CS316 for more!)
![Page 71: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/71.jpg)
71
Optimizations• Conditional Moves can sometimes eliminate “branches” (jumps), which are
particularly inefficient on modern computer hardware.• Processors try to predict the future execution of instructions for maximum
performance. This is difficult to do with jumps.
![Page 72: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/72.jpg)
72
Practice: Fill In The Blank
C Code What does this assembly code translate to?// a in %rdi, b in %rsiloop:
movl $1, %eaxjmp .L2
.L3leaq (%rdi,%rsi), %rdximulq %rdx, %raxaddq $1, %rdi
.L2cmpq %rsi, %rdijl .L3
rep; ret
long loop(long a, long b) {long result = _______;while (_________) {result = __________;a = _________;
}return result;
} Common while loop construction:Jump to testBodyTestJump to body if success
![Page 73: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/73.jpg)
73
Practice: Fill In The Blank
C Code What does this assembly code translate to?// a in %rdi, b in %rsiloop:
movl $1, %eaxjmp .L2
.L3leaq (%rdi,%rsi), %rdximulq %rdx, %raxaddq $1, %rdi
.L2cmpq %rsi, %rdijl .L3
rep; ret
long loop(long a, long b) {long result = 1;while (_________) {result = __________;a = _________;
}return result;
} Common while loop construction:Jump to testBodyTestJump to body if success
![Page 74: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/74.jpg)
74
Practice: Fill In The Blank
C Code What does this assembly code translate to?// a in %rdi, b in %rsiloop:
movl $1, %eaxjmp .L2
.L3leaq (%rdi,%rsi), %rdximulq %rdx, %raxaddq $1, %rdi
.L2cmpq %rsi, %rdijl .L3
rep; ret
long loop(long a, long b) {long result = 1;while (a < b) {result = __________;a = _________;
}return result;
} Common while loop construction:Jump to testBodyTestJump to body if success
![Page 75: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/75.jpg)
75
Practice: Fill In The Blank
C Code What does this assembly code translate to?// a in %rdi, b in %rsiloop:
movl $1, %eaxjmp .L2
.L3leaq (%rdi,%rsi), %rdximulq %rdx, %raxaddq $1, %rdi
.L2cmpq %rsi, %rdijl .L3
rep; ret
long loop(long a, long b) {long result = 1;while (a < b) {result = result*(a+b);a = _________;
}return result;
} Common while loop construction:Jump to testBodyTestJump to body if success
![Page 76: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/76.jpg)
76
Practice: Fill In The Blank
C Code What does this assembly code translate to?// a in %rdi, b in %rsiloop:
movl $1, %eaxjmp .L2
.L3leaq (%rdi,%rsi), %rdximulq %rdx, %raxaddq $1, %rdi
.L2cmpq %rsi, %rdijl .L3
rep; ret
long loop(long a, long b) {long result = 1;while (a < b) {result = result*(a+b);a = a + 1;
}return result;
} Common while loop construction:Jump to testBodyTestJump to body if success
![Page 77: CS107, Lecture 13 - Stanford University€¦ · 10 Mov •Sometimes, you’ll see the following: mov%ebx, %ebx •What does this do? It zeros out the top 32 register bits, because](https://reader034.vdocument.in/reader034/viewer/2022051811/601e6a831c102e44eb58bb9c/html5/thumbnails/77.jpg)
77
Plan For Today• Recap: Arithmetic and Logic• Control Flow
• Condition Codes• Assembly Instructions• If statements• While loops• For loops
Next time: function calls in assembly