📄 changes
字号:
* Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
as well - testing might be desirable...
08/07/00
--------
* James Seter - -postfix, -prefix command line switches.
* Yuri Zaporogets - rdoff utility changes.
0.98p1
------
* GAS-like palign (Panos Minos)
* FIXME: Someone, fill this in with details
0.98bf (bug-fixed)
----------------------------------
* Fixed - elf and aoutb bug - shared libraries
- multiple "%include" bug in "-f obj"
- jcxz, jecxz bug
- unrecognized option bug in ndisasm
0.98.03 with John Coffman's changes released 27-Jul-2000
--------------------------------------------------------
* 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.
* 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.
* 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'.
* 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)
* 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)
* 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
Kendall Bennett's SciTech MGL changes
-------------------------------------
Note that you must define "TASM_COMPAT" at compile-time
to get the Tasm Ideal Mode compatibility.
All changes can be compiled in and out using the TASM_COMPAT macros,
and when compiled without TASM_COMPAT defined we get the exact same
binary as the unmodified 0.98 sources.
standard.mac, macros.c:
. Added macros to ignore TASM directives before first include
nasm.h:
. Added extern declaration for tasm_compatible_mode
nasm.c:
. Added global variable tasm_compatible_mode
. Added command line switch for TASM compatible mode (-t)
. Changed version command line to reflect when compiled with TASM additions
. Added response file processing to allow all arguments on a single
line (response file is @resp rather than -@resp for NASM format).
labels.c:
. Changes islocal() macro to support TASM style @@local labels.
. Added islocalchar() macro to support TASM style @@local labels.
parser.c:
. Added support for TASM style memory references (ie: mov [DWORD eax],10
rather than the NASM style mov DWORD [eax],10).
preproc.c:
. Added new directives, %arg, %local, %stacksize to directives table
. Added support for TASM style directives without a leading % symbol.
Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
* A new keyword %xdefine and its case-insensitive counterpart %ixdefine.
They work almost the same way as %define and %idefine but expand
the definition immediately, not on the invocation. Something like a cross
between %define and %assign. The "x" suffix stands for "eXpand", so
"xdefine" can be deciphered as "expand-and-define". Thus you can do
things like this:
%assign ofs 0
%macro arg 1
%xdefine %1 dword [esp+ofs]
%assign ofs ofs+4
%endmacro
* Changed the place where the expansion of %$name macros are expanded.
Now they are converted into ..@ctxnum.name form when detokenizing, so
there are no quirks as before when using %$name arguments to macros,
in macros etc. For example:
%macro abc 1
%define %1 hello
%endm
abc %$here
%$here
Now last line will be expanded into "hello" as expected. This also allows
for lots of goodies, a good example are extended "proc" macros included
in this archive.
* Added a check for "cstk" in smacro_defined() before calling get_ctx() -
this allows for things like:
%ifdef %$abc
%endif
to work without warnings even in no context.
* Added a check for "cstk" in %if*ctx and %elif*ctx directives -
this allows to use %ifctx without excessive warnings. If there is
no active context, %ifctx goes through "false" branch.
* Removed "user error: " prefix with %error directive: it just clobbers the
output and has absolutely no functionality. Besides, this allows to write
macros that does not differ from built-in functions in any way.
* Added expansion of string that is output by %error directive. Now you
can do things like:
%define hello(x) Hello, x!
%define %$name andy
%error "hello(%$name)"
Same happened with %include directive.
* Now all directives that expect an identifier will try to expand and
concatenate everything without whitespaces in between before usage.
For example, with "unfixed" nasm the commands
%define %$abc hello
%define __%$abc goodbye
__%$abc
would produce "incorrect" output: last line will expand to
hello goodbyehello
Not quite what you expected, eh? :-) The answer is that preprocessor
treats the %define construct as if it would be
%define __ %$abc goodbye
(note the white space between __ and %$abc). After my "fix" it
will "correctly" expand into
goodbye
as expected. Note that I use quotes around words "correct", "incorrect"
etc because this is rather a feature not a bug; however current behaviour
is more logical (and allows more advanced macro usage :-).
Same change was applied to:
%push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,
%assign,%iassign,%undef
* A new directive [WARNING {+|-}warning-id] have been added. It works only
if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
* A new warning type: macro-selfref. By default this warning is disabled;
when enabled NASM warns when a macro self-references itself; for example
the following source:
[WARNING macro-selfref]
%macro push 1-*
%rep %0
push %1
%rotate 1
%endrep
%endmacro
push eax,ebx,ecx
will produce a warning, but if we remove the first line we won't see it
anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
eats such constructs without warnings at all).
* Added a "error" routine to preprocessor which always will set ERR_PASS1
bit in severity_code. This removes annoying repeated errors on first
and second passes from preprocessor.
* Added the %+ operator in single-line macros for concatenating two
identifiers. Usage example:
%define _myfunc _otherfunc
%define cextern(x) _ %+ x
cextern (myfunc)
After first expansion, third line will become "_myfunc". After this
expansion is performed again so it becomes "_otherunc".
* Now if preprocessor is in a non-emmitting state, no warning or error
will be emmitted. Example:
%if 1
mov eax,ebx
%else
put anything you want between these two brackets,
even macro-parameter references %1 or local labels %$zz
or macro-local labels %%zz - no warning will be emmitted.
%endif
* Context-local variables on expansion as a last resort are looked up
in outer contexts. For example, the following piece:
%push outer
%define %$a [esp]
%push inner
%$a
%pop
%pop
will expand correctly the fourth line to [esp]; if we'll define another
%$a inside the "inner" context, it will take precedence over outer
definition. However, this modification has been applied only to
expand_smacro and not to smacro_define: as a consequence expansion
looks in outer contexts, but %ifdef won't look in outer contexts.
This behaviour is needed because we don't want nested contexts to
act on already defined local macros. Example:
%define %$arg1 [esp+4]
test eax,eax
if nz
mov eax,%$arg1
endif
In this example the "if" mmacro enters into the "if" context, so %$arg1
is not valid anymore inside "if". Of course it could be worked around
by using explicitely %$$arg1 but this is ugly IMHO.
* Fixed memory leak in %undef. The origline wasn't freed before
exiting on success.
* Fixed trap in preprocessor when line expanded to empty set of tokens.
This happens, for example, in the following case:
#define SOMETHING
SOMETHING
0.98
----
All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
* The documentation comment delimiter is \# not #.
* Allow EQU definitions to refer to external labels; reported by
Pedro Gimeno.
* Re-enable support for RDOFF v1; reported by Pedro Gimeno.
* Updated License file per OK from Simon and Julian.
0.98p9
------
* Update documentation (although the instruction set reference will
have to wait; I don't want to hold up the 0.98 release for it.)
* Verified that the NASM implementation of the PEXTRW and PMOVMSKB
instructions is correct. The encoding differs from what the Intel
manuals document, but the Pentium III behaviour matches NASM, not
the Intel manuals.
* Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
Stefan Hoffmeister.
* Resurrect the -s option, which was removed when changing the
diagnostic output to stdout.
0.98p8
------
* Fix for "DB" when NASM is running on a bigendian machine.
* Invoke insns.pl once for each output script, making Makefile.in
legal for "make -j".
* Improve the Unix configure-based makefiles to make package
creation easier.
* Included an RPM .spec file for building RPM (RedHat Package Manager)
packages on Linux or Unix systems.
* Fix Makefile dependency problems.
* Change src/rdsrc.pl to include sectioning information in info
output; required for install-info to work.
* Updated the RDOFF distribution to version 2 from Jules; minor
massaging to make it compile in my environment.
* Split doc files that can be built by anyone with a Perl interpreter off
into a separate archive.
* "Dress rehearsal" release!
0.98p7
------
* Fixed opcodes with a third byte-sized immediate argument to not
complain if given "byte" on the immediate.
* Allow %undef to remove single-line macros with arguments. This
matches the behaviour of #undef in the C preprocessor.
* Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
compatibility with most C compilers and preprocessors. This allows
Makefile options to be shared between cc and nasm, for example.
* Minor cleanups.
* Went through the list of Katmai instructions and hopefully fixed the
(rather few) mistakes in it.
* (Hopefully) fixed a number of disassembler bugs related to ambiguous
instructions (disambiguated by -p) and SSE instructions with REP.
* Fix for bug reported by Mark Junger: "call dword 0x12345678" should
work and may add an OSP (affected CALL, JMP, Jcc).
* Fix for environments when "stderr" isn't a compile-time constant.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -