Fresh IDE . Check-in [1863b5fab7]
Not logged in

This repository is a mirror!

The original is located on: https://fresh.flatassembler.net/fossil/repo/fresh
If you want to follow the project, please update your remote-url

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:The official release v2.6.2

Updated the documentation. Updated the FASM compiler. Minor edits to the help CSS styles and the help index.

Timelines: family | ancestors | descendants | both | trunk | v2.6.2
Files: files | file ages | folders
SHA1:1863b5fab74ffd17ff774dd7f683b5f6fa007da7
User & Date: johnfound 2017-12-30 10:11:13
Context
2018-02-06
13:44
Fixed bug in AsmEdit component. The bug damaged the colors on screen sizes higher than the maximal line size (aeLineCharLen). check-in: cbb223a6c7 user: johnfound tags: trunk
2017-12-30
10:11
The official release v2.6.2

Updated the documentation. Updated the FASM compiler. Minor edits to the help CSS styles and the help index. check-in: 1863b5fab7 user: johnfound tags: trunk, v2.6.2

09:13
Wrong commit. :) check-in: 4e3bf1c486 user: johnfound tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to WhatsNew.txt.

7
8
9
10
11
12
13
14
15
16
17
18

19
20
21
22
23
24
25
..
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
For very detailed and accurate information about the changes, see the timeline in the source code repository:

https://fresh.flatassembler.net/fossil/repo/fresh/timeline


version 2.6.2 (30.12.2017)

Bugs fixed.

    [-] Fixed a crash on SaveAs dialog, in Windows 10
    [-] The CSS for the help files are now in external file, making the help styling easier.



version 2.6.1 (29.10.2017)

Quick bugfix release.

    [-] Fixed the broken form for "Labels explorer".
    [-] Fixed missing file from the binary distribution.
................................................................................
    [+] Wide use of PNG images for all icons that make the icons better quality and the size of the executable smaller.
    [-] Bugfixes.

version 2.5.1 (19.12.2016)

    [+] Removed the dependency on google for the web search. Now the web
        search engine is user selectable. The default is duckduckgo.com
    [+] FASM compiled has been updated to v1.71.58
    [+] Added an example for using FreshLib for simple graphics drawing.
    [-] Fixed regression in "Goto interface" funtion.

version 2.5.0 (16.10.2016)

    For detailed description of the changes, read the timeline in the source code repository:
    https://fresh.flatassembler.net/fossil/repo/fresh







|



|
>







 







|







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
..
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
For very detailed and accurate information about the changes, see the timeline in the source code repository:

https://fresh.flatassembler.net/fossil/repo/fresh/timeline


version 2.6.2 (30.12.2017)

The main goal of this release is to fix a bug, causing crash in Windows 10. But as an addition, other updates are provided as well.

    [-] Fixed a crash on SaveAs dialog, in Windows 10
    [-] The CSS for the help files are now in external file, making the help styling easier.
    [+] FASM compiler has been updated up to version 1.73.02
    [+] FASM reference manual has been updated as well.

version 2.6.1 (29.10.2017)

Quick bugfix release.

    [-] Fixed the broken form for "Labels explorer".
    [-] Fixed missing file from the binary distribution.
................................................................................
    [+] Wide use of PNG images for all icons that make the icons better quality and the size of the executable smaller.
    [-] Bugfixes.

version 2.5.1 (19.12.2016)

    [+] Removed the dependency on google for the web search. Now the web
        search engine is user selectable. The default is duckduckgo.com
    [+] FASM compiler has been updated to v1.71.58
    [+] Added an example for using FreshLib for simple graphics drawing.
    [-] Fixed regression in "Goto interface" funtion.

version 2.5.0 (16.10.2016)

    For detailed description of the changes, read the timeline in the source code repository:
    https://fresh.flatassembler.net/fossil/repo/fresh

Changes to doc/FASM.rhtm.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
457
458
459
460
461
462
463
464


465
466
467
468
469
470
471
....
2736
2737
2738
2739
2740
2741
2742

2743
2744
2745
2746
2747
2748
2749
2750
....
6110
6111
6112
6113
6114
6115
6116













6117
6118
6119
6120
6121
6122
6123
....
6142
6143
6144
6145
6146
6147
6148


















6149
6150
6151
6152
6153
6154
6155






 
  
<h3 align="center">Tomasz Grysztar </h3>

<h1 align="center">flat assembler 1.72<br /><span class="small">Programmer's Manual</span> </h1>

<h3 align="center"> </h3>


<div class="p"><!----></div>
 <a id="tth_chAp1"></a><h1>
Chapter 1 <br />Introduction</h1>
................................................................................
<tr><td align="center"><tt>pword</tt> </td><td align="center">48 </td><td align="center">6 </td></tr>
<tr><td align="center"><tt>qword</tt> </td><td align="center">64 </td><td align="center">8 </td></tr>
<tr><td align="center"><tt>tbyte</tt> </td><td align="center">80 </td><td align="center">10 </td></tr>
<tr><td align="center"><tt>tword</tt> </td><td align="center">80 </td><td align="center">10 </td></tr>
<tr><td align="center"><tt>dqword</tt> </td><td align="center">128 </td><td align="center">16 </td></tr>
<tr><td align="center"><tt>xword</tt> </td><td align="center">128 </td><td align="center">16 </td></tr>
<tr><td align="center"><tt>qqword</tt> </td><td align="center">256 </td><td align="center">32 </td></tr>
<tr><td align="center"><tt>yword</tt> </td><td align="center">256 </td><td align="center">32 </td></tr></table>


