x86-64 Assembly Programming
This course is an introduction to assembly programming for the x86-64 architecture. Emphasis is placed on best, current practices and methods, including SIMD instructions. Students will write extensive code as part of the course to exercise their skills. Some work will be put toward basic reverse engineering.
Cumulative graded assessments available for group training.
Duration
40 hours
Audience
This course is suitable for developers or others with moderate experience in programming a compiled language, such as C, C++, Go, Rust, or Fortran. This course is not designed for students who are new to programming.
PREREQUISITES
Students should have some previous compiled programming experience, such Rust or Fortran, or completing our Intermediate C Programming, C++ Programming, or Go Programming classes. They should be able to write conditionals, loops, and functions, do some basic debugging, and write a simple program that makes use of these skills.
Upon completion of this class, students will be able to the following:
● Write x86-64 Assembly code: loops, conditionals, and functions.
● Build and run x86-64 Assembly programs
● Integrate with third-party libraries in other compiled languages
● Create and call functions using the SysV ABI
● Define and manipulate record types
● Debug the behavior of a running program without debugging symbols
● Profile and optimize x86-64 Assembly code
● Reverse-engineer simple functions and programs
- Introduction to x86
- Why Learn Assembly?
- Prerequisites
- History
- Terminology
- Optimization & Intuition
- Executable Programs
- End-to-end Process
- Executable Formats
- Sections
- Tools
- hexdump or xxd
- strings
- nm
- objdump
- gdb
- ltrace and strace
- make
- as
- Almost Hello World
- Hello World
- CPU
- RISC Architecture
- CISC Architecture
- GPU
- Pipelining
- Modes
- Registers
- Intel Architecture History
- Register Descriptions
- Callee-Saved Registers
- Memory and Latency
- Structure
- Memory Pages
- Caches
- Latency Numbers Every Programmer Should Know
- The Two Major Syntaxes
- Intel
- Arguments
- AT&T
- Comments
- Directives
- Macros
- Assignment
- Indirect Addressing
- Load Effective Address
- Segment Offsets
- RIP-Relative Addressing
- Sign Extension
- Arithmetic
- No Operation
- Basic Operations
- Bitwise Operators
- Floats
- ST Use
- XMM Use
- Conditionals
- Condition Flags
- Condition Codes
- Jumps
- Conditional Moves
- Jump Tables
- Loops
- Jump and Loop Optimizations
- Loop instructions
- Functions
- Stack Space
- Base Pointer and Stack Pointer
- Caller- and Callee-Saved Registers
- x64 ABI
- IA-32 ABI
- Return Types
- System Calls
- Strings
- cld, std
- lods, stos
- scas
- movs
- cmps
- rep, repz, repnz
- Signal and Interrupts
- Interrupts
- Signals
- Exceptions
- SIMD
- Concept
- Packed Data
- Instruction Set
Is there a discount available for current students?
UMBC students and alumni, as well as students who have previously taken a public training course with UMBC Training Centers are eligible for a 10% discount, capped at $250. Please provide a copy of your UMBC student ID or an unofficial transcript or the name of the UMBC Training Centers course you have completed. Asynchronous courses are excluded from this offer.
What is the cancellation and refund policy?
Student will receive a refund of paid registration fees only if UMBC Training Centers receives a notice of cancellation at least 10 business days prior to the class start date for classes or the exam date for exams.