this is cs50 · 2019-12-31 · main: # @main.cfi_startproc # bb#0: pushq...

168
This is CS50

Upload: others

Post on 27-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

This is CS50

Page 2: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 3: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 4: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 5: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 6: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 7: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 8: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

clang hello.c

./a.out

Page 9: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

clang -o hello hello.c

./hello

Page 10: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ printf("hello, world\n");}

Page 11: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 12: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 13: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 14: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 15: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 16: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 17: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 18: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

clang -o hello hello.c -lcs50

./hello

Page 19: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

make hello

./hello

Page 20: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

compiling

Page 21: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 22: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 23: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 24: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 25: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string get_string(string prompt);#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 26: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string get_string(string prompt);#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 27: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string get_string(string prompt);int printf(string format, ...);

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 28: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...string get_string(string prompt);int printf(string format, ...);...

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 29: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 30: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...string get_string(string prompt);int printf(string format, ...);...

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 31: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...main: # @main .cfi_startproc# BB#0: pushq %rbp.Ltmp0: .cfi_def_cfa_offset 16.Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp xorl %eax, %eax movl %eax, %edi movabsq $.L.str, %rsi movb $0, %al callq get_string movabsq $.L.str.1, %rdi movq %rax, -8(%rbp) movq -8(%rbp), %rsi movb $0, %al callq printf ...

Page 32: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...main: # @main .cfi_startproc# BB#0: pushq %rbp.Ltmp0: .cfi_def_cfa_offset 16.Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp xorl %eax, %eax movl %eax, %edi movabsq $.L.str, %rsi movb $0, %al callq get_string movabsq $.L.str.1, %rdi movq %rax, -8(%rbp) movq -8(%rbp), %rsi movb $0, %al callq printf ...

Page 33: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...main: # @main .cfi_startproc# BB#0: pushq %rbp.Ltmp0: .cfi_def_cfa_offset 16.Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp xorl %eax, %eax movl %eax, %edi movabsq $.L.str, %rsi movb $0, %al callq get_string movabsq $.L.str.1, %rdi movq %rax, -8(%rbp) movq -8(%rbp), %rsi movb $0, %al callq printf ...

Page 34: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 35: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

...main: # @main .cfi_startproc# BB#0: pushq %rbp.Ltmp0: .cfi_def_cfa_offset 16.Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp xorl %eax, %eax movl %eax, %edi movabsq $.L.str, %rsi movb $0, %al callq get_string movabsq $.L.str.1, %rdi movq %rax, -8(%rbp) movq -8(%rbp), %rsi movb $0, %al callq printf ...

Page 36: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000011111000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000101000000000000000010000000001010101010010001000100111100101010010001000001111101100000100000011000111000000100010011100011101001000101111100000000000000000000000000000000000000000000000000000000000000000101100000000000011101000000000000000000000000000000000000100100010111111000000000000000000000000000000000000000000000000000000000000000001001000...

Page 37: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 38: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 39: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 40: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 41: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <cs50.h>#include <stdio.h>

int main(void){ string name = get_string("What's your name?\n"); printf("hello, %s\n", name);}

Page 42: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

hello.c

Page 43: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

hello.c cs50.c

Page 44: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

hello.c cs50.c stdio.c

Page 45: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

hello.c cs50.c printf.c

Page 46: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000011111000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000101000000000000000010000000001010101010010001000100111100101010010001000001111101100000100000011000111000000100010011100011101001000101111100000000000000000000000000000000000000000000000000000000000000000101100000000000011101000000000000000000000000000000000000100100010111111000000000000000000000000000000000000000000000000000000000000000001001000...

cs50.c printf.c

Page 47: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000011111000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000101000000000000000010000000001010101010010001000100111100101010010001000001111101100000100000011000111000000100010011100011101001000101111100000000000000000000000000000000000000000000000000000000000000000101100000000000011101000000000000000000000000000000000000100100010111111000000000000000000000000000000000000000000000000000000000000000001001000...

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000011000000000011111000000000000000010000000000000000000000001100000000001111000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000101000001100100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000011100000000000000001110000000001000000000000000001110000000000000110010000000000000001000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110000100101000000000000000000000000000000000000000000000000...

printf.c

Page 48: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000011111000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000101000000000000000010000000001010101010010001000100111100101010010001000001111101100000100000011000111000000100010011100011101001000101111100000000000000000000000000000000000000000000000000000000000000000101100000000000011101000000000000000000000000000000000000100100010111111000000000000000000000000000000000000000000000000000000000000000001001000...

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000011000000000011111000000000000000010000000000000000000000001100000000001111000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000101000001100100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000011100000000000000001110000000001000000000000000001110000000000000110010000000000000001000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110000100101000000000000000000000000000000000000000000000000...

