CS208 Introduction to Computer Systems Wednesday, 25 Jan 2023 + In-class exam, Mon Jan 30 - General info - Closed-everything-except-your-brain - In Olin 304/306/308 - If you have official accommodations related to test-taking conditions, I'd be grateful for a Slack DM reminder - If you won't be able to attend due to COVID restrictions, let me know as soon as practical - General topics - data representation - C - x86 assembly very beginning basics - My philosophy of in-class exams - Stuff that I want you to have in your head, not just your notes - Mostly "what" and "how", only a little bit of "why" - No tricks - I try not to make it long (occasionally, I screw this up, but mostly not) - I indicate what I think is most important for you right now via classroom topics, homework assignments, sample programs, and quizzes - What to study - homework assignments - quiz - sample code - class notes - backup reference material: textbook readings - Types of questions - Short answers - Here's some code; what's the output? - Write this tiny amount of code to do X - That memory grid from the quiz - Wildcard (I reserve the right to come up with a different type of question, but see philosophy above) - Integers - binary/decimal/hexadecimal notation - two's complement - byte order (little-endian vs. big-endian) - Characters - difference between characters and C char - codepoints vs. encodings - UTF-8 encoding (with chart in hand) - UTF-16 BE and UTF-16 LE - [General C advice] - You can write your own experimental programs to see what happens when you do this or that - C types - int vs. long - char *p vs. char p[10] - string literals: "Hello" - char literals: 'A', '\0', '\\', '\'' - sizeof (don't confuse with strlen!) - C I/O (input/output) - printf, %c, %s, %d, %x, %X, %p - fgets (including what if line is longer than buffer?) - Null-terminated char strings - printf %s vs. %p - strlen - strcpy vs. strncpy (including what if source is longer than buffer in strncpy) - strcmp - C pointers - & as unary "address-of" operator - * in type declarations - * as unary operator for dereferencing - assignment statements with pointers - C bitwise operators - ~ (not) - & (and) - | (or) - ^ (exclusive or / xor) - C stuff that's pretty much the same as Java - if, else - &&, ||, ! - while, for - {}, () - +, -, / (int div), % - function signatures - Basics of x86_64 assembly - registers (what are they?) - mov, add, sub, push, pop - test, cmp - j, js, jz, jl, jle - call, ret - how do you loop? - how do you do if/else? - how do you call a function? ----------- + Last week's quiz - str1 vs. pointers generally, array declaration/definition vs. pointer declaration/initialization - problem #6 - other? + x86_64 essentials ("*" means "kind of weird") - register naming *(r, e, x, l, h) 8086 - registers a, b, c... (all 8 bits) 80186 - registers ax, bx, cx, ... (16 bits) 80386 - registers eax, ebx, ecx,... (32 bits) IA-64 - registers rax, rbx, rcx, ... (64 bits) - register conventions (https://web.stanford.edu/class/archive/cs/cs107/cs107.1224/guide/x86-64.html) - addressing modes (same link) - instruction subtypes by operand size *(q, l, w, b) mov vs. movq, movl, movw, movb - the FLAGS / EFLAGS register - reading documentation https://www.felixcloutier.com/x86/ - machine language's role *operand order in asm - C to asm gcc -g -Og -c source.c [--> source.o] objdump -d source.o [there are other ways to do this...] - today and Friday - MOV - ADD, SUB - CMP, TEST - JMP, Jcc - PUSH, POP - *LEA - Using gdb to look closer