"Fossies" - the Fresh Open Source Software Archive

Member "fasm/tools/win32/listing.asm" (21 Feb 2022, 3778 Bytes) of package /linux/misc/fasm-1.73.30.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Generic Assembler source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 format PE console 4.0
    3 entry start
    4 
    5 include 'win32a.inc'
    6 
    7 section '.data' data readable writeable
    8 
    9   _usage db 'listing generator for flat assembler',0Dh,0Ah
   10      db 'usage: listing <input> <output>',0Dh,0Ah
   11      db 'optional settings:',0Dh,0Ah
   12      db ' -a           show target addresses for assembled code',0Dh,0Ah
   13      db ' -b <number>  set the amount of bytes listed per line',0Dh,0Ah
   14      db 0
   15   _error_prefix db 'error: ',0
   16   _error_suffix db '.',0Dh,0Ah,0
   17 
   18   line_break db 0Dh,0Ah
   19 
   20   input_file dd 0
   21   output_file dd 0
   22   code_bytes_per_line dd 16
   23   show_addresses db 0
   24 
   25   input dd ?
   26   assembled_code dd ?
   27   assembled_code_length dd ?
   28   code_end dd ?
   29   code_offset dd ?
   30   code_length dd ?
   31   output_handle dd ?
   32   output_buffer dd ?
   33   current_source_file dd ?
   34   current_source_line dd ?
   35   source dd ?
   36   source_length dd ?
   37   maximum_address_length dd ?
   38   address_start dd ?
   39   last_listed_address dd ?
   40 
   41   display_handle dd ?
   42   bytes_count dd ?
   43 
   44   params rb 1000h
   45   characters rb 100h
   46 
   47 section '.text' code readable executable
   48 
   49   start:
   50 
   51     mov [display_handle],STD_OUTPUT_HANDLE
   52 
   53     call    get_params
   54     jnc make_listing
   55 
   56     mov esi,_usage
   57     call    display_string
   58     invoke  ExitProcess,2
   59 
   60   make_listing:
   61     call    listing
   62     invoke  ExitProcess,0
   63 
   64   error:
   65     mov [display_handle],STD_ERROR_HANDLE
   66     mov esi,_error_prefix
   67     call    display_string
   68     pop esi
   69     call    display_string
   70     mov esi,_error_suffix
   71     call    display_string
   72     invoke  ExitProcess,1
   73 
   74   get_params:
   75     invoke  GetCommandLine
   76     mov esi,eax
   77     mov edi,params
   78     find_command_start:
   79     lodsb
   80     cmp al,20h
   81     je  find_command_start
   82     cmp al,22h
   83     je  skip_quoted_name
   84     skip_name:
   85     lodsb
   86     cmp al,20h
   87     je  find_param
   88     or  al,al
   89     jz  all_params
   90     jmp skip_name
   91     skip_quoted_name:
   92     lodsb
   93     cmp al,22h
   94     je  find_param
   95     or  al,al
   96     jz  all_params
   97     jmp skip_quoted_name
   98     find_param:
   99     lodsb
  100     cmp al,20h
  101     je  find_param
  102     cmp al,'-'
  103     je  option_param
  104     cmp al,0Dh
  105     je  all_params
  106     or  al,al
  107     jz  all_params
  108     cmp [input_file],0
  109     jne get_output_file
  110     mov [input_file],edi
  111     jmp process_param
  112       get_output_file:
  113     cmp [output_file],0
  114     jne bad_params
  115     mov [output_file],edi
  116     process_param:
  117     cmp al,22h
  118     je  string_param
  119     copy_param:
  120     stosb
  121     lodsb
  122     cmp al,20h
  123     je  param_end
  124     cmp al,0Dh
  125     je  param_end
  126     or  al,al
  127     jz  param_end
  128     jmp copy_param
  129     string_param:
  130     lodsb
  131     cmp al,22h
  132     je  string_param_end
  133     cmp al,0Dh
  134     je  param_end
  135     or  al,al
  136     jz  param_end
  137     stosb
  138     jmp string_param
  139     option_param:
  140     lodsb
  141     cmp al,'a'
  142     je  addresses_option
  143     cmp al,'A'
  144     je  addresses_option
  145     cmp al,'b'
  146     je  bytes_per_line_option
  147     cmp al,'B'
  148     je  bytes_per_line_option
  149     bad_params:
  150     stc
  151     ret
  152     get_option_value:
  153     xor eax,eax
  154     mov edx,eax
  155     get_option_digit:
  156     lodsb
  157     cmp al,20h
  158     je  option_value_ok
  159     cmp al,0Dh
  160     je  option_value_ok
  161     or  al,al
  162     jz  option_value_ok
  163     sub al,30h
  164     jc  invalid_option_value
  165     cmp al,9
  166     ja  invalid_option_value
  167     imul    edx,10
  168     jo  invalid_option_value
  169     add edx,eax
  170     jc  invalid_option_value
  171     jmp get_option_digit
  172     option_value_ok:
  173     dec esi
  174     clc
  175     ret
  176     invalid_option_value:
  177     stc
  178     ret
  179     bytes_per_line_option:
  180     lodsb
  181     cmp al,20h
  182     je  bytes_per_line_option
  183     cmp al,0Dh
  184     je  bad_params
  185     or  al,al
  186     jz  bad_params
  187     dec esi
  188     call    get_option_value
  189     or  edx,edx
  190     jz  bad_params
  191     cmp edx,1000
  192     ja  bad_params
  193     mov [code_bytes_per_line],edx
  194     jmp find_param
  195     addresses_option:
  196     lodsb
  197     cmp al,20h
  198     je  set_addresses_option
  199     cmp al,0Dh
  200     je  set_addresses_option
  201     or  al,al
  202     jnz bad_params
  203       set_addresses_option:
  204     dec esi
  205     mov [show_addresses],1
  206     jmp find_param
  207     param_end:
  208     dec esi
  209     string_param_end:
  210     xor al,al
  211     stosb
  212     jmp find_param
  213     all_params:
  214     cmp [input_file],0
  215     je  bad_params
  216     cmp [output_file],0
  217     je  bad_params
  218     clc
  219     ret
  220 
  221   include 'system.inc'
  222 
  223   include '..\listing.inc'
  224 
  225 section '.idata' import data readable writeable
  226 
  227   library kernel32,'KERNEL32.DLL'
  228 
  229   include 'api\kernel32.inc'