rvine Assembly Language for x86 Processors
6th Edition
Chapter 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