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

Learn CPU architecture with Assembly

Avatar for Akio Itaya Akio Itaya
September 19, 2025

Learn CPU architecture with Assembly

Avatar for Akio Itaya

Akio Itaya

September 19, 2025
Tweet

More Decks by Akio Itaya

Other Decks in Programming

Transcript

  1. Macʹ͓͚ΔCPUͷྺ࢙ 9 1984 1992 2006 Intel x86 MC68000 680x0 PowerPC

    Power RISC CISC CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ
  2. Macʹ͓͚ΔCPUͷྺ࢙ 10 Apple Silicon Arm 1984 1992 2006 2020 Intel

    x86 MC68000 680x0 PowerPC Power RISC RISC CISC CISC ΞʔΩςΫνϟ ઃܭख๏ CPU ຌྫ
  3. Macʹ͓͚ΔCPUͷྺ࢙ 11 Apple Silicon Arm 1984 1992 2006 2020 x86

    Rosetta MC68000 680x0 PowerPC Power RISC RISC CISC CISC Mac 68K Emulator Intel Rosetta 2 ΞʔΩςΫνϟ Ҡߦπʔϧ ઃܭख๏ CPU ຌྫ
  4. ΞηϯϒϦͰHello, World! 17 $ man 2 write γεςϜίʔϧ ϚχϡΞϧίϚϯυ ໋ྩ໊

    ssize_t write(int fildes, const void *buf, size_t nbyte);
  5. ΞηϯϒϦͰHello, World! 18 ssize_t write(int fildes, const void *buf, size_t

    nbyte); ϑΝΠϧ
 σΟεΫϦϓλ 0ɿඪ४ೖྗ
 1ɿඪ४ग़ྗ
 2ɿඪ४Τϥʔग़ྗ ର৅഑ྻͷ൪஍ ग़ྗόΠτ਺ C
  6. ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World!

    19 mov x0, #1 adr x1, greeting mov x2, #14 greeting: .ascii "Hello, World!\n" 1 5 10 14 C ASSEMBLY
  7. ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World!

    21 mov x0, #1 adr x1, greeting mov x2, #14 greeting: .ascii "Hello, World!\n" 1 5 10 14 C ASSEMBLY
  8. ssize_t write(int fildes, const void *buf, size_t nbyte); ΞηϯϒϦͰHello, World!

    22 mov x16, #4 svc #0x80 C ASSEMBLY ಛผͳׂΓࠐΈ໋ྩ Supervisor Call γεςϜίʔϧϑΝΠϧ͔Β൑அ syscall.h* */Library/Developer/CommandLineTools/SDKs/MacOSX{version_number}.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/syscall.h
  9. void _exit(int status); ΞηϯϒϦͰHello, World! 24 mov x0, #0 mov

    x16, #1 svc #0x80 C ASSEMBLY ऴྃεςʔλε ਖ਼ৗऴྃɿ0
  10. ΞηϯϒϦͰHello, World! 25 mov x0, #1 adr x1, greeting mov

    x2, #14 mov x16, #4 svc #0x80 mov x0, #0 mov x16, #1 svc #0x80 greeting: .ascii "Hello, World!\n" Arm x86
  11. ΞηϯϒϦͰHello, World! 26 mov x0, #1 adr x1, greeting mov

    x2, #14 mov x16, #4 svc #0x80 mov x0, #0 mov x16, #1 svc #0x80 greeting: .ascii "Hello, World!\n" mov $1, %rdi lea greeting(%rip), %rsi mov $14, %rdx mov $0x2000004, %rax syscall xor %rdi, %rdi mov $0x2000001, %rax syscall Arm x86
  12. ελοΫτϨʔεΛಡΈղ͘ 29 import SwiftUI let f: (() -> Void)? =

    nil @main struct CrashCodeApp: App { init() { f!() } var body: some Scene { WindowGroup {} } } Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
  13. 0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22,

    x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 30
  14. 0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22,

    x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 31 Φϖίʔυ
  15. 0x1957e5eec <+0>: sub sp, sp, #0xa0 0x1957e5ef0 <+4>: stp x22,

    x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> ελοΫτϨʔεΛಡΈղ͘ 32 Φϖϥϯυ
  16. ελοΫτϨʔεΛಡΈղ͘ 33 సૹ ෼ذ ܭࢉ ෼ذઌͷώϯτ 0x1957e5eec <+0>: sub sp,

    sp, #0xa0 0x1957e5ef0 <+4>: stp x22, x21, [sp, #0x80] 0x1957e5ef4 <+8>: stp x29, x30, [sp, #0x90] 0x1957e5ef8 <+12>: add x29, sp, #0x90 0x1957e5efc <+16>: ldr w9, [x29, #0x20] 0x1957e5f00 <+20>: ldr x10, [x29, #0x18] 0x1957e5f04 <+24>: ldrb w8, [x29, #0x10] 0x1957e5f08 <+28>: stp x3, x4, [sp, #0x30] 0x1957e5f0c <+32>: strb w5, [sp, #0x40] 0x1957e5f10 <+36>: stp x6, x7, [sp, #0x48] 0x1957e5f14 <+40>: strb w8, [sp, #0x58] 0x1957e5f18 <+44>: str x10, [sp, #0x60] 0x1957e5f1c <+48>: str w9, [sp, #0x68] 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176>
  17. ελοΫτϨʔεΛಡΈղ͘ 34 సૹ ෼ذ ܭࢉ 0x1957e5f20 <+52>: tbnz w2, #0x0,

    0x1957e5f30 ; <+68> 0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> 0x1957e5f9c <+176>: str wzr, [sp, #0x10] 0x1957e5fa0 <+180>: str x8, [sp, #0x8] 0x1957e5fa4 <+184>: mov w8, #0x2 ; =2 0x1957e5fa8 <+188>: strb w8, [sp] 0x1957e5fac <+192>: adrp x0, 1047 0x1957e5fb0 <+196>: add x0, x0, #0x494 ; "Fatal error" 0x1957e5fb4 <+200>: adrp x3, 1047 0x1957e5fb8 <+204>: add x3, x3, #0x750;"Unexpectedly found nil while unwrapping an Optional value"
  18. ελοΫτϨʔεΛಡΈղ͘ 35 0x1957e5f20 <+52>: tbnz w2, #0x0, 0x1957e5f30 ; <+68>

    0x1957e5f24 <+56>: cbnz x0, 0x1957e5f6c ; <+128> 0x1957e5f28 <+60>: mov w8, #0x88 ; =136 0x1957e5f2c <+64>: b 0x1957e5f9c ; <+176> 0x1957e5f9c <+176>: str wzr, [sp, #0x10] 0x1957e5fa0 <+180>: str x8, [sp, #0x8] 0x1957e5fa4 <+184>: mov w8, #0x2 ; =2 0x1957e5fa8 <+188>: strb w8, [sp] 0x1957e5fac <+192>: adrp x0, 1047 0x1957e5fb0 <+196>: add x0, x0, #0x494 ; "Fatal error" 0x1957e5fb4 <+200>: adrp x3, 1047 0x1957e5fb8 <+204>: add x3, x3, #0x750;"Unexpectedly found nil while unwrapping an Optional value" సૹ ෼ذ ܭࢉ