summaryrefslogtreecommitdiff
path: root/README09b.txt
blob: affb91ab8c5e98c8b56c462e82c5e985218f18a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

                    README
          NASM, the Netwide Assembler


 Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
 ========================================================

1. More closely compatible with 0.98 when -O0 is implied 
or specified.  Not strictly identical, since backward 
branches in range of short offsets are recognized, and signed
byte values with no explicit size specification will be
assembled as a single byte.

2. More forgiving with the PUSH instruction.  0.98 requires
a size to be specified always.  0.98.09b will imply the size
from the current BITS setting (16 or 32).

3. Changed definition of the optimization flag:

	-O0	strict two-pass assembly, JMP and Jcc are
		handled more like 0.98, except that back-
		ward JMPs are short, if possible.

	-O1	strict two-pass assembly, but forward
		branches are assembled with code guaranteed
		to reach; may produce larger code than
		-O0, but will produce successful assembly
		more often if branch offset sizes are not
		specified.

	-O2	multi-pass optimization, minimize branch
		offsets; also will minimize signed immed-
		iate bytes, overriding size specification.

	-O3	like -O2, but more passes taken, if needed


 Changes from 0.98 release to 98.03 as of 27-Jul-2000
 ====================================================

1. Added signed byte optimizations for the 0x81/0x83 class
of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
when used as 'ADD reg16,imm' or 'ADD reg32,imm.'  Also
optimization of signed byte form of 'PUSH imm' and 'IMUL
reg,imm'/'IMUL reg,reg,imm.'  No size specification is needed.

2. Added multi-pass JMP and Jcc offset optimization.  Offsets
on forward references will preferentially use the short form,
without the need to code a specific size (short or near) for
the branch.  Added instructions for 'Jcc label' to use the
form 'Jnotcc $+3/JMP label', in cases where a short offset
is out of bounds.  If compiling for a 386 or higher CPU, then
the 386 form of Jcc will be used instead.

This feature is controlled by a new command-line switch: "O",
(upper case letter O).  "-O0" reverts the assembler to no
extra optimization passes, "-O1" allows up to 5 extra passes,
and "-O2"(default), allows up to 10 extra optimization passes.

3. Added a new directive:  'cpu XXX', where XXX is any of: 
8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
Katmai.  All are case insensitive.  All instructions will
be selected only if they apply to the selected cpu or lower.
Corrected a couple of bugs in cpu-dependence in 'insns.dat'.

4. Added to 'standard.mac', the "use16" and "use32" forms of
the "bits 16/32" directive. This is nothing new, just conforms
to a lot of other assemblers. (minor)

5. Changed label allocation from 320/32 (10000 labels @ 200K+) 
to 32/37 (1000 labels); makes running under DOS much easier.
Since additional label space is allocated dynamically, this
should have no effect on large programs with lots of labels.
The 37 is a prime, believed to be better for hashing. (minor)

6. Integrated patchfile 0.98-0.98.01.  I call this version
0.98.03, for historical reasons:  0.98.02 was trashed.

--John Coffman <johninsd@san.rr.com>               27-Jul-2000

(end)