forked from KolibriOS/kolibrios
fasm 1.67.35
git-svn-id: svn://kolibrios.org@1053 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
31067bd91e
commit
77266e66b4
419
programs/develop/fasm/trunk/WHATSNEW.TXT
Normal file
419
programs/develop/fasm/trunk/WHATSNEW.TXT
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
|
||||||
|
Visit http://flatassembler.net/ for more information.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.35 (Mar 09, 2009)
|
||||||
|
|
||||||
|
[-] Some internal code size reductions.
|
||||||
|
|
||||||
|
[-] Discontinued "-d" switch implementation.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.34 (Feb 22, 2009)
|
||||||
|
|
||||||
|
[-] Fixed small bug with DT directive far pointer syntax.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.33 (Feb 20, 2009)
|
||||||
|
|
||||||
|
[+] Added ERR directive that allows to signalize error from the source.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.32 (Feb 13, 2009)
|
||||||
|
|
||||||
|
[+] Allowed single quote character to be put inside the number value,
|
||||||
|
to help improve long numbers readability.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.31 (Feb 11, 2009)
|
||||||
|
|
||||||
|
[-] Fixed floating point converter to no longer generate NaN in some cases,
|
||||||
|
and corrected denormal numbers generation.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.30 (Feb 08, 2009)
|
||||||
|
|
||||||
|
[+] Added missing Intel SSE4 instructions.
|
||||||
|
|
||||||
|
[+] Added SSE4a (EXTRQ/INSERTQ/MOVNTSD/MOVNTSS) instructions.
|
||||||
|
|
||||||
|
[+] Added FSTENVW/FSTENVD/FSAVEW/FSAVED mnemonics.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.29 (Nov 15, 2008)
|
||||||
|
|
||||||
|
[+] Added optional symbolic information output, and a set of tools that extract
|
||||||
|
various kinds of information from it.
|
||||||
|
|
||||||
|
[+] Allowed RVA operator to be used in COFF object format.
|
||||||
|
|
||||||
|
[-] Corrected the FIX directive to allow names of preprocessor's directives to be
|
||||||
|
used as prioritized symbolic constant name.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.28 (Nov 06, 2008)
|
||||||
|
|
||||||
|
[+] Added EFI/EFIBOOT/EFIRUNTIME subsystem keywords for PE format (experimental
|
||||||
|
feature, still needs to be tested).
|
||||||
|
|
||||||
|
[-] Fixed a bug in preprocessor which caused some problems with DISPLAY directive
|
||||||
|
output in some cases.
|
||||||
|
|
||||||
|
[-] Fixed a bug that allowed to define a symbol named "eip" or "rip".
|
||||||
|
|
||||||
|
[-] Fixed a problem with assembling MOVQ RAX,XMM0 instruction.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.27 (Jul 12, 2008)
|
||||||
|
|
||||||
|
[-] Fixed a bug which caused instructions from JCXZ/LOOP family to be incorrectly
|
||||||
|
assembled when requiring 67h prefix and provided with "$" operand.
|
||||||
|
|
||||||
|
[-] Definition of macro with the same name as one of the preprocessor's directives
|
||||||
|
is no longer allowed.
|
||||||
|
|
||||||
|
[-] Fixed REPT directive to check out validity of its parameters even when the
|
||||||
|
count is zero.
|
||||||
|
|
||||||
|
[-] Fixed VMREAD/VMWRITE syntax in the USE64 mode.
|
||||||
|
|
||||||
|
[-] Corrected MZ header generation and handling for the case when the last page of
|
||||||
|
executable contains the round 512 bytes.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.26 (Jan 27, 2008)
|
||||||
|
|
||||||
|
[+] Added partial SSE4 support (a couple of instructions left to be implemented
|
||||||
|
in the next releases)
|
||||||
|
|
||||||
|
[+] Added GETSEC instruction for the SMX functions calling.
|
||||||
|
|
||||||
|
[-] Some fixes and rearrangements in the DOS version.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.25 (Dec 30, 2007)
|
||||||
|
|
||||||
|
[-] Fixed a couple of bugs related to undefined symbol error signaling.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.24 (Dec 03, 2007)
|
||||||
|
|
||||||
|
[+] Added "-d" option to allow predefining symbolic constants from command line.
|
||||||
|
|
||||||
|
[-] Changed some of the error messages to be more informative.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.23 (Sep 08, 2007)
|
||||||
|
|
||||||
|
[+] Added "static" keyword for the "public" directive in COFF format.
|
||||||
|
|
||||||
|
[-] Redirected error information into stderr.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.22 (Aug 05, 2007)
|
||||||
|
|
||||||
|
[+] Allowed to check "@b" and "@f" symbols with "defined" operator.
|
||||||
|
|
||||||
|
[+] Allowed "as" operator to specify the output file extension when
|
||||||
|
placed at the end of the "format" directive line.
|
||||||
|
|
||||||
|
[-] Fixed a bug with stack size declaration in PE64 format that
|
||||||
|
caused assembler to crash.
|
||||||
|
|
||||||
|
[-] Corrected the VMREAD and VMWRITE instructions to allow registers
|
||||||
|
in place of memory operands.
|
||||||
|
|
||||||
|
[-] Corrected a mistake that made PLT operator not work correctly with
|
||||||
|
the CALL instruction.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.21 (Feb 17, 2007)
|
||||||
|
|
||||||
|
[+] Allowed 32-bit relocations in PE64 output format.
|
||||||
|
|
||||||
|
[-] Fixed a bug that caused "push cr0" error to go unnoticed by assembler.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.20 (Feb 12, 2007)
|
||||||
|
|
||||||
|
[-] Corrected the range checking of signed address displacements in 64-bit mode.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.19 (Feb 10, 2007)
|
||||||
|
|
||||||
|
[-] Disallowed labels starting with $ character.
|
||||||
|
|
||||||
|
[-] Fixed some problems with handling 32-bit relocations in 64-bit formats.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.18 (Dec 27, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a small mistake in the recent corrections of logical expression parser.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.17 (Dec 20, 2006)
|
||||||
|
|
||||||
|
[-] Corrected the precedence of operators of macroinstruction line maker.
|
||||||
|
The symbol escaping now has always the higher priority than symbol conversion,
|
||||||
|
and both have higher precedence than concatenation.
|
||||||
|
|
||||||
|
[-] Fixed problems with logical expression parser to handle correctly comparing
|
||||||
|
values containing round brackets with the EQ or EQTYPE operator.
|
||||||
|
The only limitation now is that when you use round brackets to enclose some
|
||||||
|
logical expressions, they must be paired everywhere inside those expressions.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.16 (Dec 17, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a really old bug in register expression calculator.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.15 (Nov 20, 2006)
|
||||||
|
|
||||||
|
[-] Some final (?) fixes and cleanup in the relative-offsets calculations.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.14 (Oct 28, 2006)
|
||||||
|
|
||||||
|
[-] Another small bug fixes.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.13 (Oct 26, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a bug with handling of invalid expressions by "defined" operator.
|
||||||
|
|
||||||
|
[-] Fixed a newly-introduced bug with relocations in automatically generated RIP-relative
|
||||||
|
addressings.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.12 (Oct 1, 2006)
|
||||||
|
|
||||||
|
[+] Added EIP-relative addressing, and fixed some bugs with RIP-related one aswell.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.11 (Sep 26, 2006)
|
||||||
|
|
||||||
|
[+] Added PLT operator for the ELF output format.
|
||||||
|
|
||||||
|
[-] Rearranged and fixed some of the relocation handling routines.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.10 (Sep 23, 2006)
|
||||||
|
|
||||||
|
[+] Added SSSE3 (Supplemental SSE3) instructions.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.9 (Sep 21, 2006)
|
||||||
|
|
||||||
|
[+] Added some Win64 headers and examples in the Windows package.
|
||||||
|
|
||||||
|
[-] Fixed another operand size checking bug with MOVQ instruction.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.8 (Sep 17, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a bug in address processing that caused disallowed combinations like
|
||||||
|
[qword eax] to be accepted.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.7 (Jul 31, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a bug that caused over-repeated processing of macro operators when
|
||||||
|
many embedded macros were placed in one line
|
||||||
|
|
||||||
|
[+] Added SYSRETQ mnemonic.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.6 (Jul 21, 2006)
|
||||||
|
|
||||||
|
[+] Added (not yet documented) RDMSRQ/WRMSRQ/SYSEXITQ mnemonics for the 64-bit
|
||||||
|
variants of respective instructions.
|
||||||
|
|
||||||
|
[+] Added information about memory allocation to the command line interfaces.
|
||||||
|
This should make it easier to decide when to use the -m switch.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.5 (Jul 7, 2006)
|
||||||
|
|
||||||
|
[-] Fixed encoding of MOV (E)AX,[WORD ADDR] instruction in 32-bit mode.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.4 (Jul 5, 2006)
|
||||||
|
|
||||||
|
[+] Added R8L-R15L (Intel-style) aliases for R8B-R15B registers.
|
||||||
|
|
||||||
|
[-] Further optimizations in the parser.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.3 (Jul 2, 2006)
|
||||||
|
|
||||||
|
[-] Improved an instruction searching algorithm a bit.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.2 (Jul 1, 2006)
|
||||||
|
|
||||||
|
[-] Fixed a recently introduced bug with ELF relocations in case of 32-bit
|
||||||
|
object.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.1 (Jun 30, 2006)
|
||||||
|
|
||||||
|
[+] Added the support for the new AMD SVM technology instructions.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.67.0 (Jun 28, 2006)
|
||||||
|
|
||||||
|
[-] The PE formatter now automatically detects whether relocatable labels
|
||||||
|
should be used, depending on whether the fixups directory is placed
|
||||||
|
somewhere into executable by programer, or not. This makes possible the
|
||||||
|
more flexible use of the addressing symbols in case of PE executable fixed
|
||||||
|
at some position.
|
||||||
|
|
||||||
|
[-] Added support for outputting the 32-bit address relocations in case of
|
||||||
|
64-bit object formats. This makes some specific instructions compilable,
|
||||||
|
but it also forces linker to put such generated code into the low 2
|
||||||
|
gigabytes of addressing space.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.66 (May 7, 2006)
|
||||||
|
|
||||||
|
[+] Added DEFINE directive to preprocessor, which defines symbolic constants,
|
||||||
|
the same kind as EQU directive, however there's an important difference
|
||||||
|
that DEFINE doesn't process symbolic constants in the value before
|
||||||
|
assigning it. For example:
|
||||||
|
|
||||||
|
a equ 1
|
||||||
|
a equ a+a
|
||||||
|
|
||||||
|
define b 1
|
||||||
|
define b b+b
|
||||||
|
|
||||||
|
defines the "a" constant with value "1+1", but the "b" is defined with
|
||||||
|
value "b+b". This directive may be useful in some advanced
|
||||||
|
macroinstructions.
|
||||||
|
|
||||||
|
[-] Moved part of the conditional expression processing into parser,
|
||||||
|
for slightly better performance and lesser memory usage by assembler.
|
||||||
|
The logical values defined with "eq", "eqtype" and "in" operators are now
|
||||||
|
evaluated by the parser and if they are enough to determine the condition,
|
||||||
|
the whole block is processed accordingly. Thus this block:
|
||||||
|
|
||||||
|
if eax eq EAX | 0/0
|
||||||
|
nop
|
||||||
|
end if
|
||||||
|
|
||||||
|
is parsed into just NOP instruction, since parser is able to determine
|
||||||
|
that the condition is true, even though one of the logical values makes no
|
||||||
|
sense - but since this is none of the "eq", "eqtype" and "in" expressions,
|
||||||
|
the parser doesn't investigate.
|
||||||
|
|
||||||
|
[-] Also the assembler is now calculating only as many logical values as it
|
||||||
|
needs to determine the condition. So this block:
|
||||||
|
|
||||||
|
if defined alpha & alpha
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
will not cause error when "alpha" is not defined, as it would with previous
|
||||||
|
versions. This is because after checking that "defined alpha" is false
|
||||||
|
condition it doesn't need to know the second logical value to determine the
|
||||||
|
value of conjunction.
|
||||||
|
|
||||||
|
[+] Added "short" keyword for specifying jump type, the "jmp byte" form is now
|
||||||
|
obsolete and no longer correct - use "jmp short" instead.
|
||||||
|
|
||||||
|
[-] The size operator applied to jump no longer applies to the size of relative
|
||||||
|
displacement - now it applies to the size of target address.
|
||||||
|
|
||||||
|
[-] The RET instruction with 0 parameter is now assembled into short form,
|
||||||
|
unless you force using the 16-bit immediate with "word" operator.
|
||||||
|
|
||||||
|
[+] Added missing extended registers for the 32-bit addressing in long mode.
|
||||||
|
|
||||||
|
[+] Added "linkremove" and "linkinfo" section flags for MS COFF output.
|
||||||
|
|
||||||
|
[+] Added support for GOT offsets in ELF object formatter, which can be useful
|
||||||
|
when making position-independent code for shared libraries. For any label
|
||||||
|
you can get its offset relative to GOT by preceding it with "rva" operator
|
||||||
|
(the same keyword as for PE format is used, to avoid adding a new one,
|
||||||
|
while this one has very similar meaning).
|
||||||
|
|
||||||
|
[-] Changed ELF executable to use "segment" directive in place of "section",
|
||||||
|
to make the distinction between the run-time segments and linkable
|
||||||
|
sections. If you had a "section" directive in your ELF executables and they
|
||||||
|
no longer assemble, replace it with "segment".
|
||||||
|
|
||||||
|
[-] The PE formatter now always creates the fixups directory when told to -
|
||||||
|
even when there are no fixups to be put there (in such case it creates the
|
||||||
|
directory with one empty block).
|
||||||
|
|
||||||
|
[-] Some of the internal structures have been extended to provide the
|
||||||
|
possibility of making extensive symbol dumps.
|
||||||
|
|
||||||
|
[-] Corrected FIX directive to keep the value intact before assigning it to the
|
||||||
|
prioritized constant.
|
||||||
|
|
||||||
|
[+] The ` operator now works with any kind of symbol; when used with quoted
|
||||||
|
string it simply does nothing. Thus the sequence of ` operators applied to
|
||||||
|
one symbol work the same as if there was just one. In similar manner, the
|
||||||
|
sequence of # operators now works as if it was a single one - using such a
|
||||||
|
sequence instead of escaping, which was kept for some backward
|
||||||
|
compatibility, is now deprecated.
|
||||||
|
|
||||||
|
[-] Corrected order of identifying assembler directives ("if db eq db" was
|
||||||
|
incorrectly interpreted as data definition).
|
||||||
|
|
||||||
|
[-] Many other small bugs fixed.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.64 (Aug 8, 2005)
|
||||||
|
|
||||||
|
[+] Output of PE executables for Win64 architecture (with "format PE64"
|
||||||
|
setting).
|
||||||
|
|
||||||
|
[+] Added "while" and "break" directives.
|
||||||
|
|
||||||
|
[+] Added "irp" and "irps" directives.
|
||||||
|
|
||||||
|
[+] The macro arguments can be marked as required with the "*" character.
|
||||||
|
|
||||||
|
[-] Fixed checking for overflow when multiplying 64-bit values - the result
|
||||||
|
must always fit in the range of signed 64 integer now.
|
||||||
|
|
||||||
|
[-] Segment prefixes were generated incorrectly in 16-bit mode when BP was used
|
||||||
|
as a second addressing register - fixed.
|
||||||
|
|
||||||
|
[-] The "local" directive was not creating unique labels in some cases - fixed.
|
||||||
|
|
||||||
|
[-] The "not encodable with long immediate" error in 64-bit mode was sometimes
|
||||||
|
wrongly signaled - fixed.
|
||||||
|
|
||||||
|
[-] Other minor fixes and corrections.
|
||||||
|
|
||||||
|
|
||||||
|
version 1.62 (Jun 14, 2005)
|
||||||
|
|
||||||
|
[+] Escaping of symbols inside macroinstructions with backslash.
|
||||||
|
|
||||||
|
[+] Ability of outputting the COFF object files for Win64 architecture
|
||||||
|
(with "format MS64 COFF" setting).
|
||||||
|
|
||||||
|
[+] New preprocessor directives: "restruc", "rept" and "match"
|
||||||
|
|
||||||
|
[+] VMX instructions support (not documented).
|
||||||
|
|
||||||
|
[+] Extended data directives to allow use of the "dup" operator.
|
||||||
|
|
||||||
|
[+] Extended "struc" features to allow custom definitions of main structure's
|
||||||
|
label.
|
||||||
|
|
||||||
|
[-] When building resources from the the .RES file that contained more
|
||||||
|
than one resource of the same string name, the separate resource
|
||||||
|
directories were created with the same names - fixed.
|
||||||
|
|
||||||
|
[-] Several bugs in the ELF64 object output has been fixed.
|
||||||
|
|
||||||
|
[-] Corrected behavior of "fix" directive to more straightforward.
|
||||||
|
|
||||||
|
[-] Fixed bug in "include" directive, which caused files included from within
|
||||||
|
macros to be processed the wrong way.
|
@ -4110,7 +4110,7 @@ dump_symbols:
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
base_symbol_for_label_ok:
|
base_symbol_for_label_ok:
|
||||||
mov [edx+20],eax
|
mov [edx+20],eax
|
||||||
add edx,32
|
add edx,LABEL_STRUCTURE_SIZE
|
||||||
jmp prepare_labels_dump
|
jmp prepare_labels_dump
|
||||||
labels_dump_ok:
|
labels_dump_ok:
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
|
@ -30,7 +30,7 @@ preprocessor:
|
|||||||
mov esi,include_variable
|
mov esi,include_variable
|
||||||
call get_environment_variable
|
call get_environment_variable
|
||||||
xor al,al
|
xor al,al
|
||||||
stosb
|
stos byte [edi]
|
||||||
mov [memory_start],edi
|
mov [memory_start],edi
|
||||||
mov eax,[additional_memory]
|
mov eax,[additional_memory]
|
||||||
mov [free_additional_memory],eax
|
mov [free_additional_memory],eax
|
||||||
@ -40,149 +40,6 @@ preprocessor:
|
|||||||
mov [display_buffer],eax
|
mov [display_buffer],eax
|
||||||
mov [hash_tree],eax
|
mov [hash_tree],eax
|
||||||
mov [macro_status],al
|
mov [macro_status],al
|
||||||
|
|
||||||
mov esi,predefinitions
|
|
||||||
process_predefinitions:
|
|
||||||
movzx ecx,byte [esi]
|
|
||||||
test ecx,ecx
|
|
||||||
jz predefinitions_ok
|
|
||||||
inc esi
|
|
||||||
lea eax,[esi+ecx]
|
|
||||||
push eax
|
|
||||||
mov ch,10b
|
|
||||||
call add_preprocessor_symbol
|
|
||||||
pop esi
|
|
||||||
mov edi,[memory_start]
|
|
||||||
mov [edx+8],edi
|
|
||||||
convert_predefinition:
|
|
||||||
cmp edi,[memory_end]
|
|
||||||
jae out_of_memory
|
|
||||||
lods byte [esi]
|
|
||||||
or al,al
|
|
||||||
jz predefinition_converted
|
|
||||||
cmp al,20h
|
|
||||||
je convert_predefinition
|
|
||||||
mov ah,al
|
|
||||||
mov ebx,characters
|
|
||||||
xlat byte [ebx]
|
|
||||||
or al,al
|
|
||||||
jz predefinition_separator
|
|
||||||
cmp ah,27h
|
|
||||||
je predefinition_string
|
|
||||||
cmp ah,22h
|
|
||||||
je predefinition_string
|
|
||||||
mov byte [edi],1Ah
|
|
||||||
scas word [edi]
|
|
||||||
xchg al,ah
|
|
||||||
stos byte [edi]
|
|
||||||
mov ebx,characters
|
|
||||||
xor ecx,ecx
|
|
||||||
predefinition_symbol:
|
|
||||||
lods byte [esi]
|
|
||||||
stos byte [edi]
|
|
||||||
xlat byte [ebx]
|
|
||||||
or al,al
|
|
||||||
loopnzd predefinition_symbol
|
|
||||||
neg ecx
|
|
||||||
cmp ecx,255
|
|
||||||
ja invalid_definition
|
|
||||||
mov ebx,edi
|
|
||||||
sub ebx,ecx
|
|
||||||
mov byte [ebx-2],cl
|
|
||||||
found_predefinition_separator:
|
|
||||||
dec edi
|
|
||||||
mov ah,[esi-1]
|
|
||||||
predefinition_separator:
|
|
||||||
xchg al,ah
|
|
||||||
or al,al
|
|
||||||
jz predefinition_converted
|
|
||||||
cmp al,20h
|
|
||||||
je convert_line_data
|
|
||||||
cmp al,3Bh
|
|
||||||
je invalid_definition
|
|
||||||
cmp al,5Ch
|
|
||||||
je predefinition_backslash
|
|
||||||
stos byte [edi]
|
|
||||||
jmp convert_predefinition
|
|
||||||
predefinition_string:
|
|
||||||
mov al,22h
|
|
||||||
stos byte [edi]
|
|
||||||
scas dword [edi]
|
|
||||||
mov ebx,edi
|
|
||||||
copy_predefinition_string:
|
|
||||||
lods byte [esi]
|
|
||||||
stos byte [edi]
|
|
||||||
or al,al
|
|
||||||
jz invalid_definition
|
|
||||||
cmp al,ah
|
|
||||||
jne copy_predefinition_string
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,ah
|
|
||||||
je copy_predefinition_string
|
|
||||||
dec esi
|
|
||||||
dec edi
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
mov [ebx-4],eax
|
|
||||||
jmp convert_predefinition
|
|
||||||
predefinition_backslash:
|
|
||||||
mov byte [edi],0
|
|
||||||
lods byte [esi]
|
|
||||||
or al,al
|
|
||||||
jz invalid_definition
|
|
||||||
cmp al,20h
|
|
||||||
je invalid_definition
|
|
||||||
cmp al,3Bh
|
|
||||||
je invalid_definition
|
|
||||||
mov al,1Ah
|
|
||||||
stos byte [edi]
|
|
||||||
mov ecx,edi
|
|
||||||
mov ax,5C01h
|
|
||||||
stos word [edi]
|
|
||||||
dec esi
|
|
||||||
group_predefinition_backslashes:
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,5Ch
|
|
||||||
jne predefinition_backslashed_symbol
|
|
||||||
stos byte [edi]
|
|
||||||
inc byte [ecx]
|
|
||||||
jmp group_predefinition_backslashes
|
|
||||||
predefinition_backslashed_symbol:
|
|
||||||
cmp al,20h
|
|
||||||
je invalid_definition
|
|
||||||
cmp al,22h
|
|
||||||
je invalid_definition
|
|
||||||
cmp al,27h
|
|
||||||
je invalid_definition
|
|
||||||
cmp al,3Bh
|
|
||||||
je invalid_definition
|
|
||||||
mov ah,al
|
|
||||||
mov ebx,characters
|
|
||||||
xlat byte [ebx]
|
|
||||||
or al,al
|
|
||||||
jz predefinition_backslashed_symbol_character
|
|
||||||
mov al,ah
|
|
||||||
convert_predefinition_backslashed_symbol:
|
|
||||||
stos byte [edi]
|
|
||||||
xlat byte [ebx]
|
|
||||||
or al,al
|
|
||||||
jz found_predefinition_separator
|
|
||||||
inc byte [ecx]
|
|
||||||
jz invalid_definition
|
|
||||||
lods byte [esi]
|
|
||||||
jmp convert_predefinition_backslashed_symbol
|
|
||||||
predefinition_backslashed_symbol_character:
|
|
||||||
mov al,ah
|
|
||||||
stos byte [edi]
|
|
||||||
inc byte [ecx]
|
|
||||||
jmp convert_predefinition
|
|
||||||
predefinition_converted:
|
|
||||||
mov [memory_start],edi
|
|
||||||
sub edi,[edx+8]
|
|
||||||
mov [edx+12],edi
|
|
||||||
jmp process_predefinitions
|
|
||||||
predefinitions_ok:
|
|
||||||
|
|
||||||
mov esi,[input_file]
|
mov esi,[input_file]
|
||||||
mov edx,esi
|
mov edx,esi
|
||||||
call open
|
call open
|
||||||
@ -1672,7 +1529,6 @@ use_instant_macro:
|
|||||||
cmp dword [edi+4],0
|
cmp dword [edi+4],0
|
||||||
jne value_out_of_range
|
jne value_out_of_range
|
||||||
mov eax,[edi]
|
mov eax,[edi]
|
||||||
|
|
||||||
cmp eax,80000000h
|
cmp eax,80000000h
|
||||||
jae value_out_of_range
|
jae value_out_of_range
|
||||||
push [free_additional_memory]
|
push [free_additional_memory]
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.67.34"
|
VERSION_STRING equ "1.67.35"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 67
|
VERSION_MINOR = 67
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user