</div>

<div style="text-align:center">Table 1.1: Size operators.</div><a id="tab:size_operators">
</a>

<div class="p"><!----></div>

................................................................................
<a class="a" id="psubusb"></a>
<a class="a" id="psubusw"></a>

<tt>paddusb</tt>, <tt>paddusw</tt>, <tt>psubusb</tt>, <tt>psubusw</tt> are analoguous, but with 
unsigned saturation.
<a class="a" id="pmulhw"></a>
<a class="a" id="pmullw"></a>

&nbsp;<tt>pmulhw</tt> and <tt>pmullw</tt> performs a signed multiplication of the packed words
and store the high or low words of the results in the destination operand.
<a class="a" id="pmaddwd"></a>

<tt>pmaddwd</tt> performs a multiply of the packed words and adds the four intermediate
double word products in pairs to produce result as a packed double words.
<a class="a" id="pand"></a>
<a class="a" id="por"></a>
................................................................................
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;'a.txt':10h,1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load&nbsp;char&nbsp;from&nbsp;0
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;virtual

</pre>
loads the single byte from offset 10h in file <tt>a.txt</tt> into the <tt>char</tt>
constant.














<div class="p"><!----></div>
Any of the <tt>section</tt> directives described in  also begins a new
addressing space.

<div class="p"><!----></div>
It is possible to declare a special kind of label that marks the current
................................................................................
</pre>
  This way it is possible to operate on values inside any code block,
including all the ones defined with <tt>virtual</tt>. However it is not allowed to
specify addressing space that has not been assembled yet, just as it is not
allowed to specify an address in the current addressing space that exceeds
the current offset. The addresses in any other addressing space are also
limited by the boundaries of the block.                



















<div class="p"><!----></div>
     <a id="tth_sEc2.2.5"></a><h3>
2.2.5&nbsp;&nbsp;Other directives</h3>
<a id="sec:other">
</a>
<a class="a" id="ALIGN"></a>







|
|

|







 







|
>
>







 







>
|







 







>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
....
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
....
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
....
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189






 

<h3 align="center">Tomasz Grysztar </h3>

<h1 align="center">flat assembler 1.73<br /><span class="small">Programmer's Manual</span> </h1>

<h3 align="center"> </h3>


<div class="p"><!----></div>
 <a id="tth_chAp1"></a><h1>
Chapter 1 <br />Introduction</h1>
................................................................................
<tr><td align="center"><tt>pword</tt> </td><td align="center">48 </td><td align="center">6 </td></tr>
<tr><td align="center"><tt>qword</tt> </td><td align="center">64 </td><td align="center">8 </td></tr>
<tr><td align="center"><tt>tbyte</tt> </td><td align="center">80 </td><td align="center">10 </td></tr>
<tr><td align="center"><tt>tword</tt> </td><td align="center">80 </td><td align="center">10 </td></tr>
<tr><td align="center"><tt>dqword</tt> </td><td align="center">128 </td><td align="center">16 </td></tr>
<tr><td align="center"><tt>xword</tt> </td><td align="center">128 </td><td align="center">16 </td></tr>
<tr><td align="center"><tt>qqword</tt> </td><td align="center">256 </td><td align="center">32 </td></tr>
<tr><td align="center"><tt>yword</tt> </td><td align="center">256 </td><td align="center">32 </td></tr>
<tr><td align="center"><tt>dqqword</tt> </td><td align="center">512 </td><td align="center">64 </td></tr>
<tr><td align="center"><tt>zword</tt> </td><td align="center">512 </td><td align="center">64 </td></tr></table>
</div>

<div style="text-align:center">Table 1.1: Size operators.</div><a id="tab:size_operators">
</a>

<div class="p"><!----></div>

................................................................................
<a class="a" id="psubusb"></a>
<a class="a" id="psubusw"></a>

<tt>paddusb</tt>, <tt>paddusw</tt>, <tt>psubusb</tt>, <tt>psubusw</tt> are analoguous, but with 
unsigned saturation.
<a class="a" id="pmulhw"></a>
<a class="a" id="pmullw"></a>
\
<tt>pmulhw</tt> and <tt>pmullw</tt> performs a signed multiplication of the packed words
and store the high or low words of the results in the destination operand.
<a class="a" id="pmaddwd"></a>

<tt>pmaddwd</tt> performs a multiply of the packed words and adds the four intermediate
double word products in pairs to produce result as a packed double words.
<a class="a" id="pand"></a>
<a class="a" id="por"></a>
................................................................................
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;'a.txt':10h,1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;load&nbsp;char&nbsp;from&nbsp;0
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;virtual

</pre>
loads the single byte from offset 10h in file <tt>a.txt</tt> into the <tt>char</tt>
constant.

<div class="p"><!----></div>
Instead of or in addition to an <tt>at</tt> argument, <tt>virtual</tt> can also be followed
by an &#228;s" keyword and a string defining an extension of additional file where
the initialized content of the block is going to be stored at the end of
a successful assembly.

<pre>
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;at&nbsp;0&nbsp;as&nbsp;'asc'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;times&nbsp;256&nbsp;db&nbsp;%-1
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;virtual

</pre>

<div class="p"><!----></div>
Any of the <tt>section</tt> directives described in  also begins a new
addressing space.

