Irvine Assembly Language for x86 Processors
6th EditionChapter Objectives
Last update: 3/7/2010
Chapter 1
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand common applications of assembly language
- Understand what an assembler does
- Understand hardware and software requirements for the book
- Know the basic history of PC Assemblers
- Differentiate between protected mode and real-address mode
- Learn basic principles of computer architecture as applied to the Intel
IA-32 processor family
- Learn how to recognize and convert boolean and hexadecimal integers
- Perform binary addition and subtraction
- Understand basic boolean operations
- Differentiate between signed and unsigned binary integers
- Understand ASCII character representation
Chapter 2
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand the basic structure of a microcomputer
- Be familiar with the instruction execution cycle
- Understand how computers read from memory
- Understand how the operating sytem loads and executes programs
- Know the modes of operand and basic execution environment of the IA-32 processors
- Be familiar with the floating-point unit and the histrory of Intel Processors
- Understand how memory is addressed in proteced mode and real-address mode
- Know the basic components of a microcomputer
- Understand the different levels of input-output
Chapter 3
After reading this Chapter, you should be able to understand or do each
of the following:
- Know how to represent integer constants, expressions, real number constants,
character constants, and string constants in assembly language
- Know how to formulate assembly language instructions, using valid syntax
- Understand the difference between instructions and directives
- Be able to code, assemble, and execute a program that adds and subtracts
integers
- Be able to create variables using all standard assembly language data types
- Be able to define symbolic constants
- Be able to calculate the size of arrays at assembly time
Chapter 4
After reading this Chapter, you should be able to understand or do each
of the following:
- Be able to use data transfer instructions in programs
- Be familar with the syntax and usage of the MOV, XCHG instructions
- Be familar with the syntax and usage of the ADD, INC, DEC, and SUB instructions
- Understand basic memory addressing modes
- Understand how arithmetic instructions affect the CPU status flags
- Know how to use the OFFSET, ALIGH, PTR, TYPE, LENGTHOF, and SIZEOF operators
- Know how to use indirect addressing
- Know how to code loops and unconditional jumps
Chapter 5
After reading this Chapter, you should be able to understand or do each
of the following:
- Know how to link your programs to an external code library
- Be familiar with all functions in the Irvine32 library
- Understand the process and usage of the runtime stack
- Know how to use the PUSH and POP instructions
- Know how to write programs that define and call procedures
- Know how to use flowcharts to describe program logic
- Understand how to use procedures when designing program structure
Chapter 6
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand the boolean instructions AND, OR, NOT, XOR, TEST
- Understand how to set and clear CPU status flags
- Understand how the CMP instruction affects CPU status flags
- Be familar with all types of conditional jump and loop instructions
- Know how to create conditional and looping structures using assembly language
- Know how to implement table-driven selection logic
- Know how to implement a finite-state machine in assembly language
- Know how to use the high-level MASM decision and looping directives such
as .IF, .ELSE, .REPEAT, and .WHILE)
Chapter 7
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand the usage of shift and rotate instructions
- Be able to use shift and rotate instructions to perform efficient multiplication
and division
- Understand and use the MUL, IMUL, DIV, and IDIV instructions
- Know how to perform sign extension of operands in division operations
- Perform extended precision addition and subtraction
- Use specialized instructions related to packed and unpacked decimal arithmetic
Chapter 8
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand how stack frames are used by high-level languages
- Know how to pass parameters by value and by reference on the stack
- Know how to create and access local variables on the stack
- Know how to write recursive functions in assembly language
- Know how to use the advanced forms of the INVOKE, ADDR, PROC, and PROTO
directives
- Know how to export and import function and variable names across module
boundaries
- Understand the basic stack architecture of Java Bytecodes
- Be familiar with the Java Virtual Machine
- Understand how simple Java arithmetic expressions are represented in Bytecodes
Chapter 9
After reading this Chapter, you should be able to understand or do each
of the following:
- Know the syntax and usage of the MOVSB, CMPSB, SCASB, LODSB instructions
- Know how to perform efficient string searches using SCASB
- Know how to copy strings efficiently using MOVSB
- Understand each of the selected string procedures from the book's link library
- Know how to traverse a two-dimensional array using advanced indexed addressing
modes
- Know how to perform a bubble sort of an integer array
- Know how to perform a binary search of an integer array
- Understand how strings are processed by Java Bytecodes
Chapter 10
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand the syntax for definining structures and unions
- Know how to reference structure and union variables in code
- Know how to work with nested structures
- Know how to create macros with multiple parameters
- Know how to create nested macros
- Be familiar with the macros in the book's macro libary
- Know how to use conditional-assembly directives
- Know how to use special macro operators such as concatenation (&)
- Know how to echo messages to the console at assembly time
- Know how to create repeat blocks at assembly time
Chapter 11
After reading this Chapter, you should be able to understand or do each
of the following:
- Be familiar with Win32 API functions relating to console input-output
- Be able to create procedure prototypes that match C-language prototypes
- Be able to input strings and individual characters using Win32 functions
- Be able to open, read, create, and write to text files
- Know how to create a stopwatch timer to measure code execution time
- Create a simple graphical MS-Windows application
- Use heap allocation functions to create dynamic data structures
- Understand basic concepts relating to protected mode memory
- Understand linear addresses and page translation in MS-Windows
Chapter 12
After reading this Chapter, you should be able to understand or do each
of the following:
- Be familiar with single, double, and extended precision IEEE formats
- Know the single-precision IEEE format in detail
- Know how to convert between decimal fractions and binary reals
- Know how to normalize a binary floating-point number
- Know how exponents are biased
- Be familair with the basic architecture of the IA-32 floating point unit
(FPU)
- Understand the four rounding modes in the FPU
- Be familiar with the standard floating-point exception types
- Know how to mask and unmask floating-point exceptions
- Know how to perform basic arithmetic using FPU instructions
- Be familiar with the FPU instruction set
- Know how to call the book's library functions for floating-point I/O
- Understand the concept of event synchronization betwee the CPU and FPU
- Be familiar with the IA-32 instruction format
- Know how to encode and decode MOV instructions that use registers and memory
operands
- Understand the structure of the Mod R/M byte
- Understand how operand-size prefixes are used
Chapter 13
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand the syntax for using inline assembly language in Microsoft C/C++
programs
- Be able to create C/C++ programs that use inline assembly language
- Be able to call 32-bit assembly language subroutines from C/C++ in protected
mode
- Be able to call functions in the C library from assembly language.
- Be familar with 16-bit assembly language subroutines called from C/C++ in
real-address mode
- Be familiar with parameter passing conventions used by Microsoft C++ compilers
Chapter 14
After reading this Chapter, you should be able to understand or do each
of the following:
- Be familiar with the memory organization of a typical PC running in real-address
mode
- Know how to redirect input-output on the command line
- Understand the mechanism for processing software interrupts
- Be familar with the INT instruction
- Know how to use INT 21h functions for console I/O in real-address mode
- Know how to create, close, and open files in MS-DOS
- Know how to randomly access files using INT 21h functions
- Be familiar with file I/O functions in the Irvine16 library
- Know how to read information from the MS-DOS command tail
- Know how to create a binary file
Chapter 15
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand basic hardware concepts relating to disk storage systems
- Understand basic disk components such as tracks, cylinders, and sectors
- Understand the concept behind disk partitions
- Be familiar with some basic characteristics of FAT16, FAT32, and NTFS file
systems
- Understand how logical sectors are organized on a typical FAT32 disk
- Be familiar with the way cluster chains hold file information
- Be able to call system level file functions relating to disk space, directories,
and file attributes
- Be familiar with functions that read and write disk sectors in real-address
mode
Chapter 16
After reading this Chapter, you should be able to understand or do each
of the following:
- Be familiar with the layout of the BIOS memory area on a typical PC
- Know how to perform low-level keyboard input with INT 16h
- Know how to poll the keyboard using INT 16h
- Know how to manipulate text attributes using INT 10h
- Know how to write text and graphics using INT 10h
- Know how to write graphics data directly to memory
- Be able to convert cartesian coordinates to screen coordinates
- Be familiar with the INT 33h functions for mouse handling
- Be able to track the movements of the mouse using INT 33h
Chapter 17
After reading this Chapter, you should be able to understand or do each
of the following:
- Understand how simplified segment directives generate segment structures
- Know how to use explicit segment directives
- Know how to use segment overrides
- Be able to combine different segments into a single segment
- Be familiar with the memory layout of the program segment prefix
- Be familiar with the rutime memory structure of COM and EXE programs
- Understand how hardware interrupts are processed
- Understand how IRQ levels are used to prioritize interrupts
- Know how to write a custom interrupt handler
- Know how to write a terminate and stay resident (TSR) program
- Know how to read and write data from I/O ports
- Be familiar with techniques to output sound from a speaker port