0010111101101100011010010110001001100011001011100111001101101111001011100011011000100000001011110111010101110011011100100010111101101100011010010110001000101111011110000011100000110110010111110011011000110100001011010110110001101001011011100111010101111000001011010110011101101110011101010010111101101100011010010110001001100011010111110110111001101111011011100111001101101000011000010111001001100101011001000010111001100001001000000010000001000001010100110101111101001110010001010100010101000100010001010100010000100000001010000010000000101111011011000110100101100010001011110111100000111000001101100101111100110110001101000010110101101100011010010110111001110101011110000010110101100111011011100111010100101111011011000110010000101101011011000110100101101110011101010111100000101101011110000011100000110110001011010011011000110100...

Page 49: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000011111000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000101000000000000000010000000001010101010010001000100111100101010010001000001111101100000100000011000111000000100010011100011101001000101111100000000000000000000000000000000000000000000000000000000000000000101100000000000011101000000000000000000000000000000000000100100010111111000000000000000000000000000000000000000000000000000000000000000001001000...0111111101000101010011000100011000000010000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000011000000000011111000000000000000010000000000000000000000001100000000001111000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000101000001100100000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000011100000000000000001110000000001000000000000000001110000000000000110010000000000000001000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110000100101000000000000000000000000000000000000000000000000...0010111101101100011010010110001001100011001011100111001101101111001011100011011000100000001011110111010101110011011100100010111101101100011010010110001000101111011110000011100000110110010111110011011000110100001011010110110001101001011011100111010101111000001011010110011101101110011101010010111101101100011010010110001001100011010111110110111001101111011011100111001101101000011000010111001001100101011001000010111001100001001000000010000001000001010100110101111101001110010001010100010101000100010001010100010000100000001010000010000000101111011011000110100101100010001011110111100000111000001101100101111100110110001101000010110101101100011010010110111001110101011110000010110101100111011011100111010100101111011011000110010000101101011011000110100101101110011101010111100000101101011110000011100000110110001011010011011000110100...

Page 50: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

preprocessing

compiling

assembling

linking

Page 51: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

compiling

Page 52: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

debugging

Page 53: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 54: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 55: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50

Page 56: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50

printf

Page 57: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

CS50 IDEide.cs50.io

Page 58: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50

printf

debug50

Page 59: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50

printf

debug50

check50

Page 60: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50

printf

debug50

check50

style50

Page 61: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50 correctness

printf correctness

debug50 correctness

check50 correctness

style50 style

Page 62: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

help50 correctness

printf correctness

debug50 correctness

check50 correctness

style50 style

ddb

Page 63: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

correctness

design

style

Page 64: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

arrays

Page 65: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char 1 byte

Page 66: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char 1 byte

int 4 bytes

Page 67: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char 1 byte

int 4 bytes

float 4 bytes

Page 68: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char 1 byte

int 4 bytes

float 4 bytes

long 8 bytes

Page 69: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char 1 byte

int 4 bytes

float 4 bytes

long 8 bytes

double 8 bytes

Page 70: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

bool 1 byte

char 1 byte

int 4 bytes

float 4 bytes

long 8 bytes

double 8 bytes

Page 71: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

bool 1 byte

char 1 byte

int 4 bytes

float 4 bytes

long 8 bytes

double 8 bytes

string ? bytes

...

Page 72: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 73: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 74: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 75: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 76: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 77: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 78: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 79: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 80: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 81: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 82: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 83: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

char c1 = 'H';

char c2 = 'I';

char c3 = '!';

Page 84: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 85: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hc1

Page 86: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hc1

Ic2

Page 87: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hc1

Ic2

!c3

Page 88: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72c1

73c2

33c3

Page 89: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

01001000

c1

01001001

c2

00100001

c3

Page 90: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72c1

73c2

33c3

Page 91: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

int score1 = 72;

int score2 = 73;

int score3 = 33;

Page 92: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 93: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72score1

Page 94: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72score1

73score2

Page 95: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72score1

73score2

33score3

Page 96: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

00000000000000000000000001001000

score1

00000000000000000000000001001001

score2

00000000000000000000000000100001

score3

Page 97: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

int score1 = 72;

int score2 = 73;

int score3 = 33;

Page 98: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

int scores[3];

scores[0] = 72;

scores[1] = 73;

scores[2] = 33;

Page 99: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72scores[0]

73scores[1]

33scores[2]

Page 100: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 101: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hc1

Ic2

!c3

