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: |
1863b5fab74ffd17ff774dd7f683b5f6 |
User & Date: | johnfound 2017-12-30 10:11:13.273 |
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
Changes to WhatsNew.txt.
1 2 3 4 5 6 7 8 9 10 11 12 13 | This file describes the changes in every new release version of Fresh IDE The date format: DD.MM.YYYY This file contains only a brief notes about changes from version to version and only for the official releases. As long as the file is created by hand, some information (even important) can be missed or not accurate. 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) | | | > | 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 | This file describes the changes in every new release version of Fresh IDE The date format: DD.MM.YYYY This file contains only a brief notes about changes from version to version and only for the official releases. As long as the file is created by hand, some information (even important) can be missed or not accurate. 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. |
︙ | ︙ | |||
41 42 43 44 45 46 47 | [+] 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 | | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | [+] 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 |
| | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <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> |
︙ | ︙ | |||
457 458 459 460 461 462 463 | <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> | | > > | 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 | <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> |
︙ | ︙ | |||
2736 2737 2738 2739 2740 2741 2742 | <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> | > | | 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 | <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> |
︙ | ︙ | |||
6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 | file 'a.txt':10h,1 load char from 0 end 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 | > > > > > > > > > > > > > | 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 | file 'a.txt':10h,1 load char from 0 end 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 ä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> virtual at 0 as 'asc' times 256 db %-1 end 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 |
︙ | ︙ | |||
6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 | </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 Other directives</h3> <a id="sec:other"> </a> <a class="a" id="ALIGN"></a> | > > > > > > > > > > > > > > > > > > | 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 | </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> virtual at 0 as 'log' Log:: end virtual virtual Log db 'Hello!',13,10 end virtual </pre> <div class="p"><!----></div> <a id="tth_sEc2.2.5"></a><h3> 2.2.5 Other directives</h3> <a id="sec:other"> </a> <a class="a" id="ALIGN"></a> |
︙ | ︙ |
Changes to doc/help.css.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /* Common layout styles */ /* They will define the common web site appearance */ body { 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; } | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /* Common layout styles */ /* They will define the common web site appearance */ body { 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; } |
︙ | ︙ | |||
80 81 82 83 84 85 86 | font-size: 16px; margin-top: 16px; margin-bottom: 12px; text-align: left; } | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 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 | \documentclass[a4paper,12pt]{book} \usepackage[pdftex,bookmarks=true,hidelinks,pdfstartview=FitH]{hyperref} \pdfminorversion=0 \usepackage{longtable} | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | \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, |
︙ | ︙ | |||
358 359 360 361 362 363 364 365 366 367 368 369 370 371 | \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|} | > > | 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | \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|} |
︙ | ︙ | |||
4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 | 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 | > > > > > > > > > > | 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 | 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 |
︙ | ︙ | |||
4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 | 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 | > > > > > > > > > > > > > > | 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 | 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 | 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 | | | > | 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 | 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 |
︙ | ︙ | |||
638 639 640 641 642 643 644 | 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 | < < < < | 639 640 641 642 643 644 645 646 647 648 649 650 651 652 | 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 |
︙ | ︙ | |||
776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 | 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 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 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 |
︙ | ︙ | |||
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 | 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] | > > > | 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 | 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] |
︙ | ︙ | |||
865 866 867 868 869 870 871 | mov ebp,[ds:ebp+14h] set_virtual: xchg bl,bh xchg cl,ch shl ecx,16 mov cx,bx push ecx eax | | < | | | > > > | > > | > | | > > > | > > > > | | < | 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 | 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 |
︙ | ︙ | |||
920 921 922 923 924 925 926 927 928 929 930 931 932 933 | 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] | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 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] |
︙ | ︙ | |||
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 | 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] | > > > > | 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 | 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 | 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 | < < < < < | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | 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 |
︙ | ︙ | |||
1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 | 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 | > > > > > | 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 | 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.
1 2 3 4 5 6 7 8 9 10 11 | ; flat assembler core ; Copyright (c) 1999-2017, Tomasz Grysztar. ; All rights reserved. formatter: mov [current_offset],edi cmp [output_file],0 jne output_path_ok mov esi,[input_file] mov edi,[free_additional_memory] | | | | 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 | ; flat assembler core ; Copyright (c) 1999-2017, Tomasz Grysztar. ; All rights reserved. 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],'\' |
︙ | ︙ | |||
322 323 324 325 326 327 328 | 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 | < < < < < | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 | 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 |
| | | 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 |
| | | 1 2 3 4 5 6 7 8 9 | ; 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 |
︙ | ︙ | |||
29 30 31 32 33 34 35 | ; 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). | | | | 29 30 31 32 33 34 35 36 37 38 39 | ; 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. |
︙ | ︙ |