escape.cloop.csum_array.ctest_func.cx86-64-reference.pdfLecture12.pdf
Assembly Execution and %rip
Register Responsibilities
Instructions Are Just Bytes!
%rip

程序计数器program counter在x86-64中称为%rip,存放着下一条要被执行的指令的地址。



jmp
Control Flow Mechanics 控制流
Conditional Jumps 条件跳转指令汇总
Condition Codes 条件码
Setting Condition Codes 设置条件码
用cmp指令或者test指令来设置。


Test命令将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。
If statements
Loops 汇编循环
While loops
For loops
gdb tips
Other Instructions That Depend On Condition Codes
set: Read condition codes set指令

x装在edi中,读取flags的值,如果%edi小于等于15,就将%al置1,否则置0,然后清零%rax的高32位,返回。
cmov: Conditional move cmov指令



如果是负数则 (x + 3) >> 2,如果非负则 x >> 2,都是算术右移,带符号。
Live Session Slides
Remember test exists
Practice: “Escape Room”


// escape_room.c#include <stdio.h>#include <stdbool.h>bool escape_room(int x) {if (2 * x > 5) {return true;}if (x == 1) {return true;}return false;}int main() {printf("escape room %d\n", escape_room(4));return 0;}