<div class="p"><!----></div>
It is possible to declare a special kind of label that marks the current
................................................................................
</pre>
  This way it is possible to operate on values inside any code block,
including all the ones defined with <tt>virtual</tt>. However it is not allowed to
specify addressing space that has not been assembled yet, just as it is not
allowed to specify an address in the current addressing space that exceeds
the current offset. The addresses in any other addressing space are also
limited by the boundaries of the block.                

<div class="p"><!----></div>
The <tt>virtual</tt> directive can have a previously definen addressing space 
label as the only argument. This variant allows to extend a previously defined
and closed block with additional data. Any definition of data within
an extending block is going to have the same effect as if that definition was
present in the original <tt>virtual</tt> block.

<pre>
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;at&nbsp;0&nbsp;as&nbsp;'log'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log::
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;virtual

&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;Log
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;'Hello!',13,10
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;virtual

</pre>

<div class="p"><!----></div>
     <a id="tth_sEc2.2.5"></a><h3>
2.2.5&nbsp;&nbsp;Other directives</h3>
<a id="sec:other">
</a>
<a class="a" id="ALIGN"></a>

Changes to doc/help.css.

5
6
7
8
9
10
11

12
13
14
15
16
17
18
..
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
   font-family: Verdana, Helvetica, sans-serif;
   font-size: 16px;
   background-color: white;
}


div.content, body>div{

  max-width: 1024px;
  background-color: white;
  margin-left: auto;
  margin-right: auto;
  margin-top: 8px;
  padding: 8px;
}
................................................................................
  font-size: 16px;
  margin-top: 16px;
  margin-bottom: 12px;
  text-align: left;
}


p {
   text-align: justify;
   font-size: 16px;
   margin-top: 0.75em;
   margin-bottom: 0.75em;
}









>







 







|







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
..
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
   font-family: Verdana, Helvetica, sans-serif;
   font-size: 16px;
   background-color: white;
}


div.content, body>div{
  text-align: justify;
  max-width: 1024px;
  background-color: white;
  margin-left: auto;
  margin-right: auto;
  margin-top: 8px;
  padding: 8px;
}
................................................................................
  font-size: 16px;
  margin-top: 16px;
  margin-bottom: 12px;
  text-align: left;
}


p, div.p {
   text-align: justify;
   font-size: 16px;
   margin-top: 0.75em;
   margin-bottom: 0.75em;
}


Changes to doc/index.md.

15
16
17
18
19
20
21


  [FreshLibOOP.md][FreshLib OOP manual] - Explains the FreshLib object oriented programming model.

  [tips.md][Fresh IDE tips and tricks] - How to use Fresh IDE for the best programming results.

  [FASM.rhtm][Flat assembler programmers manual] - The official FlatAssembler reference manual.

  [lscr/main.html][Linux 32bit system calls reference] - An assembly language reference to the Linux system calls.









>
>
15
16
17
18
19
20
21
22
23
  [FreshLibOOP.md][FreshLib OOP manual] - Explains the FreshLib object oriented programming model.

  [tips.md][Fresh IDE tips and tricks] - How to use Fresh IDE for the best programming results.

  [FASM.rhtm][Flat assembler programmers manual] - The official FlatAssembler reference manual.

  [lscr/main.html][Linux 32bit system calls reference] - An assembly language reference to the Linux system calls.

  [x86/main.html][Intel x86 instruction set reference] - a little bit outdated, but detailed x86 instructions reference.

Changes to doc/source/FASM.TEX.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
358
359
360
361
362
363
364


365
366
367
368
369
370
371
....
4679
4680
4681
4682
4683
4684
4685










4686
4687
4688
4689
4690
4691
4692
....
4708
4709
4710
4711
4712
4713
4714














4715
4716
4717
4718
4719
4720
4721
\documentclass[a4paper,12pt]{book}

\usepackage[pdftex,bookmarks=true,hidelinks,pdfstartview=FitH]{hyperref}
\pdfminorversion=0

\usepackage{longtable}

  \usepackage{anysize}

\makeindex

