MASTERING TURBO ASSEMBLER -- CORRECTIONS as of 05/09/1990

Following are corrections to Tom Swan's Mastering Turbo Assembler,
(1989), published by Howard W. Sams, Indianapolis. Depending on when
you purchased your copy, some or all of these changes may already
have been made.

Many thanks to readers who have written to point out some these
errors, and to make other helpful suggestions!

---------
Page xxi -- The page number for Table 2-1 should be 20, not 200.
---------
Page 19 -- Near the bottom of the page, find the line that reads:
    "Next comes the MODEL directive, which must be preceded by DOSSEG."
Change that line to:
    "Next comes the MODEL directive, optionally preceded by DOSSEG."
---------
Page 25 -- In the first paragraph under the note, find the line that ends:
    "...exitCode, which a later instruction initialized..."
Change that line to:
    "...exitCode, initialized..."
---------
Page 25 -- Figure 2-2, change data to @data:
    ax, @data
---------
Page 28 -- Line 16, Program 2-1 (FF.ASM), change data to @data:
    16:    mov     ax, @data     ;Initialize ds to address
---------
Page 35 -- Change the example `td386 ff' to `td386 lf'
---------
Page 40 -- Line 30, Program 2-3 (EXESHELL.ASM), change data to @data:
    30:    mov     ax, @data     ;Initialize ds to address
---------
Page 43 -- Line 20, Program 2-4 (PR132.ASM), change data to @data:
    20:    mov     ax, @data     ;Initialize ds to address   
---------
Page 69 -- A printing error caused one of the horizontal lines in 
Figure 4-1 to be double printed. This line has no special significance 
and should not be bold.
---------
Page 76 -- Change `al' in the comment at the end of line 25 to `si'
---------
Page 79 -- In Figure 4-4, the labels ss:sp1, ss:sp2, and ss:sp3 are
upside down. To fix the figure, swap labels ss:sp1 and ss:sp3.
---------
Page 87 -- The comment in line 31 should be `;cx <- cx - 1'.
---------
Page 101 -- The comment to the last sample instruction on the page
should be `; ax <- ax / 16'.
---------
Page 110 -- In the example, move the popf instruction from its
present location to just above pop dx.
---------
Page 126 -- Change the last two sentences in the second paragraph
(the one under the top example) to: "By changing only the value
assigned to cx, this same sequence can fill up to 65,535 bytes. Set
cx to 0ffffh to repeat a string instruction this maximum number of
times. To fill 65,536 bytes, add an additional stosb instruction
after rep stosb."
---------
Page 166 -- Change the second to last line in the example from:
    mov di, OFFSET
to this:
    mov di, OFFSET welcome
---------
Page 177 -- The second line of the example should be two lines:
    string    db    'Lions and tigers and bears, oh my!', 0
    CODESEG
---------
Page 201 -- In the last sentence of the paragraph next to "Declaring
RECORD Types, change `anyByte' to `signedByte'.
---------
Page 203 -- In Figure 6-4, change `male:1' to `sex:1'.
---------
Page 210 -- Label @@20: at line 64 is not referenced and 
can be removed.
---------
Page 221 -- Line 41 can be shortened to:
    db    cr,lf,'(C) 1989 by Tom Swan',cr,lf,lf,EOS
---------
Page 225 -- Line 23 can be shortened to:
    prompt  db  cr,lf,lf,'Value to convert? ', EOS
---------
Page 258 -- Change the comment at line 85 to:
    ;     Cursor in current page repositioned to (row, column)
--------
Page 263 -- Change the comment at line 305 to:
    ; ScInit          Initialize SCREEN package
--------
Page 266 -- Label @@99: at line 113 is not referenced and 
can be removed.
--------
Page 266 -- Blank lines 116 and 117 should be separated:
    116:
    117:
---------
Page 308 -- Line 204 is an extra blank line and can be removed.
---------
Page 324 -- Change line 46 to:
    DW    err10, err11, err12, err13, err14, err15, err16, err17
---------
Page 325 -- In Figure 9-1, the arrow at left should originate
from the number 288, not below that number as shown.
---------
Page 339 -- Change the comment at line 168 to:
    ; Registers: ax, bx
---------
Page 339 -- Change the comment at line 191 to:
    ; Registers: ax, cx (indirectly), di
---------
Page 379 -- In line 23, change `%DISPLAY' to `DISPLAY'.
---------
Page 391 -- At mid page, change `%DISPLAY' to `DISPLAY'.
---------
Page 397 -- You can remove `BinToAscHex:proc,' from the EXTRN
directive at line 37. This procedure is never called.
---------
Page 397 -- Add the following instruction between lines 46 and 47:
    int 21h        ; Call DOS
Also insert the following two instructions between lines 55 and 56:
    push ds        ; Reset es to ds's current value
    pop  es
---------
Page 408 -- Change the first line of the unpacked example to:
    unpacked db 7,4,2,9,5,6,1,8,0,0
---------
Page 427 -- Find the line (sixth from top of first paragraph) that ends:
    "...thus reducing the key values"
Change that line to:
    "...thus reducing the key value"
---------
Page 427 -- Near the bottom of the page, change ASEG to DATASEG
---------
Page 427 -- In the last paragraph, change `table[row, column]' to
`matrix[row, column]'.
---------
Page 443 -- Near mid page, the line above ASSUME should be two lines:
    mov     ax, BlackerHole
    mov     es, ax
    ASSUME  ds:BlackHole, es:BlackerHole
---------
Page 451 -- In the example near the bottom, remove the line that reads:
    "jz  short @@10         ; Skip shift if all bits = 0"
This instruction does no harm, but is not needed.
---------
Page 568 -- Add this sentence to the description of lahf: "After
executing lahf, other bits in ah are undefined and may also change."
---------
Page 580 -- The Processor list for the movzx instruction is not
correct. This instruction is available only on 80386 processors. It
is not available on 8086/88 and 80286 processors.
---------
Page 596 -- In the last paragraph, change `zf = 1' to `zf = 0'.
---------
Page 597 -- In the last paragraph, change `zf = 0' to `zf = 1'.
---------
Page 643 -- In the answer to exercise 3-6, 27 should be 2^7 (2 to the
7th power). Change this sentence to: "2^7 is the power of column
number 7."
---------
