|
This page lists all corrections beginning with the First
printing in August 2002. The Third printing inlcudes all corrections prior
to March 2003. The Fourth printing includes all corrections prior to December
2004.
Update history, beginning with most recent corrections:
- 12/12/2005: p. 606
- 11/20/2004: p. 429, 453
- 06/21/2004: p. 568
- 06/16/2004: p. 190, 281
- 05/03/2004: p. 169, 517
- 03/31/2004: p. 256
- 01/06/2004: p. 424
- 12/11/2003: p. 489
- 11/26/2003: p. 618
- 11/17/2003: p. 290
- 10/27/2003: p. 164
- 08/10/2003: p. 80
- 08/03/2003: p. 4
- 08/01/2003: p. 664
- 07/24/2003: p. 251
- 03/19/2003: p. 89, 199
Each correction begins with a page number:
- 4: The seventh bullet should begin with: "Solutions to
odd-numbered programming exercises."
- 29: In review question 5, insert a "T" just before
the question mark.
- 34: The last sentence on the page should read: "The Intel386
used a six-stage execution cycle. Later, the Intel486 introduced pipelining."
- 42: Second paragraph, second sentence.
Change "eight segment" to "six segment".
- 51: The text in the gray box should
be: "Suppose a computer had 256 MB of RAM. The segment limit field
would contain 10000 hexadecimal because its value is implicitly multiplied
by 1000 hexadecimal, producing 10000000 hexadecimal (256 MB)."
- 80: Half way down the page, change "Read Appendix A"
to "Read Appendix D".
- 83: In the 4th code example on the page, remove the comma at
the end of the second line.
- 89: Code examples just below the middle of the page: change
"mov al,COUNT" to "mov ax,COUNT" and change "mov
al,500" to "mov ax,500".
- 90: In the last code example, the second statement should be:
"ListSize = 4". Also, the fourth code example on the page
should be "array DWORD COUNT DUP(0)".
- 101: In the code 13 lines from the bottom of the page, signedVal
should be initialized to -16.
- 102: First code example, first
line: change MOVZZ to MOVZX.
- 104: Third sentence: replace ", explained in Section 4.1.3"
with "(Section 4.1.4), except that XCHG does not accept immediate
operands."
- 112: Immediately after the illustration,
the sentence should begin with: "A slightly more technical way
of explaining overflow is to say that the flag is assigned..."
- 130: Code example at the bottom: Remove the ",0"
from the end of the definition of target.
- 133: First bullet, second sentence should read: "In a
byte, the CPU detects overflow by exclusive-ORing the carry out of bit
6 with the carry out of bit 7."
- 135: Top line. Change "target-2" to "target-1".
- 139: Seventh line: replace "in place of "hello.obj"."
with "in place of "hello"."
- 142: Second to last line, change "buffer" to "cmdTail"
in the MOV instruction.
- 164: First sentence: remove "(see jumps.asm)"
from the sentence.
- 169: (optional correction) Question 7, change "stack"
to "top of stack".
- 190: Second to last paragraph, right after MyLabel,
replace the two sentences with the following: "Prior to the Intel386,
the jump's range was limited to a 1-byte offset (positive or negative)
from the location of the next instruction following the jump. IA-32
processors have no such restriction."
- 190: Last paragraph: change "BX" to "5"
(occurs twice).
- 193: Change the first two lines of the code example to:
mov al,7Fh ; (7Fh or +127) cmp al,80h ; (80h or -128)
- 199: On line 8, change both "AX" to "semaphore"
in the description.
- 243: In Section 7.4.4.1, change all four "-65"
to "-101".
- 251: Question 6, first sentence: the names val1 and
val2 are reversed.
- 256: Exercise 1 should refer to Section 7.5.2, rather than
7.5.1.
- 256: In Exercise 3, first sentence, replace "seconds"
with "two-second increments". In the second sentence, replace
"02:16:07" with "02:16:14".
- 257: First code example: the return statement should be: "return
x;".
- 264: Second code example: The order of the three push statements
should be push TYPE..., push LENGTHOF..., and push OFFSET. (This order
conforms to the parameter passing convention used in the Irvine32 library).
- 266: In Example 2, add a comma after "ADDR Array"
- 268: In the first code
example, change the first line to:
MySub PROTO ; procedure prototype
- 278: The last sentence in Section 8.4.2.2 should be: "The
C language specifier appends a leading underscore to external procedure
names."
- 280: In the gray box, each occurrence of "k"
should be "ki"
- 281: In the ArrayFill procedure
at the bottom of the page, change "call Random_Range" to "call
RandomRange." Two lines after that, change "DWORD" to
"WORD".
- 281: 5 lines from the bottom of the page, change "mov
[esi],eax" to "mov [esi],ax".
- 281: 10 lines from the bottom of the page, change "ECX
< 0" to "ECX <= 0".
- 283: MySub procedure example, line 7: change "[ebp-20]"
to "[ebp-28]".
- 290: In Section Review question #6, the example Fibonacci series
should read (1,1,2,3,5,8,13,21...)
- 305: Last code example, fourth line: change to "mov ecx,LENGTHOF
source".
- 306: Code example, main procedure, fourth line: change "cx"
to "ecx".
- 307: Figure at the top of the page: change "SI"
to "ESI", and change "DI" to "EDI".
- 308: Array Multiplication Example: Remove the following phrase
from the introductory sentence: "and stores the product in a new
array."
- 329: Second paragraph, second sentence begins with: "For
example, when REPNE is used...".
- 346: Delete last sentence before Section 10.1.8.
- 380: Paragraph 4, third sentence should read: "They can
both display text in color." (The Win32 console functions do not
support command-line redirection."
- 381: Second paragraph. Delete the sentence beginning with "Consoles
read from standard input...".
- 382: Insert the following sentence just before Table 11-1:
Windows API functions do not preserve the EAX, EBX, ECX, and EDX registers.
- 382: Table 11-1, in the row beginning with BOOL: change "BYTE"
to "DWORD". Also, in the last row on page 382, change "DWORD"
to "PTR WORD".
- 402: Section 11.1.7: In the CONSOLE_CURS0R_INFO structure,
the bVisible field should be type DWORD.
- 424: In Figure 11-3, change "IP" to "EIP"
in the lower left corner.
- 429: First sentence: Change "A logical" to "The
selector in a logical".
- 436: 10th line from bottom, change "asm" to "__asm".
- 447: Insert a new line in _LongRandom, just before the RET
instruction: "shld edx,eax,16".
- 453: Fourth line from end: change "if( n == *p )"
to "if( searchVal == *p )".
- 455: Question 7 should be: "In
the LongRandom function shown in this section, what would happen to
the output if the ROR instruction were eliminated?"
- 456: Exercise 6. The title should
be "FindRevArray Procedure".
Also, in the second sentence, "FundRevArray" should be changed
to "FindRevArray".
- 466: Change the notes box for INT 21h Function 6 to
the following: "Does not check for Ctrl-break (^C)."
- 469: In the Sample Call box for INT 21h Function 0Bh,
insert "int 21h" on the line immediately following
"mov ah, 0Bh".
- 482: The paragraph at the beginning of Section 13.3.3.1 should
read: "The ReadString procedure reads a string from standard input,
and places the characters in an input buffer as a null-terminated string.
It terminates when the user presses the Enter key."
- 486-487, 491: Change spelling of "Get_CommandTail"
to "GetCommandtail".
- 489: 14 lines from the bottom of the page, change "1000h"
to "1000" (decimal).
- 501: Remove the first bulleted
item under "14.2.3 FAT32"
- 511: Second sentence: the MS-Windows utility that defragments
files is named "Disk Defragmenter" rather than "ScanDisk".
- 513: The name of the sample program should be "Sector16.asm".
Also, the definition of strHeading at the bottom of the page should
change from "Sector32.exe" to "Sector16.exe".
- 517: Fifth line: change "Sector32.asm" to "Sector
Display".
- 542: In Table 15-5, the caption of the middle column should
be: "Resolution (columns X rows)".
- 550: INT 10h Subfunction 03h.
In the Receives box, AH = 10h (not AX).
- 568: In line 3, change "361" to "321".
- 573: INT 33h Function 8. in the
Receives box, AX = 8. In the Sample Call box, the first
line should be: mov ax,8.
- 606: Insert the following line after .model tiny: ".386".
Appendixes:
- 618: First row of Table B-1. Add the DH, DL registers to the
list in the right-hand column.
- 620: The AND instruction clears the Overflow flag.
- 621: The BSF/SR instructions should show "?" for
Overflow, Sign, Zero, Aux, Parity, and Carry flags.
- 622: The BT/BTC/BTR/BTS instructions should show "?"
for Overflow, Sign, Zero, Aux, Parity, and Carry flags.
- 625: Change CWDE to CWD. Change its description to: "Convert
Word to Doubleword". This instruction extends the sign bit in AX
into the DX register. (Note: there is also a CWDE instruction,
but it is not used anywhere in the book.)
- 626: The ENTER instruction does not affect any flags.
- 629: The INTO instruction does not affect any flags.
- 629: Conditional jump instruction description: Change "-32768
to +32767" to "plus or minus 2 gigabytes".
- 630: JMP instruction, second sentence: Change -127
to -128.
- 631: The LAHF instruction transfers the following flags: Auxiliary
Carry, Carry, Parity, Sign, and Zero.
- 639: The REPcondition instruction prefix does not change
any flags. (The flags are changed by the instruction following it.)
- 637: In the box for POPA and POPAD,
change "Pop All Flags from Stack" to "Pop All".
- 645: The flags affected by the SUB instruction should be: O,
S, Z, A, P, C.
- 646: The TEST instruction clears the Overflow flag.
- 647: The XOR instruction clears the Overflow flag.
- 649: Add to the bullet list: "INT 33h mouse functions".
- 664: In Table D-1, add the /coff option. It generates the OBJ
file in Microsoft Common Object File Format.
Front Inside Cover, ASCII control characters:
- Code 1B should be Ctrl-[ rather than Ctrl-I.
- Code 1C should be Ctrl-\ rather than Ctrl-.
- Code 1D should be Ctrl-] rather than Ctrl-I.
Back Inside Cover:
- Left-facing page: In the top row of the table: change the first "1"
to "0", and change "46" to "48".
Individual Contributors
My sincere thanks to the following individuals who have
sent me bug reports! People whose names are marked with (*) were particularly
helpful.
- Applequist, Ken
- Avigdor, Naomi
- Bautistia, Ian
- Blackledge, Scott *
- Bloomfield, Arthur
- Bloomfield, Benjamin
- Bonaby, Kemmitt
- Burdick, Cliff
- Cahill, Gerald *
- Dawydiuk, Eddie
- Fawaz, Karim
- Franssell, Dan
- Frye, Robert *
- Gabrang, Glenn
- Gowdy, Jeremiah
- Harrington, Bryan
- Herrera, Alfredo
- Huston, Joseph
- Hu, Wen-Chen *
- Keppler, Kenny
- Lopez, Mario
- Manning, Robert *
- Nice, Harvey
- O'Neill, Tim
- Orlando, Matthew
- Perez, Gabriel *
- Rohini, Sud
- Ruparnine, Mohinder
- Sanchez, Ricardo *
- Schwartz, Ben
- Skupen, Andy
- Tang, Jingpeng
- Taylor, John *
- Togami, Warren
- Tomsin, Shea *
- Topham, David *
- Wedgwood, Matthew
- Wyatt, Joseph
- Ying, Victor *
- Zandi, James *
|