\begin{document}
\author{Tomasz Grysztar}
\title{flat assembler 1.72\\\small{Programmer's Manual}}
\date{}
\maketitle


\chapter{Introduction}
This chapter contains all the most important information you need to begin
using the flat assembler. If you are experienced assembly language programmer,
................................................................................
\verb"qword" & 64 & 8 \\
\verb"tbyte" & 80 & 10 \\
\verb"tword" & 80 & 10 \\
\verb"dqword" & 128 & 16 \\
\verb"xword" & 128 & 16 \\
\verb"qqword" & 256 & 32 \\
\verb"yword" & 256 & 32 \\


\hline
\end{tabular}\end{center}
\caption{Size operators.}\label{tab:size_operators}
\end{table}

\begin{table}[bt]
\begin{center}\begin{tabular}{|c|c||cccccccc|}
................................................................................
    virtual at 0
        file 'a.txt':10h,1
        load char from 0
    end virtual
\end{verbatim}
loads the single byte from offset 10h in file \verb"a.txt" into the \verb"char"
constant.











Any of the \verb"section" directives described in \ref{sec:formatter} also begins a new
addressing space.

It is possible to declare a special kind of label that marks the current
addressing space, by appending a double colon instead of a single one after a
label name. This symbol cannot then be used in numerical expressions, the only
................................................................................
  This way it is possible to operate on values inside any code block,
including all the ones defined with \verb"virtual". However it is not allowed to
specify addressing space that has not been assembled yet, just as it is not
allowed to specify an address in the current addressing space that exceeds
the current offset. The addresses in any other addressing space are also
limited by the boundaries of the block.                
















\subsection{Other directives}
\label{sec:other}
\index{ALIGN}
\verb"align" directive aligns code or data to the specified boundary. It should
be followed by a numerical expression specifying the number of bytes, to the
multiply of which the current address has to be aligned. The boundary value







|





|







 







>
>







 







>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
....
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
....
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
\documentclass[a4paper,12pt]{book}

\usepackage[pdftex,bookmarks=true,hidelinks,pdfstartview=FitH]{hyperref}
\pdfminorversion=0

\usepackage{longtable}

\usepackage{anysize}

\makeindex

\begin{document}
\author{Tomasz Grysztar}
\title{flat assembler 1.73\\\small{Programmer's Manual}}
\date{}
\maketitle


\chapter{Introduction}
This chapter contains all the most important information you need to begin
using the flat assembler. If you are experienced assembly language programmer,
................................................................................
\verb"qword" & 64 & 8 \\
\verb"tbyte" & 80 & 10 \\
\verb"tword" & 80 & 10 \\
\verb"dqword" & 128 & 16 \\
\verb"xword" & 128 & 16 \\
\verb"qqword" & 256 & 32 \\
\verb"yword" & 256 & 32 \\
\verb"dqqword" & 512 & 64 \\
\verb"zword" & 512 & 64 \\
\hline
\end{tabular}\end{center}
\caption{Size operators.}\label{tab:size_operators}
\end{table}

\begin{table}[bt]
\begin{center}\begin{tabular}{|c|c||cccccccc|}
................................................................................
    virtual at 0
        file 'a.txt':10h,1
        load char from 0
    end virtual
\end{verbatim}
loads the single byte from offset 10h in file \verb"a.txt" into the \verb"char"
constant.

Instead of or in addition to an \verb"at" argument, \verb"virtual" can also be followed
by an "as" keyword and a string defining an extension of additional file where
the initialized content of the block is going to be stored at the end of
a successful assembly.
\begin{verbatim}
    virtual at 0 as 'asc'
        times 256 db %-1
    end virtual
\end{verbatim}

Any of the \verb"section" directives described in \ref{sec:formatter} also begins a new
addressing space.

It is possible to declare a special kind of label that marks the current
addressing space, by appending a double colon instead of a single one after a
label name. This symbol cannot then be used in numerical expressions, the only
................................................................................
  This way it is possible to operate on values inside any code block,
including all the ones defined with \verb"virtual". However it is not allowed to
specify addressing space that has not been assembled yet, just as it is not
allowed to specify an address in the current addressing space that exceeds
the current offset. The addresses in any other addressing space are also
limited by the boundaries of the block.                

The \verb"virtual" directive can have a previously definen addressing space 
label as the only argument. This variant allows to extend a previously defined
and closed block with additional data. Any definition of data within
an extending block is going to have the same effect as if that definition was
present in the original \verb"virtual" block.
\begin{verbatim}
    virtual at 0 as 'log'
        Log::
    end virtual

    virtual Log
        db 'Hello!',13,10
    end virtual
\end{verbatim}

\subsection{Other directives}
\label{sec:other}
\index{ALIGN}
\verb"align" directive aligns code or data to the specified boundary. It should
be followed by a numerical expression specifying the number of bytes, to the
multiply of which the current address has to be aligned. The boundary value

Changes to source/fasm/ASSEMBLE.INC.

144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164

165
166
167
168
169
170
171
...
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
...
776
777
778
779
780
781
782


783
784
785
786
787
788
789
790
791
792
























































793
794
795
796
797
798
799
...
830
831
832
833
834
835
836


837
838
839
840
841
842
843
...
844
845
846
847
848
849
850

851
852
853
854
855
856
857
...
865
866
867
868
869
870
871
872
873
874

875
876
877
878
879


880

881
882
883
884












885
886
887
888
889
890
891
...
920
921
922
923
924
925
926












































































927
928
929
930
931
932
933
...
947
948
949
950
951
952
953

954
955

956
957
958
959
960
961
962
963
964

965

966
967
968
969
970
971
972
	jnz	illegal_instruction
	mov	eax,edi
	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax
      init_addressing_space:
	mov	ebx,[tagged_blocks]
	mov	dword [ebx-4],10h
	mov	dword [ebx-8],20h
	sub	ebx,8+20h
	cmp	ebx,edi
	jbe	out_of_memory
	mov	[tagged_blocks],ebx
	mov	[addressing_space],ebx
	xor	eax,eax
	mov	[ebx],edi
	mov	[ebx+4],eax
	mov	[ebx+8],eax
	mov	[ebx+10h],eax
	mov	[ebx+14h],eax
	mov	[ebx+18h],edi
	mov	[ebx+1Ch],eax

	ret

assemble_line:
	mov	eax,[tagged_blocks]
	sub	eax,100h
	cmp	edi,eax
	ja	out_of_memory
................................................................................
	jne	addressing_space_unavailable
	test	byte [eax+9],4
	jz	invalid_use_of_symbol
	mov	ebx,eax
	mov	ax,[current_pass]
	mov	[ebx+18],ax
	or	byte [ebx+8],8
	cmp	[symbols_file],0
	je	get_addressing_space
	cmp	[next_pass_needed],0
	jne	get_addressing_space
	call	store_label_reference
      get_addressing_space:
	mov	ebx,[ebx]
      get_data_address:
	push	ebx
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
	cmp	esi,eax
	je	display_done
      display_messages:
	sub	esi,8
	mov	eax,[esi+4]
	mov	ecx,[esi]
	sub	esi,ecx


	test	eax,eax
	jnz	skip_block
	push	esi
	call	display_block
	pop	esi
      skip_block:
	cmp	esi,[tagged_blocks]
	jne	display_messages
      display_done:
	ret

























































times_directive:
	lods	byte [esi]
	cmp	al,'('
	jne	invalid_argument
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
      zero_times:
	call	skip_symbol
	jnc	zero_times
	jmp	instruction_assembled

virtual_directive:
	lods	byte [esi]


	cmp	al,80h
	jne	virtual_at_current
	lods	byte [esi]
	cmp	al,'('
	jne	invalid_argument
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
	call	get_address_value
	mov	ebp,[address_symbol]
	or	bh,bh
	setnz	ch
	jmp	set_virtual
      virtual_at_current:
	dec	esi

	mov	ebp,[addressing_space]
	mov	al,[ds:ebp+9]
	mov	[value_type],al
	mov	eax,edi
	xor	edx,edx
	xor	cl,cl
	sub	eax,[ds:ebp]
................................................................................
	mov	ebp,[ds:ebp+14h]
      set_virtual:
	xchg	bl,bh
	xchg	cl,ch
	shl	ecx,16
	mov	cx,bx
	push	ecx eax
	call	allocate_structure_data
	mov	word [ebx],virtual_directive-instruction_handler
	mov	ecx,[addressing_space]

	mov	[ebx+12],ecx
	mov	[ebx+8],edi
	mov	ecx,[current_line]
	mov	[ebx+4],ecx
	mov	ebx,[addressing_space]


	mov	eax,edi

	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax
	call	init_addressing_space
	or	byte [ebx+0Ah],1












	pop	eax
	mov	cl,[address_sign]
	not	eax
	not	edx
	not	cl
	add	eax,1
	adc	edx,0
................................................................................
	add	ebx,18h
	jmp	scan_structures
      structure_data_found:
	ret
      no_such_structure:
	stc
	ret












































































      end_virtual:
	call	find_structure_data
	jc	unexpected_instruction
	push	ebx
	call	close_virtual_addressing_space
	pop	ebx
	mov	eax,[ebx+12]
................................................................................
	pop	edi esi
	ret
      close_virtual_addressing_space:
	mov	ebx,[addressing_space]
	mov	eax,edi
	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax

	test	byte [ebx+0Ah],2
	jz	addressing_space_closed

	push	esi edi ecx edx
	mov	ecx,eax
	mov	eax,[tagged_blocks]
	mov	dword [eax-4],11h
	mov	dword [eax-8],ecx
	sub	eax,8
	sub	eax,ecx
	mov	[tagged_blocks],eax
	lea	edi,[eax+ecx-1]

	xchg	eax,[ebx+18h]

	lea	esi,[eax+ecx-1]
	mov	eax,edi
	sub	eax,esi
	std
	shr	ecx,1
	jnc	virtual_byte_ok
	movs	byte [edi],[esi]







|
|












>







 







<
<
<
<







 







>
>










>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>







 







>







 







|
<
|
>
|
<
<
<
|
>
>
|
>
|
|
<
|
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>


>









>

>







144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
...
639
640
641
642
643
644
645




646
647
648
649
650
651
652
...
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
...
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
...
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
...
923
924
925
926
927
928
929
930

931
932
933



934
935
936
937
938
939
940

941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
...
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
....
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
	jnz	illegal_instruction
	mov	eax,edi
	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax
      init_addressing_space:
	mov	ebx,[tagged_blocks]
	mov	dword [ebx-4],10h
	mov	dword [ebx-8],24h
	sub	ebx,8+24h
	cmp	ebx,edi
	jbe	out_of_memory
	mov	[tagged_blocks],ebx
	mov	[addressing_space],ebx
	xor	eax,eax
	mov	[ebx],edi
	mov	[ebx+4],eax
	mov	[ebx+8],eax
	mov	[ebx+10h],eax
	mov	[ebx+14h],eax
	mov	[ebx+18h],edi
	mov	[ebx+1Ch],eax
	mov	[ebx+20h],eax
	ret

assemble_line:
	mov	eax,[tagged_blocks]
	sub	eax,100h
	cmp	edi,eax
	ja	out_of_memory
................................................................................
	jne	addressing_space_unavailable
	test	byte [eax+9],4
	jz	invalid_use_of_symbol
	mov	ebx,eax
	mov	ax,[current_pass]
	mov	[ebx+18],ax
	or	byte [ebx+8],8




	call	store_label_reference
      get_addressing_space:
	mov	ebx,[ebx]
      get_data_address:
	push	ebx
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
	cmp	esi,eax
	je	display_done
      display_messages:
	sub	esi,8
	mov	eax,[esi+4]
	mov	ecx,[esi]
	sub	esi,ecx
	cmp	eax,10h
	je	write_addressing_space
	test	eax,eax
	jnz	skip_block
	push	esi
	call	display_block
	pop	esi
      skip_block:
	cmp	esi,[tagged_blocks]
	jne	display_messages
      display_done:
	ret
      write_addressing_space:
	mov	ecx,[esi+20h]
	jecxz	skip_block
	push	esi
	mov	edi,[free_additional_memory]
	mov	esi,[output_file]
	test	esi,esi
	jz	addressing_space_written
	xor	ebx,ebx
      copy_output_path:
	lodsb
	cmp	edi,[structures_buffer]
	jae	out_of_memory
	stosb
	test	al,al
	jz	output_path_copied
	cmp	al,'/'
	je	new_path_segment
	cmp	al,'\'
	je	new_path_segment
	cmp	al,'.'
	jne	copy_output_path
	mov	ebx,edi
	jmp	copy_output_path
      new_path_segment:
	xor	ebx,ebx
	jmp	copy_output_path
      output_path_copied:
	test	ebx,ebx
	jnz	append_extension
	mov	byte [edi-1],'.'
	mov	ebx,edi
      append_extension:
	mov	edi,ebx
	add	ebx,ecx
	inc	ebx
	cmp	ebx,[structures_buffer]
	jae	out_of_memory
	mov	esi,[esp]
	mov	esi,[esi+18h]
	sub	esi,ecx
	rep	movs byte [edi],[esi]
	xor	al,al
	stos	byte [edi]
	mov	edx,[free_additional_memory]
	call	create
	jc	write_failed
	mov	esi,[esp]
	mov	edx,[esi+18h]
	mov	ecx,[esi+1Ch]
	call	write
	jc	write_failed
	call	close
      addressing_space_written:
	pop	esi
	jmp	skip_block

times_directive:
	lods	byte [esi]
	cmp	al,'('
	jne	invalid_argument
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
      zero_times:
	call	skip_symbol
	jnc	zero_times
	jmp	instruction_assembled

virtual_directive:
	lods	byte [esi]
	cmp	al,'('
	je	continue_virtual_area
	cmp	al,80h
	jne	virtual_at_current
	lods	byte [esi]
	cmp	al,'('
	jne	invalid_argument
	cmp	byte [esi],'.'
	je	invalid_value
................................................................................
	call	get_address_value
	mov	ebp,[address_symbol]
	or	bh,bh
	setnz	ch
	jmp	set_virtual
      virtual_at_current:
	dec	esi
      virtual_fallback:
	mov	ebp,[addressing_space]
	mov	al,[ds:ebp+9]
	mov	[value_type],al
	mov	eax,edi
	xor	edx,edx
	xor	cl,cl
	sub	eax,[ds:ebp]
................................................................................
	mov	ebp,[ds:ebp+14h]
      set_virtual:
	xchg	bl,bh
	xchg	cl,ch
	shl	ecx,16
	mov	cx,bx
	push	ecx eax
	call	allocate_virtual_structure_data

	call	init_addressing_space
	or	byte [ebx+0Ah],1
	cmp	byte [esi],86h



	jne	addressing_space_extension_ok
	cmp	word [esi+1],'('
	jne	invalid_argument
	mov	ecx,[esi+3]
	add	esi,3+4
	add	[ebx+18h],ecx
	mov	[ebx+20h],ecx

	or	byte [ebx+0Ah],2
	push	ebx
	mov	ebx,characters
      get_extension:
	lods	byte [esi]
	stos	byte [edi]
	xlat	byte [ebx]
	test	al,al
	jz	invalid_argument
	loop	get_extension
	inc	esi
	pop	ebx
      addressing_space_extension_ok:
	pop	eax
	mov	cl,[address_sign]
	not	eax
	not	edx
	not	cl
	add	eax,1
	adc	edx,0
................................................................................
	add	ebx,18h
	jmp	scan_structures
      structure_data_found:
	ret
      no_such_structure:
	stc
	ret
      allocate_virtual_structure_data:
	call	allocate_structure_data
	mov	word [ebx],virtual_directive-instruction_handler
	mov	ecx,[addressing_space]
	mov	[ebx+12],ecx
	mov	[ebx+8],edi
	mov	ecx,[current_line]
	mov	[ebx+4],ecx
	mov	ebx,[addressing_space]
	mov	eax,edi
	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax
	ret
      continue_virtual_area:
	cmp	byte [esi],11h
	jne	invalid_argument
	cmp	byte [esi+1+4],')'
	jne	invalid_argument
	inc	esi
	lods	dword [esi]
	inc	esi
	cmp	eax,0Fh
	jbe	reserved_word_used_as_symbol
	mov	edx,undefined_symbol
	test	byte [eax+8],1
	jz	virtual_area_unavailable
	mov	edx,symbol_out_of_scope
	mov	cx,[eax+16]
	cmp	cx,[current_pass]
	jne	virtual_area_unavailable
	mov	edx,invalid_use_of_symbol
	test	byte [eax+9],4
	jz	virtual_area_unavailable
	mov	ebx,eax
	mov	ax,[current_pass]
	mov	[ebx+18],ax
	or	byte [ebx+8],8
	call	store_label_reference
	mov	ebx,[ebx]
	test	byte [ebx+0Ah],4
	jz	virtual_area_unavailable
	and	byte [ebx+0Ah],not 4
	mov	edx,ebx
	call	allocate_virtual_structure_data
	mov	[addressing_space],edx
	push	esi
	mov	esi,[edx+18h]
	mov	ecx,[edx+1Ch]
	mov	eax,[edx+20h]
	sub	esi,eax
	add	ecx,eax
	lea	eax,[edi+ecx]
	cmp	eax,[tagged_blocks]
	jae	out_of_memory
	mov	eax,esi
	sub	eax,edi
	sub	[edx+18h],eax
	sub	[edx],eax
	sbb	dword [edx+4],0
	sbb	byte [edx+8],0
	mov	al,cl
	shr	ecx,2
	rep	movs dword [edi],[esi]
	mov	cl,al
	and	cl,11b
	rep	movs byte [edi],[esi]
	pop	esi
	jmp	instruction_assembled
      virtual_area_unavailable:
	cmp	[error_line],0
	jne	virtual_fallback
	push	[current_line]
	pop	[error_line]
	mov	[error],edx
	mov	[error_info],eax
	jmp	virtual_fallback
      end_virtual:
	call	find_structure_data
	jc	unexpected_instruction
	push	ebx
	call	close_virtual_addressing_space
	pop	ebx
	mov	eax,[ebx+12]
................................................................................
	pop	edi esi
	ret
      close_virtual_addressing_space:
	mov	ebx,[addressing_space]
	mov	eax,edi
	sub	eax,[ebx+18h]
	mov	[ebx+1Ch],eax
	add	eax,[ebx+20h]
	test	byte [ebx+0Ah],2
	jz	addressing_space_closed
	or	byte [ebx+0Ah],4
	push	esi edi ecx edx
	mov	ecx,eax
	mov	eax,[tagged_blocks]
	mov	dword [eax-4],11h
	mov	dword [eax-8],ecx
	sub	eax,8
	sub	eax,ecx
	mov	[tagged_blocks],eax
	lea	edi,[eax+ecx-1]
	add	eax,[ebx+20h]
	xchg	eax,[ebx+18h]
	sub	eax,[ebx+20h]
	lea	esi,[eax+ecx-1]
	mov	eax,edi
	sub	eax,esi
	std
	shr	ecx,1
	jnc	virtual_byte_ok
	movs	byte [edi],[esi]

Changes to source/fasm/EXPRCALC.INC.

175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
....
1007
1008
1009
1010
1011
1012
1013




1014
1015
1016
1017
1018
1019
1020
1021

1022
1023
1024
1025
1026
1027
1028
	stos	dword [edi]
	mov	eax,[ebx+4]
	stos	dword [edi]
	mov	[edi-8+13],cl
      got_label:
	test	byte [ebx+9],4
	jnz	invalid_use_of_symbol
	cmp	[symbols_file],0
	je	label_reference_ok
	cmp	[next_pass_needed],0
	jne	label_reference_ok
	call	store_label_reference
      label_reference_ok:
	mov	al,[ebx+11]
	mov	[edi-8+12],al
	mov	eax,[ebx+12]
	mov	[edi-8+8],eax
	cmp	al,ah
	jne	labeled_registers_ok
	shr	eax,16
................................................................................
	or	ecx,[esi+4]
	jnz	div_ok
	not	bl
      div_ok:
	mov	[esi+13],bl
	ret
      store_label_reference:




	mov	eax,[tagged_blocks]
	mov	dword [eax-4],2
	mov	dword [eax-8],4
	sub	eax,8+4
	cmp	eax,edi
	jbe	out_of_memory
	mov	[tagged_blocks],eax
	mov	[eax],ebx

	ret
      convert_fp:
	inc	esi
	and	word [edi+8],0
	and	word [edi+12],0
	mov	al,[value_size]
	cmp	al,2







<
<
<
<

<







 







>
>
>
>








>







175
176
177
178
179
180
181




182

183
184
185
186
187
188
189
....
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
	stos	dword [edi]
	mov	eax,[ebx+4]
	stos	dword [edi]
	mov	[edi-8+13],cl
      got_label:
	test	byte [ebx+9],4
	jnz	invalid_use_of_symbol




	call	store_label_reference

	mov	al,[ebx+11]
	mov	[edi-8+12],al
	mov	eax,[ebx+12]
	mov	[edi-8+8],eax
	cmp	al,ah
	jne	labeled_registers_ok
	shr	eax,16
................................................................................
	or	ecx,[esi+4]
	jnz	div_ok
	not	bl
      div_ok:
	mov	[esi+13],bl
	ret
      store_label_reference:
	cmp	[symbols_file],0
	je	label_reference_ok
	cmp	[next_pass_needed],0
	jne	label_reference_ok
	mov	eax,[tagged_blocks]
	mov	dword [eax-4],2
	mov	dword [eax-8],4
	sub	eax,8+4
	cmp	eax,edi
	jbe	out_of_memory
	mov	[tagged_blocks],eax
	mov	[eax],ebx
      label_reference_ok:
	ret
      convert_fp:
	inc	esi
	and	word [edi+8],0
	and	word [edi+12],0
	mov	al,[value_size]
	cmp	al,2

Changes to source/fasm/FORMATS.INC.

5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343

formatter:
	mov	[current_offset],edi
	cmp	[output_file],0
	jne	output_path_ok
	mov	esi,[input_file]
	mov	edi,[free_additional_memory]
      copy_output_path:
	lods	byte [esi]
	cmp	edi,[structures_buffer]
	jae	out_of_memory
	stos	byte [edi]
	or	al,al
	jnz	copy_output_path
	dec	edi
	mov	eax,edi
      find_extension:
	dec	eax
	cmp	eax,[free_additional_memory]
	jb	extension_found
	cmp	byte [eax],'\'
................................................................................
	cmp	eax,0Fh
	jb	invalid_use_of_symbol
	je	reserved_word_used_as_symbol
	inc	esi
	mov	dx,[current_pass]
	mov	[eax+18],dx
	or	byte [eax+8],8
	cmp	[symbols_file],0
	je	public_reference_ok
	cmp	[next_pass_needed],0
	jne	public_reference_ok
	mov	ebx,eax
	call	store_label_reference
	mov	eax,ebx
      public_reference_ok:
	mov	ebx,[free_additional_memory]
	lea	edx,[ebx+10h]
	cmp	edx,[structures_buffer]
	jae	out_of_memory
	mov	[free_additional_memory],edx
	mov	[ebx+8],eax
	mov	eax,[current_line]







|





|







 







<
<
<
<



<







5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
322
323
324
325
326
327
328




329
330
331

332
333
334
335
336
337
338

formatter:
	mov	[current_offset],edi
	cmp	[output_file],0
	jne	output_path_ok
	mov	esi,[input_file]
	mov	edi,[free_additional_memory]
      duplicate_output_path:
	lods	byte [esi]
	cmp	edi,[structures_buffer]
	jae	out_of_memory
	stos	byte [edi]
	or	al,al
	jnz	duplicate_output_path
	dec	edi
	mov	eax,edi
      find_extension:
	dec	eax
	cmp	eax,[free_additional_memory]
	jb	extension_found
	cmp	byte [eax],'\'
................................................................................
	cmp	eax,0Fh
	jb	invalid_use_of_symbol
	je	reserved_word_used_as_symbol
	inc	esi
	mov	dx,[current_pass]
	mov	[eax+18],dx
	or	byte [eax+8],8




	mov	ebx,eax
	call	store_label_reference
	mov	eax,ebx

	mov	ebx,[free_additional_memory]
	lea	edx,[ebx+10h]
	cmp	edx,[structures_buffer]
	jae	out_of_memory
	mov	[free_additional_memory],edx
	mov	[ebx+8],eax
	mov	eax,[current_line]

Changes to source/fasm/LICENSE.TXT.

1
2
3
4
5
6
7
8
9

flat assembler  version 1.72
Copyright (c) 1999-2017, Tomasz Grysztar.
All rights reserved.

This program is free for commercial and non-commercial use as long as
the following conditions are adhered to.

Copyright remains Tomasz Grysztar, and as such any Copyright notices

|







1
2
3
4
5
6
7
8
9

flat assembler  version 1.73
Copyright (c) 1999-2017, Tomasz Grysztar.
All rights reserved.

This program is free for commercial and non-commercial use as long as
the following conditions are adhered to.

Copyright remains Tomasz Grysztar, and as such any Copyright notices

Changes to source/fasm/VERSION.INC.

1
2
3
4
5
6
7
8
9
..
29
30
31
32
33
34
35
36
37
38
39

; flat assembler  version 1.72
; Copyright (c) 1999-2017, Tomasz Grysztar.
; All rights reserved.
;
; This programs is free for commercial and non-commercial use as long as
; the following conditions are adhered to.
;
; Redistribution and use in source and binary forms, with or without
................................................................................
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; The licence and distribution terms for any publically available
; version or derivative of this code cannot be changed. i.e. this code
; cannot simply be copied and put under another distribution licence
; (including the GNU Public Licence).

VERSION_STRING equ "1.72"

VERSION_MAJOR = 1
VERSION_MINOR = 72

|







 







|


|
1
2
3
4
5
6
7
8
9
..
29
30
31
32
33
34
35
36
37
38
39

; flat assembler  version 1.73
; Copyright (c) 1999-2017, Tomasz Grysztar.
; All rights reserved.
;
; This programs is free for commercial and non-commercial use as long as
; the following conditions are adhered to.
;
; Redistribution and use in source and binary forms, with or without
................................................................................
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; The licence and distribution terms for any publically available
; version or derivative of this code cannot be changed. i.e. this code
; cannot simply be copied and put under another distribution licence
; (including the GNU Public Licence).

VERSION_STRING equ "1.73.02"

VERSION_MAJOR = 1
VERSION_MINOR = 73

Changes to source/fasm/WHATSNEW.TXT.

1
2
3



















4
5
6
7
8
9
10

Visit http://flatassembler.net/ for more information.





















version 1.72 (Oct 10, 2017)

[+] Support for Intel AVX-512, SHA, CLFLUSHOPT, CLWB, PCOMMIT, ADX, RDSEED, SMAP
    and MPX instruction sets.

[+] Added "irpv" and "postpone" directives.



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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

Visit http://flatassembler.net/ for more information.


version 1.73.02 (Dec 16, 2017)

[-] Fixed a bug in the storage of "virtual as" blocks.


version 1.73.01 (Nov 25, 2017)

[+] Added virtual block continuation syntax (backported from flat assembler g).

[+] Documentation update.

[-] Fixed a bug in addressing data of the "virtual as" block.


version 1.73.00 (Nov 24, 2017)

[+] Added "virtual as" syntax (backported from flat assembler g).


version 1.72 (Oct 10, 2017)

[+] Support for Intel AVX-512, SHA, CLFLUSHOPT, CLWB, PCOMMIT, ADX, RDSEED, SMAP
    and MPX instruction sets.

[+] Added "irpv" and "postpone" directives.