Corrections

 

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 *