⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 changes

📁 一个免费的汇编语言编译器的源代码
💻
📖 第 1 页 / 共 4 页
字号:
* 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 + -