Page 102: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hc1

Ic2

!c3

Page 103: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hs[0]

Is[1]

!s[2]

Page 104: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string

Page 105: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string s = "HI!";

Page 106: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 107: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hs

I

!

Page 108: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hs

I

!

\0

Page 109: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Hs[0]

Is[1]

!s[2]

\0s[3]

Page 110: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string name1 = "EMMA";

string name2 = "RODRIGO";

string name3 = "BRIAN";

string name4 = "DAVID";

Page 111: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register
Page 112: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Ename1

M

M

A

\0

Page 113: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Ename1

M

M

A

\0

Rname2

O

D

R

I

G

O

\0

Page 114: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Ename1

M

M

A

\0

Rname2

O

D

R

I

G

O

\0

Bname3

R

I

A N

\0

Page 115: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Ename1

M

M

A

\0

Rname2

O

D

R

I

G

O

\0

Bname3

R

I

A N

\0

Dname4

A

V

I

D

\0

Page 116: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string names[4];

names[0] = "EMMA";

names[1] = "RODRIGO";

names[2] = "BRIAN";

names[3] = "DAVID";

Page 117: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Enames[0]

M

M

A

\0

Rnames[1]

O

D

R

I

G

O

\0

Bnames[2]

R

I

A N

\0

Dnames[3]

A

V

I

D

\0

Page 118: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

Enames[0][0]

Mnames[0][1]

Mnames[0][2]

Anames[0][3]

\0names[0][4]

Rnames[1][0]

Onames[1][1]

Dnames[1][2]

Rnames[1][3]

Inames[1][4]

Gnames[1][5]

Onames[1][6]

\0names[1][7]

Bnames[2][0]

Rnames[2][1]

Inames[2][2]

Anames[2][3]

Nnames[2][4]

\0names[2][5]

Dnames[3][0]

Anames[3][1]

Vnames[3][2]

Inames[3][3]

Dnames[3][4]

\0names[3][5]

Page 119: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

string

Page 120: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

manual pages

Page 121: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

command-line arguments

Page 122: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ ...}

Page 123: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ ...}

Page 124: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(int argc, string argv[]){ ...}

Page 125: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

exit status

Page 126: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(int argc, string argv[]){ ...}

Page 127: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(int argc, string argv[]){ ...}

Page 128: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

#include <stdio.h>

int main(void){ ...}

Page 129: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

readability

Page 130: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

"Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you

very much. They were the last people you'd expect to be involved in anything strange or mysterious, because they

just didn't hold with such nonsense..."

Page 131: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

grade 7

Page 132: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

"In computational linguistics, authorship attribution is the task of predicting the author of a document of unknown

authorship. This task is generally performed via the analysis of stylometric features — particular characteristics of an author’s writing that can be used to identify his or her

works in contrast with the works of other authors…"

Page 133: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

grade 16

Page 134: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

cryptography

Page 135: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

input → → output

Page 136: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

plaintext → → ciphertext

Page 137: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

H I !

Page 138: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

72 73 33

Page 139: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

plaintext → → ciphertext

Page 140: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

plaintext → → ciphertextkey →

Page 141: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

plaintext → → ciphertext1 →

Page 142: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

I L O V E Y O U

Page 143: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 L O V E Y O U

Page 144: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 O V E Y O U

Page 145: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 V E Y O U

Page 146: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 86 E Y O U

Page 147: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 86 69 Y O U

Page 148: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 86 69 89 O U

Page 149: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 86 69 89 79 U

Page 150: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

73 76 79 86 69 89 79 85

Page 151: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 76 79 86 69 89 79 85

Page 152: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 79 86 69 89 79 85

Page 153: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 86 69 89 79 85

Page 154: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 87 69 89 79 85

Page 155: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 87 70 89 79 85

Page 156: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 87 70 90 79 85

Page 157: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 87 70 90 80 85

Page 158: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

74 77 80 87 70 90 80 86

Page 159: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J 77 80 87 70 90 80 86

Page 160: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M 80 87 70 90 80 86

Page 161: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P 87 70 90 80 86

Page 162: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P W 70 90 80 86

Page 163: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P W F 90 80 86

Page 164: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P W F Z 80 86

Page 165: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P W F Z P 86

Page 166: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

J M P W F Z P V

Page 168: This is CS50 · 2019-12-31 · main: # @main.cfi_startproc # BB#0: pushq %rbp.Ltmp0:.cfi_def_cfa_offset 16.Ltmp1:.cfi_offset %rbp, -16 movq %rsp, %rbp.Ltmp2:.cfi_def_cfa_register

This is CS50