mitthu / x86-assembly-cheat

x86 IA-32 and x86-64 userland minimal examples tutorial. Hundreds of runnable asserts. Nice GDB setup. IO done with libc, so OS portable in theory. NASM and GAS covered. Tested in Ubuntu 18.04. Containers (ELF), linking, calling conventions. System land cheat at: https://github.com/************/x86-bare-metal-examples, ARM cheat at: https://github.com/************/arm-assembly-cheat

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

x86 Assembly Cheat

Build Status

x86 IA-32 and x86-64 userland minimal examples tutorial. Hundreds of runnable asserts. Nice GDB setup. IO done with libc, so OS portable in theory. NASM and GAS covered. Tested in Ubuntu 18.04. Containers (ELF), linking, calling conventions. System land cheat at: https://github.com/************/x86-bare-metal-examples, ARM cheat at: https://github.com/************/arm-assembly-cheat

  1. Getting started
  2. IA-32
    1. main.asm
    2. hello_world.asm
    3. Base concepts
      1. Registers
        1. Segment registers
      2. Addressing
      3. Endianess
    4. Instructions
      1. mov family
        1. mov
        2. movzx
        3. movsx
        4. cmovcc
        5. xchg
        6. lea
      2. Flags
        1. setcc
      3. Arithmetic
        1. Addition
          1. add
          2. adc
          3. inc
        2. Subtraction
          1. sub
          2. sbb
          3. dec
        3. Multiplication
          1. mul
          2. imul
          3. neg
        4. Division
          1. div
          2. idiv
        5. Comparison
          1. cmp
        6. cdq
        7. cwde
      4. Bit-wise
        1. Boolean
          1. not
          2. and
          3. or
          4. xor
          5. test
        2. Shifts
          1. shl, shr
          2. sal, sar
          3. rol, ror
        3. Test
          1. bt
          2. btr
          3. btc
      5. Branching
        1. jcc
        2. jmp
          1. jmp indirect
        3. loopcc
      6. Stack instructions
        1. enter
        2. leave
        3. pusha
        4. pushf
      7. String instructions
        1. rep
        2. cmps
        3. lods
        4. movs
        5. scas
        6. stos
      8. Floating point
        1. FPU
          1. FPU basic examples, start here
            1. fadd
            2. faddp
            3. fadd_text_literal
          2. Bulk instructions
            1. fabs
            2. fchs
            3. fild
            4. fld1
            5. fldz
            6. fscale
            7. fsqrt
            8. fxch
        2. SIMD
          1. FMA
      9. Synchronization
        1. xadd
        2. cmpxchg
        3. bts
      10. Misc
        1. rdrand
        2. popcnt
        3. rdtsc
        4. nop
        5. cpuid
    5. Calling conventions
      1. cdecl
      2. cdecl examples
      3. stdcall
    6. Linux
    7. Infrastructure
      1. lib_test
  3. x86-64
    1. x86_64 general principles
      1. cmp sign extend
      2. mov zero extend
    2. x86_64 instructions
      1. cdqe
      2. movabs
    3. main
    4. x86_64 Linux system calls
    5. x86_64 calling convention
      1. x86_64 GAS
    6. Infrastructure
      1. min
      2. lib_test
  4. Assemblers
    1. GAS
      1. Hello world
      2. Immediate
      3. Addressing
      4. Char literal
      5. x86_64 GAS
        1. min
        2. lib_test
        3. cltq
      6. Symbol scope
        1. Local symbol
        2. Local label
      7. Current address
      8. instructions
        1. cbtw
        2. cmp
        3. fadd
        4. jmp indirect
        5. ljmp
        6. movz
        7. push
      9. Directives
        1. .ascii
        2. .asciz
        3. .byte
        4. .equ
        5. .extern
        6. .gasversion.
        7. .global
        8. .print
        9. .type
      10. Preprocessor
        1. .macro
          1. .altmacro
        2. .irp
        3. Comments
      11. Infrastructure
        1. lib_test
      12. Bibliography
    2. NASM
      1. RAM
        1. Symbol colon
      2. local labels
      3. equ
      4. ptr
      5. current address
      6. Preprocessor
        1. %define
        2. %if
        3. %include
        4. comments
  5. Introduction
    1. How to learn
    2. Instruction sets
      1. Other architectures
        1. ARM
        2. Microcontrollers
      2. RISC vs CISC
        1. Microcode
      3. System vs application programming
      4. Flynn's Taxonomy
    3. Pros and cons of assembly
    4. Intel processor history
    5. Intel vs AT&T syntax
      1. intel2gas
    6. Implementations
    7. Extensions
    8. CPU architecture
      1. CPU Optimizations
      2. CPU bugs
      3. Cache
      4. Instruction level parallelism
        1. Pipeline
        2. Branch prediction
        3. Superscalar
        4. VLIW
        5. SIMT
      5. CPU benchmarks
  6. Containers
    1. ELF
      1. ELF Hello World Tutorial
  7. Dynamic libraries
    1. ld-linux.so
      1. ldd
  8. Compiler generated
  9. Binutils
    1. ld
      1. Linker scripts
    2. readelf
    3. objcopy
    4. objdump
    5. size
  10. misc
  11. Bibliography
  12. Related tutorials
    1. x86 Instruction Encoding Tutorial
    2. C++ Cheat
    3. Linux Cheat

WIP

  1. Binutils
    1. ar
    2. elfedit
    3. nm
    4. strip
  2. DWARF
  3. Symbol Versioning
  4. Debug registers

About

x86 IA-32 and x86-64 userland minimal examples tutorial. Hundreds of runnable asserts. Nice GDB setup. IO done with libc, so OS portable in theory. NASM and GAS covered. Tested in Ubuntu 18.04. Containers (ELF), linking, calling conventions. System land cheat at: https://github.com/************/x86-bare-metal-examples, ARM cheat at: https://github.com/************/arm-assembly-cheat


Languages

Language:Assembly 75.7%Language:C 13.4%Language:Makefile 6.6%Language:C++ 4.1%Language:Shell 0.1%Language:Ruby 0.1%