Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CPUとは何か / What's a CPU

CPUとは何か / What's a CPU

PHPカンファレンス北海道 2019のLT資料です。
動画:
https://youtu.be/XT2HZvOjZRs

参考:
CPUの創りかた
https://www.amazon.co.jp/dp/4839909865

HASEGAWA Tomoki

September 21, 2019
Tweet

More Decks by HASEGAWA Tomoki

Other Decks in Technology

Transcript

  1. ϥΠϑϫʔΫ ςοΫΧϯϑΝϨϯεӡӦࢀՃ  8FCJ04ΞϓϦ։ൃ Ϗʔϧ  $16 ϨτϩήʔϜػ ిࢠ޻࡞ 


    αοΧʔ؍ઓ 
 ϨϯλϧΧʔτϨʔε ʜ σδλϧαʔΧεגࣜձࣾ ෭ஂ௕$50 !UPN[PI
  2. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y "Ϩδελʹ*Nͷ஋Λ଍͢ "%%" *N
  3. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y ""  "Ϩδελʹ*Nͷ஋Λ଍͢ "%%" *N
  4. $opcode = $byte >> 4; $im = $byte & 0b00001111;

    public function executeInstruction() { $byte = $this->ram[$this->pc]; 0QDPEF     *Nʢ0QFSBOE    
  5. $opcode = $byte >> 4; $im = $byte & 0b00001111;

    public function executeInstruction() { switch ($opcode){ case 0b0000: // ADD A, Im $this->a += $im; break; case 0b0001: } $byte = $this->ram[$this->pc];
  6. $opcode = $byte >> 4; $im = $byte & 0b00001111;

    public function executeInstruction() { switch ($opcode){ case 0b0000: // ADD A, Im $this->a += $im; break; case 0b0001: } $this->pc++; } $byte = $this->ram[$this->pc];
  7. */ ϙʔτ " Ϩδελ # Ϩδελ 065 ϙʔτ 1$ Ϩδελ

    Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  8. */ ϙʔτ " Ϩδελ # Ϩδελ 065 ϙʔτ 1$ Ϩδελ

    Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  9. */ ϙʔτ " Ϩδελ # Ϩδελ 065 ϙʔτ 1$ Ϩδελ

    Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  10. */ ϙʔτ " Ϩδελ # Ϩδελ 065 ϙʔτ 1$ Ϩδελ

    Ճࢉػ ϝϞϦ ηϨΫλ 0QDPEF     *Nʢ0QFSBOE     ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  11. */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ 1$

    Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ 0QDPEF     *Nʢ0QFSBOE     ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  12. */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ 1$

    Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  13. */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ 1$

    Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  14. */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ 1$

    Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔
  15. ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔ */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ

    1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ͦΕΛͲ͏ܾΊΔʁ ͦΕ໋͕ͦ͜ྩͳͷͩʂ
  16. ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔ */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ

    1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ͦΕΛͲ͏ܾΊΔʁ ͦΕ໋͕ͦ͜ྩͳͷͩʂ 0QDPEF     *Nʢ0QFSBOE    
  17. ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔ */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ

    1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ 0QDPEF     *Nʢ0QFSBOE    
  18. ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔ ্ҐCJU */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065

    ϙʔτ 1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ 0QDPEF     *Nʢ0QFSBOE    
  19. ԿͱԿΛ଍ͯ͠Ͳ͜ʹసૹ͢Δ͔ ্ҐCJU */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065

    ϙʔτ 1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ 0QDPEF     *Nʢ0QFSBOE    
  20. ্ҐCJU */ ϙʔτ ԼҐCJU " Ϩδελ # Ϩδελ 065 ϙʔτ

    1$ Ϩδελ Ճࢉػ ϝϞϦ ηϨΫλ ΫϩοΫ
  21. Y  .07"  "ϨδελʹΛసૹ Y  "%%"  "ϨδελʹΛ଍͢

    Y  .07# " #Ϩδελʹ"Ϩδελͷ ஋Λసૹ Y  065# #Ϩδελͷ஋Λ*0
 ϙʔτʹग़ྗ Y G +.1Y Yʹδϟϯϓ ϚγϯޠͰॻ͔ΕͨϓϩάϥϜ
  22. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y "Ϩδελʹ*Nͷ஋Λ଍͢ "%%" *N
  23. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y ""  "Ϩδελʹ*Nͷ஋Λ଍͢ "%%" *N
  24. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y "Ϩδελʹ#Ϩδελͷ஋Λ
 సૹ͢Δ .07" #
  25. 5%ͷϚγϯޠ 0QDPEF     *Nʢ0QFSBOE   

     Y "#  "Ϩδελʹ#Ϩδελͷ஋Λ
 సૹ͢Δ .07" #
  26. Ϛγϯޠ ໋ྩ ʢχʔϞχοΫʣ ಈ࡞ 0QDPEF ʢਐʣ 0QDPEF ʢਐʣ "%%" *N

    "Ϩδελʹ*NΛ଍͢ C Y .07" # #Ϩδελͷ஋Λ"Ϩδελʹసૹ͢Δ C Y */" *0ϙʔτ͔Β"Ϩδελʹ஋ΛಡΈࠐΉ C Y .07" *N "Ϩδελʹ*Nͷ஋Λసૹ͢Δ C Y +.1*N *Nʹδϟϯϓ͢Δ C YG
  27. Ϛγϯޠ ໋ྩ ʢχʔϞχοΫʣ ಈ࡞ 0QDPEF ʢਐʣ 0QDPEF ʢਐʣ "%%" *N

    "Ϩδελʹ*NΛ଍͢ C Y .07" # #Ϩδελͷ஋Λ"Ϩδελʹసૹ͢Δ C Y */" *0ϙʔτ͔Β"Ϩδελʹ஋ΛಡΈࠐΉ C Y .07" *N "Ϩδελʹ*Nͷ஋Λసૹ͢Δ C Y +.1*N *Nʹδϟϯϓ͢Δ C YG શ໋ྩ
  28. class Cpu { public function __construct() { $this->ram = array_fill(0,

    0b1111, 0); $this->pc = $this->a = $this->b = 0; } private $ram; private $pc; private $a; private $b; $16ͷΫϥεఆٛͱॳظԽ