Please see end of this list for some notes. Please read "Difference between NBASM and NBASM32 source files" on page 7 of NBASM32.DOC History: v00.27.14 - v00.10.41 - (14 Mar 2024) - fixed the /D parameter - fixed .ifdef and .ifndef directives - included Jcc in 'could use short jump' checks - fixed a bug in the 'lea' instruction - fixed non-integer divides inside math operands (real numbers are not supported at all) - while in .rmode, all labels will be truncated to 16-bit offsets. - other bugs/modifications (0) v00.27.08 - v00.10.41 - (15 Feb 2024) - check for @b with no coresponding @@: since PROC - check for @f to missing @@: at ENDP - added the /z parameter to ignore all shift by/shift of diagnostic errors - removed the 'pop cs' instruction - fixed sizeof() so it can be in memory references. ex: mov ax,[bx+sizeof(word)] - an .enum can now have a value assigned to it. (see .enum in nbasm.doc) - added the STRUCTures to the list file - check that a STRUCT member isn't already defined - added the .checksum s o inline command (see nbasm.doc) - fixed the undefined dup instruction (somename dup 1234,?) - added the 'loww' to the 'low' and 'lowb' function - updated the documentation (trouble-shooting) with the imul instruction - other bugs/modifications (2) v00.26.94 - v00.10.41 - (1 Jan 2024) - Does not uppercase string literals within math statements mov ax,('a'-'A') ; would return 0, now returns 32 - fixed Phase Error between passes error - now allows SIZEOF() as third operand in IMUL instruction - gives error if *signed* third operand to large - add a few macros to match the existing documentation. %VER same as _VER %LINE same as _LINE %YEAR same as _YEAR %MONTH same as _MONTH %DAY same as _DAY However, you must still use the macros with the leading underscore within math statements. mov ax,(_LINE + 1) ; <-- correct mov ax,(%LINE + 1) ; <-- error. '%' is interpreted as the mod operand. (this addition's purpose is just to match dated and existing documentation. You can use either version of the macro outside of a math statement, but still must use the underscore version within a math statement.) - fixed the 'sub' and 'add' and similar instructions - fixed the 'or' instruction (when dword specified) - fixed DUP and no value parameter given - DUP now checks the size (in bytes) of the value to be written (byte, word, or dword) - Fixed the backslash character so that you can append the next line to this one - many documentation fixes and additions - other bugs/modifications (3) v00.26.81 - v00.10.41 - (8 Jan 2023) - Simple addition to show if the .daig directive was used to turn off diagnostic errors - other bugs/modifications (0) v00.26.80 - v00.10.41 - (23 May 2021) - Fixed a bug where STRUCTs where outside of the .CODE directive - other bugs/modifications (1) v00.26.78 - v00.10.41 - (19 Feb 2021) - fixed another bug in negative memory operand - other bugs/modifications (1) v00.26.76 - v00.10.41 - (22 Nov 2019) - fixed the 'add al,[ebx]' instruction - fixed bug in negative memory operand - other bugs/modifications (1) v00.26.73 - v00.10.41 - (31 May 2017) - unique labels (@@: for example) were still being processes inside a null .if statement - changed the following symbol names: %VER to _VER %LINE to _LINE %YEAR to _YEAR %MONTH to _MONTH %DAY to _DAY (please update your .asm source files to match) - other bugs/modifications (1) v00.26.70 - v00.10.41 - (21 Sept 2016) - Improved the fpu instruction support. Most all fpu instructions should now be supported - other bugs/modifications (1) v00.26.61 - v00.10.40 - (19 Aug 2016) - increased the size of the type define strings - other bugs/modifications (0) v00.26.60 - v00.10.40 - (10 Aug 2016) - incbin now allows the filename to be inclosed in single quotes. - other bugs/modifications (0) v00.26.59 - v00.10.40 - (26 Sept 2015) - fixed displacement when using [bp] without any displacement value. ex: mov ax,[bp] ; (now correctly assembles) - other bugs/modifications (0) v00.26.58 - v00.10.40 - (26 Aug 2015) - fixed an error in nbdisasm and the SIB byte - added the .DIAG x directive - other bugs/modifications (1) v00.26.56 - v00.10.39 - (21 Nov 2014) - added the C style 0x0000 numberic values - fixed %out and %error macros - other bugs/modifications (2) v00.26.52 - v00.10.39 - (23 Jun 2013) - fixed bug with [esp] - fixed buffer overflow error - fixed error code 0x33 - fixed DUP directive when count > 65535 - added instructions (0) - other bugs/modifications (0) v00.26.48 - v00.10.39 - (13 May 2013) - Didn't allow 'mov eax,[ebx]'. doh! - added instructions (1) - other bugs/modifications (0) v00.26.46 - v00.10.39 - (5 May 2013) - Now allows nested .if blocks (up to 50 deep) - added instructions (0) - other bugs/modifications (1) v00.26.45 - v00.10.39 - (1 Mar 2012) - fixed the xor reg8,memreg32 instruction - added instructions (0) - other bugs/modifications (0) v00.26.44 - v00.10.39 - (25 June 2011) - added the outfile directive - fixed the %error and %out directives - added instructions (0) - other bugs/modifications (0) v00.26.42 - v00.10.39 - (04 Mar 2011) - fixed a bug with the immediate addressing mode - added instructions (0) - other bugs/modifications (0) v00.26.41 - v00.10.39 - (04 Apr 2010) - Cleaned up source code and added a few optimizations - added instructions to NBDISASM - added instructions (0) - other bugs/modifications (0) v00.26.39 - v00.10.32 - (12 Mar 2010) - added the /L{} parameter - include directive now allows the filename to have spaces in the path (include 'a path with spaces\filename.inc') - added instructions (5) - other bugs/modifications (2) v00.26.31 - v00.10.32 - (16 Dec 2009) - fixed imul eax,ebx,immed32 instruction - other bugs/modifications (0) v00.26.30 - v00.10.32 - (11 Dec 2009) - fixed a bug that 26.28 created with the .exit n directive. - other bugs/modifications (1) v00.26.28 - v00.10.32 - (08 Dec 2009) - fixed the imul instruction - fixed long addressing mov eax,[si+100h] (I can't imagine why I never caught it!) - other bugs/modifications (3) v00.26.22 - v00.10.32 - (01 Jun 2009) - A few more error listings - fixed the %line operand - optimized the 'and word [1234h],immed8' and related instructions - fixed a bug with the ds: override - other bugs/modifications (1) v00.26.17 - v00.10.32 - (16 Aug 2008) - now allows a count of zero in the DUP operand. - cosmetic update for nbdisasm - other bugs/modifications (1) v00.26.15 - v00.10.30 - (17 July 2008) - if using math, ()'s, if a label ended in numerals, the numerals where extracted off. (here0-1) == (here 0-1) == syntax error - other bugs/modifications (0) v00.26.14 - v00.10.30 - (23 June 2008) - I have also renamed the 16-bit version to NBASM16, and the 32-bit version to NBASM. - Now returns an error if immed is larger than register example: cmp bl,123h The above use to assemble with out errors, now the error is caught - other bugs/modifications (1) v00.26.12 - v00.10.30 - (15 June 2008) - Fixed error when listing file item was more than 65535 in length. - other bugs/modifications (0) v00.26.11 - v00.10.30 - (13 May 2008) - Added a diagnostic error when (n < n) is used. This error is displayed when a compare is used when a shift might have been wanted. To disable diagnostic errors, use the /d switch - modified the clear screen code in the nbasmc.lib - other bugs/modifications (0) v00.26.10 - v00.10.30 - (10 April 2008) - Added the .popadbug directive. See the documentation in NBASM32.DOC - Added to the FAQ list - other bugs/modifications (0) v00.26.09 - v00.10.30 - (31 Jul 2007) - Start of the 64-bit immediates allowed (currently in DQ declarations) - other bugs/modifications (1) v00.26.07 - v00.10.30 - (31 Jan 2007) - NBASM wasn't writing the 0x66 override for iret(d) - Fixed a lot of errors in NBDISASM - added instructions (0) - other bugs/modifications (0) v00.26.06 - v00.10.23 - (23 Oct 2006) - The List file now 'compresses' the DUP and ORG listing so that you don't have an unneccassarily long list file. See page 63 of NBASM32.DOC - Fixed a bug in ror and rol. They where disassembled backward. - added instructions (0) - other bugs/modifications (0) v00.26.05 - v00.10.22 - (30 Sept 2006) - Fixed error where the preparser would modify a string if that string contained a set of chars that matched and equate symbol name. - added instructions (0) - other bugs/modifications (0) v00.26.04 - v00.10.22 - (06 July 2006) - EQUate symbols now are allowed to have leading spaces. i.e.: The lable for the EQUate does not have to start in column zero - fixed the %year, %month, %day macros - added the incbin directive - fixed the error with the math (evaluator code). before fix: (10 - (2*2) - 1) = 7 because my code was doing (10 - ((2*2) - 1)) please double check your code to make sure you weren't taking advantage of the error. - now only prints the "Segment near (or at) 64k limit" error once. - extended the write buffer to two meg instead of 64k. - fixed an error with the float/double/etc. code - added instructions (0) - other bugs/modifications (0) v00.25.97 - v00.10.22 - (8 Oct 2005) - fixed a few instructions that were not getting disassembled correctly in nbdisasm. - added instructions (0) - other bugs/modifications (1) v00.25.97 - (16 Sept 2005) - ** NBDISASM 00.10.05 is now included ** Please read nbdisasm.doc for more information. - I know of a few errors still included with NBDISASM. - I should have them fixed with the next release - fixed some more errors with the SIB byte encoding - Please note that the following type of instruction stille has errors: mov eax,a_label[eax-1] The problem comes when one of the displacement items is outside of the []'s. I hope to have this fixed soon. For now, please don't use displacements outside of the []'s. - added instructions (3) - other bugs/modifications (3) v00.25.92 - (3 Sept 2005) - NBASM now supports jump forward and jump backward See nbasm32.doc, page 15 for the description and page 48, example three. - other bugs/modifications (0) v00.25.91 - (1 Sept 2005) - NBASM now supports math operands in memory operands. Examples: mov eax,[eax+(1234h+1)] mov eax,[eax+(1234h>>1)] etc. Please see next item about making sure you use the ()'s when needed. - NBASM now supports multiple 32-bit registers in memory operands, including the scale_factor operand. (It is just in the testing phaze, so please let me know if you find something in error) Examples: mov eax,[eax+ebx] mov eax,[eax+ebx*4] cmp dword [eax*4],12345678h mov eax,[esi*4+1234],edx *Please* note the following: if NBASM see's the following line mov eax,[eax+1234h*4] NBASM will take it as mov eax,[eax*4+1234h] where the +1234 is the offset, and *4 is the scale factor. NBASM will *not* take it as mov eax,[eax+(1234h*4)] You have to specifically add the ()'s - other bugs/modifications (1) v00.25.86 - (23 Aug 2005) - fixed error with and esp,IMMED - other bugs/modifications (1) v00.25.84 - (16 Aug 2005) - other bugs/modifications (1) v00.25.83 - (24 June 2005) - added scripts (See page 60 in NBASM32) - added the /D command line switch (See page 61 in NBASM32) - fixed bug with 32-bit memory operands - - added examples (0) - speed optimizations (0) - other bugs/modifications (3) v00.25.79 - (26 July 2003) - a major bug was added with the last release, when giving a source file name with an extention. Sorry if this bit anyone. - added examples (0) - speed optimizations (0) - other bugs/modifications (3) v00.25.75 - (25 May 2003) - added the SHLD and SHRD instructions (Double Precision) - added/fixed many current and new instructions see examples\all.asm for all the instructions nbasm supports - now doesn't give a diagnostic error for 'ds:[bp\ebp\esp]' - worked with the HIGH and LOW operands (see NBASM32.DOC for more) - added examples (24) - speed optimizations (0) - other bugs/modifications (1) v00.25.64 - (13 Feb 2003) - added the .IFDEF and .IFNDEF operators - fixed the nasty 'jcc tofar' bug created in last release...... - added examples (0) - speed optimizations (0) - other bugs/modifications (1) v00.25.60 - (13 Jan 2003) - added numerous error checking items - fixed a few minor bugs - added examples (0) - speed optimizations (0) - other bugs/modifications (3) v00.25.55 - (10 Jan 2003) - *added unions* (smile) - fixed a nasty bug with the 'push' and 'pop' instructions. - fixed a small bug with the EQUates and the preparser - fixed the '=' and '==' operators with in a '(...)' symbol - added examples (0) - speed optimizations (0) - other bugs/modifications (1) v00.25.50 - (01 Jan 2003) - fixed the CBW/CWDE with the 66h prefix in pmode and rmode - greatly enhanced and fixed the EQUates (read NBASM32.DOC for more info and some WARNINGs) - added examples (0) - speed optimizations (0) - other bugs/modifications (0) v00.25.48 - (23 Nov 2002) - added the DQ operand (Declare Quad) - fixed a nasty bug with the 32-bit acumulator and a few instructions that used it - NBASME.INC contains TRUE = 0, FALSE = -1. Ofcourse this isn't correct. :) Sorry, it is changed now. Correct: TRUE = 1, FALSE = 0. - corrected addressing if symbol was before offset 0100h. - fixed the IMUL instruction - fixed the call far/jmp far instructions when in pmode - added examples (1) - speed optimizations (0) - other bugs/modifications (6) v00.25.35 - (03 July 2002) - added a few more 32-bit instructions - worked with the 32-bit memory operands - fixed a small bug with STRUCT defination overflow's - added the POINTER operand ( -> ) for use with STRUCTures (see page 54 of NBASM32.DOC) - added the .ENUM operator. (see page 56 of NBASM32.DOC) - speed optimizations (0) - other bugs/modifications (1) v00.25.29 - (22 June 2002) - fixed a small error in GS: and FS: - fixed the 67h addition in pmode - fixed bug with 32-bit memory operands and MODr/m addressing - worked on the .obj stuff - worked on the .pmode stuff - fixed a horrible bug in the 'math' operator. ex: (10 - 2 - 3) * CHANGE: You can no longer use the double quotes to define a value through a char. i.e.: mov al,"A" ; is no longer valid mov ax,"AB" ; is no longer valid mov al,'A' ; is still valid mov ax,'AB' ; is still valid (sorry for the change, but it had to happen for a few other reasons) - speed optimizations (0) - other bugs/modifications (6) v00.25.16 - (09 June 2002) * CHANGE: if you use the %out and %error macros, please see the documentation about the pass number used with these two macros. - Changed the pause routine in the two examples. My laptop's Phoenix BIOS does not support that function. - fixed the 'uses' operands if in pmode. - fixed the IRETD error. - CPUID now does not add a 66h if in rmode. - fixed "out of range by 0 byte(s)" error discription. (the error string was off by one byte, nothing wrong with acutal code generation.) - speed optimizations (0) - other bugs/modifications (1) v00.25.10 - (19 May 2002) - NBASM32 now includes the beginning of the .OBJ output format. See page 54 of NBASM32.DOC and DEMO3.ASM for more. - NBL, the NewBasic Linker released in pre-beta form. - Some memory operands fixed - speed optimizations (0) - other bugs/modifications (2) v00.25.00 - (08 Mar 2002) - 32-bit version of NBASM. Now includes unlimited file sizes, larger symbol table, PMODE, as well as many new features. - Please note that NBASM32 requires a DPMI and a 32-bit processor. - Please note that NBASM32 is released in pre-beta form. It has not been checked for all possible instances. - Please note that some of the 32-bit addressing is broken. e.g: [ebx], [ebx*4+1], [ecx+eax+3] etc.... - If you find an error in NBASM32, but NBASM assembles your source with out the error, please let me know. * Please read the documentation about the shift operatores ( < and > ) and a few other changes you must make to your existing code. There are only two at this point and they may not even be used in your source code. But please check page 7 of NBASM32.DOC. ****************************************************************************** Unless otherwise noted, this is the last version of the 16-bit NBASM. Please start using NBASM32 unless system requirements restrict the use of NBASM32 on your machine. If you require the 16-bit version of NBASM and find a bug you would like fixed, please let me know. You may rename NBASM.EXE to NBASM16.EXE and then rename NBASM32.EXE to NBASM.EXE to maintain batch files, etc. ****************************************************************************** v00.24.95 - (08 Mar 2002) - fixed a few syntax errors - RET now allows an immed if ret is outside a proc/endp block - speed optimizations (0) - other bugs/modifications (0) v00.24.94 - (05 July 2001) - if you use VNBASM, it is recommended that you get the latest version (00.11.12) to be more compatible with NBASM. - worked with 'CALL WORD' and 'CALL DWORD' - added more error checking and with better detail - added the .NORET directive (see the documentation) - speed optimizations (1) - other bugs/modifications (2) v00.24.92 - (28 Jun 2001) - fixed a bug with the STRUCTures. - cleaned the listing file output a little - speed optimizations (0) - other bugs/modifications (0) v00.24.90 - (12 May 2001) - now allows structure definations (see page 51 in NBASM.DOC). - now allows the sizeof directive (see page 53 in NBASM.DOC). - worked with the listing file output. - loop(x) now allows immediate values - worked with the INCLUDE directive. Now will search for the include files in the directory that the source file is in. See NBASM.DOC for more info. - speed optimizations (1) - other bugs/modifications (0) v00.24.87 - (19 Mar 2001) - added the /w parameter. This parameter writes your image to the boot sector of the specified drive. See Appendix B in NBASM.DOC for more information. - now correctly allows jumps to symbols as well as labels - fixed bug in the math code ( (symbol-100h), etc. ) - speed optimizations (0) - other bugs/modifications (1) v00.24.85 - (14 Mar 2001) - added, tested and fixed a few 32-bit instructions - fixed a bug with 'proc near uses [reg32] [reg32] [reg32]' - fixed and enhanced greatly the indirect memory operands (16-bit only) eg: mov ax,[bx][si][10h][-4] or mov ax,[bx+si+10h-4] mov ax,[bx][si][10h]-4 or mov ax,-4[bx+si+10h] mov ax,[bx][si][10h-4] or mov ax,[bx+si][10h-4] - changed EXE2COM.EXE to EXE2COM.COM if you download exe2com.com be sure to delete exe2com.exe - changed MEMORY.EXE to MEMORY.COM if you download memory.com be sure to delete memory.exe - speed optimizations (2) - other bugs/modifications (1) v00.24.83 - (09 Mar 2001) - tested and fixed a few 32-bit instructions - fixed a bug in the SHRNKEXE utility (see web page) - added the NOT operator (~) See NBASM.DOC: Operands: #7: Math equations - reorginized and cleaned up NBASM.DOC - you may now use a spacer (_) in your binary digits See NBASM.DOC: Operands: #3: Binary numbers - speed optimizations (0) - other bugs/modifications (0) v00.24.80 - (02 Mar 2001) - DD (declare dword) now works correctly - fixed the math funtions when spaces were included - EQU now allows 32-bit numbers - fixed the loadall instruction - added the %line macro - speed optimizations (2) - other bugs/modifications (1) - uploaded to SIMTEL (NBASM248.ZIP) v00.24.78 - (26 Feb 2001) - ** Now allows 32bit numbers ** (except as EQUates) (soon) - added a few more 32-bit instructions - now allows gs and fs on the 'uses' list - call far offset,segment now works correctly - fixed the bug with the HIGH and LOW directives * deleted the CLOCKS count (cycles used count) in the .lst file output. (see 00.24.07 and 00.24.03 below) The technique I was using was excelent for the .8086 through the .286, but would have returned many wrong counts with the .386 and up. - speed optimizations (1) - other bugs/modifications (0) v00.24.75 - (21 Feb 2001) - ** extensive work on the 32-bit instructions ** - added "most" 32-bit instructions up to the Pentium Pro - does not include the CR0 or .mmx registers or instructions (yet) - have not added code to allow 32 bit numbers yet (asap) (remember that a negative number is a 32 bit number when used with a 32 bit register) - let me know if you find any instructions that I missed or are not working correctly. - push/pop fs/gs now working correctly - the %error macro now uses a pass cound exactly like the %out macro - added the INT3 instruction (actually renamed it from INT) - added 'push dword immed32' (will push an immediate number on the stack as a dword size) - added the 'dword' keyword and "most" of the instructions that can use it. However, I still have not added the code to allow immediates to be more than word sized...(Soon I hope) * changed the pushb (push immed7) to push (dropped the 'b') pushb now used for 'push byte [(e)bx]' * deleted optimizer #6. push immed7 now automatically uses the smaller sized opcode. * deleted SEG ES: (etc.) -- now just use ES: (etc.) - speed optimizations (1) - other bugs/modifications (0) v00.24.56 - (13 Feb 2001) - now ignores the 0 in [bx+0] - worked on the library addition code - added more library functions - speed optimizations (0) - other bugs/modifications (0) v00.24.55 - (07 Feb 2001) - reduced the memory usage by 50k - added more 32 bit instructions - fixed a bug with EQUates and memory operands - added to the library (NBASMC.LIB) - speed optimizations (1) - other bugs/modifications (1) v00.24.50 - (29 Jan 2001) - Now have a mailing list. To subscribe, see readme.txt or simply send an empty email to: nbasm-subscribe@yahoogroups.com v00.24.50 - (25 Jan 2001) * source lines can be no longer than 256 bytes (use to be 1024) * changed 'push mem/memreg' to 'push word mem/memreg' i.e.: now needs the 'word' declaration (push word [bx]) - added 'smsw word [xxxx]' (needs .286P, .386P, or .486+) 'smsw reg16' (needs .286P, .386P, or .486+) - added 'alld' and 'alldf' (see documentation) - upped the symbol table size - added more 32 bit instructions ** Remember that not all 32 bit instructions or working properly If you use any 32 bit instructions, check assembled binary before you execute it to make sure they assembled correctly. I hope to have more of the 32 bit instructions fixed ASAP.... - speed optimizations (2) - other bugs/modifications (2) v00.24.42 - (11 Jan 2001) - fixed a bug with LOOPx and .386 - added a few more 32 bit instructions - speed optimizations (0) - other bugs/modifications (1) v00.24.40 - (26 Dec 2000) - spaces are now allowed in math equations ( 1 + 1 - 3 + 1 ) - fixed/added the MUL instruction(s) - fix: now allows equates as symbols inside memory operans - a little more error & syntax checking - speed optimizations (1) - other bugs/modifications (1) - uploaded to SIMTEL (NBASM244.ZIP) v00.24.29 - (22 Dec 2000) - fixed nasty bug with JMP FAR immed16,immed16 (would not increment IP correctly) - now won't allow the target file (.COM|.NBO) to be the same as the source file (.ASM) - now won't include a file that is already in the next of include files - speed optimizations (1) - other bugs/modifications (1) v00.24.24 - (13 Dec 2000) * changed .OPTOF to .OPTOFF (Simply added another 'F') * changed .ALGNW to .EVEN (Align on a word boundry (2 bytes)) * changed .ALGNP to .PARA (Align on a para boundry (16 bytes)) - added .PAGE (Align on a page boundry (512 bytes)) - worked with IMUL reg16,immed8 (signed) - added IMUL reg16,immed16 (signed) (please note that IMUL reg16,reg16,immed does not work correctly) (please note that IMUL [memreg],immed does not work correctly) - other bugs/modifications (1) v00.24.20 - (21 Nov 2000) - now allows '' inside math operations i.e.: mov al,('a'+1) - fixed bug with using EQUates as DW values - if using .exit with no operand in the Destination Field, then uses the current value of AL (see documentation for more) - other bugs/modifications (0) v00.24.17 - (25 Oct 2000) - now the 'short' keyword used in .386+ conditional jumps use the shorter instruction (2 byte instruction) - added another example (DEMO2.ASM) - other bugs/modifications (1) v00.24.15 - (21 Oct 2000) - fixed the error with the processor directives from last release (24.10) - worked with the FPU instructions - added the /d switch. (/d tells NBASM not to print Diagnostic errors) - other bugs/modifications (2) v00.24.10 - (20 Oct 2000) - now correctly assembles near and far jmps/calls (see documentation) - added some FPU instructions. * due to data space, reduced the user symbols from 1300 to 1200 (sooner or later, I would like to allocate all available memory for the symbol space. But for now, 1200 it is...) - other bugs/modifications (0) v00.24.08 - (08 Oct 2000) - a bug fix in version 24.03 below ([ax], [bx], etc.) I didn't fix it correctly and created a larger bug with memory operands. - other bugs/modifications (2) v00.24.07 - (12 Sept 2000) ? did some more work on the LIST with the CLOCKS output this feature is in development and testing!!!!!!!!! - now allows .386+ conditional jumps. i.e.: conditional jumps longer than 128 bytes. Once I get NBASM to have 3 passes, NBASM will optimize for size and use the two byte version if applicable. For now, if you give a .386 or higher directive, NBASM will use the four byte condition jump for all Jcc jumps. * due to data space, reduced the user symbols from 1400 to 1300 - other bugs/modifications (1) - speed optimizations (1) v00.24.03 - (20 Aug 2000) - now allows AAM and AAD to have an operand other than the assumed 0Ah - now returns error if [ax], [dx], or [cx] used ? have started the 'cycles used' entry in the list file output for each line. Plan to include the cycles used count for each line in a future release - other bugs/modifications (1) - speed optimizations (0) v00.24.00 - (29 Apr 2000) - now prints "phase error" message on first occurance (ignores the rest) - fixed bug so that you can include more symbols (etc.) on a DW line after an offset symbol entry - added the XLAT [BX] instruction. Same as the XLATB, except allows override (xlat cs:[bx])) - added more error definations per error returned - other bugs/modifications (4) - speed optimizations (2) - uploaded to SIMTEL (NBASM240.ZIP) v00.23.90 - (21 Mar 2000) - FINALLY fixed indirect addressing: [bx+symbol] and symbol[bx] - added prtint (print unsigned integer) to the library (for debugging) - now also allows [index+base]. NBASM will switch it to [base+index]. - now allows ORG 00h at beginning of program - fixed the memory reference stuff. now allows [symbol+immed] or [symbol+immed-immed] etc. - fixed forward references in Math Symbols and DW's. '(forwardsymbol+10h)' - now paddes with NOP's instead of nulls when 'moving' with ORG - added the %PRINT internal macro - now allows jcc short ($+n) - fixed bug with math functions and symbols (symbol+10) (phase error) - some minor documentation additions/modifications - other bugs/modifications (4) - speed optimizations (2) v00.23.73 - (24 Dec 1999) - bug fix: Long Filename with opening lib file using environment string - added better error definations per error returned - speed optimizations (1) v00.23.70 - (23 Dec 1999) - added long filename support (see nbasm.doc on the /l and /n switches) - added the .LIST directive - added the %ver macro - added the %title macro - added optimizer item #6 (push byte immed7) - now allows math i.e.: MOV AX,(1+2|3>1) (see NBASM.DOC) - added DD (Declare Double Word). (You still can't use 32 bit numbers) - worked with format of .lst files - now checks for CPU flag for external procedures - getsint in library now prints negative integers (16 bit) - bug fix: Now can jump/loop to a label with db/dw/dd/dup on it - bug fix: now pushs immed7/immed8 properly - other bugs/modifications (7) - speed optimizations (3) ? I have got most of the small model support done. It still does not produce workable .NBO files. The linker is almost done. * Does not allow nested proc/endp blocks anymore v00.23.48 - (12 Sept 1999) - added the 'Undefined data' DUP (See NBASM.DOC) * removed the '%' symbol/operand (watch out for using undefined data (DUP xx,?) and .externals) - added the undocumented POP CS instruction - other bugs/modifications (3) ? Coming soon: LIBMAN.EXE Allows you to create your own library for use with NBASM and the .external directive. v00.23.46 - (29 Aug 1999) - fixed the indirect addressing problem (See NBASM.DOC for more) - now allows command line parameters to begin with '-' as well as '/' - added error documentation to NBASM.DOC - other bugs/modifications (2) - optimizations (8) v00.23.44 - (21 Aug 1999) - modified the /I{} and INCLUDE filename.ext Now you can set the INCLUDE= env. var. to point to NBASMC.INC (see NBASM.DOC for more information) - added conditional assembly with the .if/.else/.endif block form - added the HIGH and LOW operators (see documentation under Pseudo-Operations) - added %error macro (see documentation) * removed the _CR (next line too) feature - bug fix: mov al,[dx] ? modified NBASMC.LIB for testing purposes - modified the .EXIT 'macro' to include a RC (see documentation) - other bug fixes (2) v00.23.35 - (30 Mar 1999) - now includes a SMALL tutorial on using NBASM and assembly language - now checks for iret, iretd, and retf for 'USES' directive - added the /1 parameter. NBASM does pass one only - includes 32 bit register/instruction support **Does NOT allow 32 bit numbers yet** **Does NOT included all 32 bit instructions and/or their variations** **Use with caution. I have not done a lot of testing on it yet** - fixed bug if a semicolon was inside a string - did a few optimizations for speed and size v00.23.29 - (18 Jan 1999) - if target file was already there and read/only, then NBasm assembled source and did not return an error while leaving the target file unchanged. (no new .com file) - xor now works correctly (was swapping dest/src) - added the %out macro (see documentation) - fixed the and, or, xor, sub, add, cmp, adc, & sbb instructions using -129 > immed < 128 (see v00.22.52 history item) - fixed displacement issue with mov ax,[bx+immed8] ? added 32 bit registers/instructions support ****for test only, should be done in next release version**** - fixed minor bug(s) (1) - added minor item(s) (1) v00.23.22 - (23 Dec 1998) - added the .EXIT 'macro' - added the .X86 directive (see NBASM.DOC) - fixed bug where if you had a char in a DB string that was ascii 12 or less, NBasm would change it to a space. not anymore, however you still can not have a char of 13 in your string. You must give a number of 13, rather than the actual ascii char. - now returns error if a string doesn't have a closing quote(s) mark - now gives error if a count of 0 in DUP - added the use of the underscore (_) at the end of a line. see NBASM.DOC for more details - added the call [bx] ; (near) - fixed minor bug(s) (1) v00.23.14 - (13 Dec 1998) % fixed bug created with version 00.23.13 below v00.23.13 - (11 Dec 1998) * changed xlat to xlatb (please see note #1 below) (the instruction is unchanged except for the 'name') - added/fixed the mem referencing by symbol with +/- immed mov ax,[symbol] mov ax,[symbol+100h] mov ax,[symbol-100h] mov ax,[100h+symbol-100h] Label1 equ $ ; equals this location Label2 equ [Label1+100h] ; equals location of label1 + 100h (you can have multiple immed's, but only one symbol reference) (spaces between symbols and immed's are not allowed) - fixed errors with more than one ORG in source file. - added the % Pseudo-Operation (see NBASM.DOC for more) - fixed minor bug(s) (1) v00.23.06 - (03 Dec 1998) - added the /B parameter (beep if an error encountered) - Now NBasm returnes valid error in ERRORLEVEL - fixed so that a hex number must start with 0-9, not A-F - changed push immed8 to push byte immed8 - added div byte [0000] - minor bugs/fixes/changes (1) v00.23.00 - (01 Nov 1998) - fixed bug with strings if no ending delimitor ( ' or " ) - added strings so that mov ax,'AB' is allowed - fixed 'proc far'. Now you can assemble far proc's. (however, you can not call them yet cause the .obj part isn't done) - Now allows label on ENDP line so that we can be MASM compatible - Now includes the .JUMPS directive (see documentation) v00.22.89 - (24 Oct 1998) - added the CALL FAR immd16,immd16 (offset,seg) - fixed minor bugs (3) v00.22.85 - (14 Oct 1998) - fixed the RETF instruction - gives error if not NEAR or FAR after PROC and before USES - now will search path(s) denoted in the LIB= environment variable for NBASMC.LIB - fixed so that if more than one RET in a proc block and 'USES' used, NBASM now properly pops registers for each RET v00.22.81 - (07 Oct 1998) - if didn't use .external, now doesn't try to add lib stuff (no noticable error unless nbasmc.lib not found) v00.22.80 - (01 Oct 1998) - added the ALL and ALLF keywords to the USES keyword - added code to optimizer #1 and #2 for EQU symbols that = 0 - added file i/o error checking for the lib stuff - modified the start up code to nbasm.exe to allow a 'full' data segment - now will allow more than one external symbol given on one line (.external symbol1, symbol2, symbol3) v00.22.75 - (29 Sept 1998) - now allows use of the library (NBASMC.LIB) Library also included (see nbasm.doc and nbasmc.doc for usage) - now allows reverse long jumps - fixed bug in reverse short jumps - cleaned up the symbol table dump in .lst file - revised error checking a little - removed the optimizer item for xchg reg16,accum16 (does it automatically now) - fixed bug so that you can 'push offset var1' - added mul reg (8086) imul reg (8086) div reg (8086) idiv reg (8086) imul reg16,immd (186) imul reg16,reg/mem (386) v00.22.52 - (13 Sept 1998) - fixed bug that didn't allow: mov reg,[immd] (mov ax,[0000]) % added the code to create smaller code for: add reg16,immd7 (add, adc, sub, sbb, cmp) (reg16 above does not include ax) v00.22.50 - (02 Sept 1998) - now allows indirection to be within backets: - before ---> mov ax,02[bx] - now will allow mov ax,[bx+02] - added shl/r mem/reg,immd8 rcl/r mem/reg,immd8 rol/r mem/reg,immd8 sal/r mem/reg,immd8 - fixed bug if a tab was in source file - improved the .start directive (read nbasm.doc for more info on .start, .stack, and the RET instruction) v00.22.38 - (25 Aug 1998) - fixed code to allow up to ten nested include files - fixed some bugs with the create .LST file code - modified the code for 386 opcode prefix's - fixed .x86/x87 directive attributes - added .x87 co-processor directives - added .x86P processor directives - added the fs: and gs: segment override - added code to allow .386+ instructions (no 32-bit registers yet) - added the following instructions: LFS, LGS, LSS (386+) MOVSX, MOVSZ (386+) CWDE, CDQ (386+) (somewhere I read that the following instructions were for 8086+.) (I found out different but elected to leave them in anyway) CMOVcc (Pentium Pro/II) - fixed other minor bugs v00.22.22 - (22 Aug 1998) - add optimization software read NBASM.DOC for the 6 items that NBasm will optimize for if '/o' is on the command line or .OPTON is in your code I hope to add more optimizations in later (beta) versions - made NBasm a little faster by optimizing a 'select case' structure v00.22.11 - (12 Aug 1998) - added the BYTE and WORD type specifiers example: movb [bx],00 ; is the same as mov byte [bx],00 ; this line - fixed bug if a count of 0 (zero) was given in a DUP declaration line: TEMP dup 0,1 ; now is the same as TEMP equ $ ; this line - added the code to allow RET as the 'exit to DOS' code in .COM files and gives an error in .OBJ files - added the undocumented instruction SALC - modified code so NBasm only needs a 80186+ processor and only needs DOS version 2.0 and up - NBasm now checks to see if running on a 186+ with DOS 2.0+ v00.22.06 - (11 Aug 1998) - Original Beta release Notes: 1. An item starts with one of the following chars, means: - = normal item. * = makes some previous source files not work with this addition. % = newer version contains a fix for this item (known or unknown bug at this items version) ? = undocumented item (for test only) (may stay, may go) (no support for) (use with caution) (you get the idea!)