1 changelog
play

1 Changelog Changes made in this version not seen in fjrst lecture: - PowerPoint PPT Presentation

1 Changelog Changes made in this version not seen in fjrst lecture: 12 September 2017: slide 28, 33: quote solution that uses z correctly 1 last time Y86 choices, encoding and decoding shift operators right shift = dividing by power of


  1. 1

  2. Changelog Changes made in this version not seen in fjrst lecture: 12 September 2017: slide 28, 33: quote solution that uses z correctly 1

  3. last time Y86 — choices, encoding and decoding shift operators right shift = dividing by power of two 2 shr assembly, >> in C right shift = towards least signifjcant bit

  4. on the quizzes in general yes, I know quizzes are hard intention: quiz questions from slides/etc. + some serious thought (and sometimes I miss the mark) main purpose: review material other than before exams, warning sign for me why graded? because otherwise… 3

  5. on the quiz (1) RISC versus CISC: about simplifying hardware variable-length encoding is less simple for HW instructions chosen more based on what’s simple for HW (e.g. push/pop not simple for HW) more registers — simpler than adding more instructions compensates for seperate memory instructions 4

  6. on the quiz (2) instruction set — what the instructions do size of memory address — operands to rmmovq, etc. mean what? fmoating point support — do such instructions exist? 5

  7. constructing instructions typedef unsigned char byte ; byte make_simple_opcode ( byte icode ) { // function code is fixed as 0 for now return opcode * 16; // 16 = 1 0000 in binary } 6

  8. constructing instructions in hardware icode 0 0 0 0 opcode 7

  9. reversed shift right? shr $-4, %reg opcode >> (-4) 8 ✭✭✭✭✭✭✭✭✭✭✭✭ ❤❤❤❤❤❤❤❤❤❤❤❤ ❤❤❤❤❤❤❤❤❤❤❤❤ ✭ ✭✭✭✭✭✭✭✭✭✭✭✭ ❤

  10. shift left 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 x86 instruction: shl — shift left … … … … 1 1 0 0 0 %reg (fjnal value) %reg (initial value) shl $ amount , %reg (or variable: shr %cl, %reg ) 9 C: value << amount 1 0 1 1 0

  11. shift left 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 x86 instruction: shl — shift left … … … … 1 1 0 0 0 %reg (fjnal value) %reg (initial value) shl $ amount , %reg (or variable: shr %cl, %reg ) 9 C: value << amount 1 0 1 1 0

  12. left shift in math 1 << 0 == 1 0000 0001 1 << 1 == 2 0000 0010 1 << 2 == 4 0000 0100 10 << 0 == 10 0000 1010 10 << 1 == 20 0001 0100 10 << 2 == 40 0010 1000 << 10

  13. left shift in math 1 << 0 == 1 0000 0001 1 << 1 == 2 0000 0010 1 << 2 == 4 0000 0100 10 << 0 == 10 0000 1010 10 << 1 == 20 0001 0100 10 << 2 == 40 0010 1000 10 x << y = x × 2 y

  14. extracting icode from more rB } return ( value % 256) / 16; unsigned extract_opcode2 (unsigned value ) { } return ( value / 16) % 16; unsigned extract_opcode1 (unsigned value ) { // % -- remainder rA ifun 1 icode 0 0 0 1 1 1 1 11 0 0 1 0 0 0 0 0

  15. extracting icode from more rB } return ( value % 256) / 16; unsigned extract_opcode2 (unsigned value ) { } return ( value / 16) % 16; unsigned extract_opcode1 (unsigned value ) { // % -- remainder rA ifun 1 icode 0 0 0 1 1 1 1 11 0 0 1 0 0 0 0 0

  16. manipulating bits? easy to manipulate individual bits in HW how do we expose that to software? 12

  17. interlude: a truth table AND 0 1 0 0 0 1 0 1 AND with 1: keep a bit the same AND with 0: clear a bit method: construct “mask” of what to keep/remove 13

  18. interlude: a truth table AND 0 1 0 0 0 1 0 1 AND with 1: keep a bit the same AND with 0: clear a bit method: construct “mask” of what to keep/remove 13

  19. interlude: a truth table AND 0 1 0 0 0 1 0 1 AND with 1: keep a bit the same AND with 0: clear a bit method: construct “mask” of what to keep/remove 13

  20. interlude: a truth table AND 0 1 0 0 0 1 0 1 AND with 1: keep a bit the same AND with 0: clear a bit method: construct “mask” of what to keep/remove 13

  21. bitwise AND — & 0 … 1 0 1 0 & … 1 0 1 1 … 0 0 1 0 0 0 Treat value as array of bits 0 1 & 1 == 1 1 & 0 == 0 0 & 0 == 0 2 & 4 == 0 10 & 7 == 2 … 0 1 0 0 & … 0 1 0 0 … 14

  22. bitwise AND — & 0 … 1 0 1 0 & … 1 0 1 1 … 0 0 1 0 0 0 Treat value as array of bits 0 1 & 1 == 1 1 & 0 == 0 0 & 0 == 0 2 & 4 == 0 10 & 7 == 2 … 0 1 0 0 & … 0 1 0 0 … 14

  23. bitwise AND — & 0 … 1 0 1 0 & … 1 0 1 1 … 0 0 1 0 0 0 Treat value as array of bits 0 1 & 1 == 1 1 & 0 == 0 0 & 0 == 0 2 & 4 == 0 10 & 7 == 2 … 0 1 0 0 & … 0 1 0 0 … 14

  24. bitwise AND — C/assembly x86: and %reg, %reg 15 C: foo & bar

  25. bitwise hardware ( 10 & 7 == 2 ) 1 0 0 1 0 0 1 1 1 10 0 1 0 . . . 7 16

  26. extract opcode from larger unsigned extract_opcode1_bitwise (unsigned value ) { return ( value >> 4) & 0xF; // 0xF: 00001111 // like (value / 16) % 16 } unsigned extract_opcode2_bitwise (unsigned value ) { return ( value & 0xF0) >> 4; // 0xF0: 11110000 // like (value % 256) / 16; } 17

  27. extract opcode from larger extract_opcode1_bitwise: movl %edi, %eax shrl $4, %eax andl $0xF, %eax ret extract_opcode2_bitwise: movl %edi, %eax andl $0xF0, %eax shrl $4, %eax ret 18

  28. more truth tables 0 1 0 0 1 1 1 & XOR conditionally clear bit conditionally keep bit | conditionally set bit ^ conditionally fmip bit 0 1 AND 0 0 1 0 0 0 1 1 1 OR 0 1 0 0 1 1 19

  29. bitwise OR — | … 1 1 1 1 … 1 1 1 0 | 1 | 1 == 1 0 1 0 1 … 10 | 7 == 15 2 | 4 == 6 0 | 0 == 0 1 | 0 == 1 20

  30. bitwise xor — … 1 0 1 1 … 1 1 1 0 ^ ̂ 0 1 0 1 … 10 ^ 7 == 13 2 ^ 4 == 6 0 ^ 0 == 0 1 ^ 0 == 1 1 ^ 1 == 0 21

  31. negation / not — ~ 0 32 bits 1 1 1 1 … 1 1 0 0 0 ~ (‘complement’) is bitwise version of ! : … 0 0 ~ ~(( unsigned ) 2) == 0xFFFFFFFD 3 ) ~2 == ( int ) 0xFFFFFFFD (aka !notZero == 0 !0 == 1 22 ~0 == ( int ) 0xFFFFFFFF (aka − 1 )

  32. negation / not — ~ 0 32 bits 1 1 1 1 … 1 1 0 0 ~ (‘complement’) is bitwise version of ! : 0 … 0 0 ~ ~(( unsigned ) 2) == 0xFFFFFFFD !notZero == 0 !0 == 1 22 ~0 == ( int ) 0xFFFFFFFF (aka − 1 ) ~2 == ( int ) 0xFFFFFFFD (aka − 3 )

  33. negation / not — ~ 0 32 bits 1 1 1 1 … 1 1 0 0 ~ (‘complement’) is bitwise version of ! : 0 … 0 0 ~ ~(( unsigned ) 2) == 0xFFFFFFFD !notZero == 0 !0 == 1 22 ~0 == ( int ) 0xFFFFFFFF (aka − 1 ) ~2 == ( int ) 0xFFFFFFFD (aka − 3 )

  34. note: ternary operator w = (x ? y : z) if (x) { w = y; } else { w = z; } 23

  35. one-bit ternary (x ? y : z) constraint: everything is 0 or 1 now: reimplement in C without if/else/ || /etc. (assembly: no jumps probably) divide-and-conquer: (x ? y : 0) (x ? 0 : z) 24

  36. one-bit ternary (x ? y : z) constraint: everything is 0 or 1 now: reimplement in C without if/else/ || /etc. (assembly: no jumps probably) divide-and-conquer: (x ? y : 0) (x ? 0 : z) 24

  37. one-bit ternary parts (1) constraint: everything is 0 or 1 (x ? y : 0) y=0 y=1 x=0 0 0 x=1 0 1 (x & y) 25

  38. one-bit ternary parts (1) constraint: everything is 0 or 1 (x ? y : 0) y=0 y=1 x=0 0 0 x=1 0 1 25 → (x & y)

  39. one-bit ternary parts (2) (x ? y : 0) = (x & y) (x ? 0 : z) opposite x : ~x ((~x) & z) 26

  40. one-bit ternary parts (2) (x ? y : 0) = (x & y) (x ? 0 : z) opposite x : ~x ((~x) & z) 26

  41. one-bit ternary constraint: everything is 0 or 1 — but y, z is any integer (x ? y : z) (x ? y : 0) | (x ? 0 : z) (x & y) | ((~x) & z) 27

  42. multibit ternary constraint: x is 0 or 1 old solution ((x & y) | (~x) & 1) only gets least sig. bit (x ? y : z) (x ? y : 0) | (x ? 0 : z) (( x) & y) | (( (x ^ 1)) & z) 28

  43. multibit ternary constraint: x is 0 or 1 old solution ((x & y) | (~x) & 1) only gets least sig. bit (x ? y : z) (x ? y : 0) | (x ? 0 : z) (( x) & y) | (( (x ^ 1)) & z) 28

  44. constructing masks constraint: x is 0 or 1 (x ? y : 0) if x = 1: want 1111111111…1 (keep y ) if x = 0: want 0000000000…0 (want 0 ) one idea: x | (x << 1) | (x << 2) | ... a trick: x ((-x) & y) 29

  45. constructing masks constraint: x is 0 or 1 (x ? y : 0) if x = 1: want 1111111111…1 (keep y ) if x = 0: want 0000000000…0 (want 0 ) one idea: x | (x << 1) | (x << 2) | ... ((-x) & y) 29 a trick: − x

  46. two’s complement refresher 1 1111 1111 … 1111 1000 0000 … 0000 0111 1111 … 1111 1 1 30 1 … 1 1 − 2 31 +2 30 +2 29 +2 2 +2 1 +2 0 − 1 =

  47. two’s complement refresher 1 1111 1111 … 1111 1000 0000 … 0000 0111 1111 … 1111 1 1 1 … 1 1 30 − 2 31 +2 30 +2 29 +2 2 +2 1 +2 0 − 1 = 0 − 1 1 − 2 31 + 1 2 31 − 1 − 2 31

  48. two’s complement refresher 1 1111 1111 … 1111 1000 0000 … 0000 0111 1111 … 1111 1 1 1 … 1 1 30 − 2 31 +2 30 +2 29 +2 2 +2 1 +2 0 − 1 = 0 − 1 1 − 2 31 + 1 2 31 − 1 − 2 31

  49. constructing masks constraint: x is 0 or 1 (x ? y : 0) if x = 1: want 1111111111…1 (keep y ) if x = 0: want 0000000000…0 (want 0 ) one idea: x | (x << 1) | (x << 2) | ... ((-x) & y) 31 a trick: − x

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend