Warning, /frameworks/syntax-highlighting/autotests/folding/highlight.asm-fasm.fold is written in an unsupported language. File is not indexed.

0001     jmp near dword [0]
0002     jmp far dword [0]
0003 
0004     mov bx,ax       ; general register to general register
0005     mov [char],al   ; general register to memory
0006     mov dl,32       ; immediate value to general register
0007     mov cr3,ebx     ; general register to control register
0008 
0009     xchg ax,bx      ; swap two general registers
0010     xchg al,[char]  ; swap register with memory
0011 
0012     push ax         ; store general register
0013     push es         ; store segment register
0014     pushw [bx]      ; store memory
0015     push 1000h      ; store immediate value
0016 
0017     imul ax,[si],10 ; memory by immediate value to register
0018 
0019     bt  ax,15        ; test bit in register
0020     bts word [bx],15 ; test and set bit in memory
0021 
0022     bswap edx        ; swap bytes in register
0023 
0024     jmp 100h         ; direct near jump
0025     jmp 0FFFFh:0     ; direct far jump
0026     jmp ax           ; indirect near jump
0027     jmp pword [ebx]  ; indirect far jump
0028 
0029     movs byte [di],[si]        ; transfer byte
0030     movs word [es:di],[ss:si]  ; transfer word
0031     movsd                      ; transfer double word
0032 
0033     cmpxchg8b [bx]   ; compare and exchange 8 bytes
0034 
0035     movq2dq xmm0,mm1   ; move from MMX register to SSE register
0036     movdq2q mm0,xmm1   ; move from SSE register to MMX register
0037 
0038     enter 2048,0     ; enter and allocate 2048 bytes on stack
0039 
0040     mov [rip+3],sil    ; manual RIP-relative addressing
0041 
0042     blendvps xmm3,xmm7,xmm0 ; blend according to mask
0043     vgatherqps xmm0,[xmm2],xmm3        ; gather two floats
0044     vgatherqps xmm0,[ymm2+64],xmm3     ; gather four floats
0045     vfmsub231ps ymm1,ymm2,ymm3     ; multiply and subtract
0046     vfnmadd132sd xmm0,xmm5,[ebx]   ; multiply, negate and add
0047     vpermil2ps ymm0,ymm3,ymm7,ymm2,0  ; permute from two sources
0048 
0049     vscatterdps [eax+xmm1]{k1},xmm0    ; scatter four floats
0050     vscatterdpd [ymm3*8]{k3},zmm0      ; scatter eight doubles
0051 
0052     dd sum
0053     x = 1
0054     x = x+2
0055     sum = x
0056 
0057 
0058     if count>0
0059         mov cx,count
0060         rep movsb
0061     end if
0062 
0063 
0064     if count & ~ count mod 4
0065         mov cx,count/4
0066         rep movsd
0067     else if count>4
0068         mov cx,count/4
0069         rep movsd
0070         mov cx,count mod 4
0071         rep movsb
0072     else
0073         mov cx,count
0074         rep movsb
0075     end if
0076 
0077     repeat 8
0078         mov byte [bx],%
0079         inc bx
0080     end repeat
0081 
0082 
0083     s = x/2
0084     repeat 100
0085         if x/s = s
0086             break
0087         end if
0088         s = (s+x/s)/2
0089     end repeat
0090 
0091     repeat $-$$
0092         load a byte from $$+%-1
0093         store byte a xor c at $$+%-1
0094     end repeat
0095 
0096     GDTR dp ?
0097     virtual at GDTR
0098         GDT_limit dw ?
0099         GDT_address dd ?
0100     end virtual
0101 
0102     virtual at 0
0103         file 'a.txt':10h,1
0104         load char from 0
0105     end virtual
0106 
0107     virtual at 0 as 'asc'
0108         times 256 db %-1
0109     end virtual
0110 
0111     virtual at 0
0112         hex_digits::
0113         db '0123456789ABCDEF'
0114     end virtual
0115     load a byte from hex_digits:10
0116 
0117     bits = 16
0118     display 'Current offset is 0x'
0119     repeat bits/4
0120         d = '0' + $ shr (bits-%*4) and 0Fh
0121         if d > '9'
0122             d = d + 'A'-'9'-1
0123         end if
0124         display d
0125     end repeat
0126     display 13,10
0127 
0128     if ~ defined alpha
0129         alpha:
0130     end if
0131 
0132     if ~ defined alpha | defined @f
0133         alpha:
0134         @@:
0135     end if
0136 
0137     include 'macros.inc'
0138 
0139     d equ dword
0140     NULL equ d 0
0141     d equ edx
0142 
0143     d equ d,eax
0144 
0145     b equ byte
0146     w equ word
0147     d equ dword
0148     p equ pword
0149     f equ fword
0150     q equ qword
0151     t equ tword
0152     x equ dqword
0153     y equ qqword
0154 
0155     incl fix include
0156 
0157     macro tst {test al,0xFF}
0158 
0159     macro stos0
0160      {
0161         xor al,al
0162         stosb
0163      }
0164 
0165     macro align value { rb (value-1)-($+value-1) mod value }
0166 
0167     macro mov op1,op2
0168      {
0169       if op1 in <ds,es,fs,gs,ss> & op2 in <cs,ds,es,fs,gs,ss>
0170         push  op2
0171         pop   op1
0172       else
0173         mov   op1,op2
0174       end if
0175      }
0176 
0177     macro stoschar [char]
0178      {
0179         mov al,char
0180         stosb
0181      }
0182 
0183     macro movstr
0184      {
0185         local move
0186       move:
0187         lodsb
0188         stosb
0189         test al,al
0190         jnz move
0191      }
0192 
0193     macro strtbl name,[string]
0194      {
0195       common
0196         label name dword
0197       forward
0198         local label
0199         dd label
0200       forward
0201         label db string,0
0202      }
0203 
0204     push 3
0205     push 2
0206     push 1
0207     call foo
0208 
0209     macro invoke proc,[arg]
0210      { common stdcall [proc],arg }
0211 
0212     macro jif op1,cond,op2,label
0213      {
0214         cmp op1,op2
0215         j#cond label
0216      }
0217 
0218     macro label name
0219      {
0220         label name
0221         if ~ used name
0222           display `name # " is defined but not used.",13,10
0223         end if
0224      }
0225 
0226     macro message arg
0227      {
0228       if arg eqtype ""
0229         local str
0230         jmp   @f
0231         str   db arg,0Dh,0Ah,24h
0232         @@:
0233         mov   dx,str
0234       else
0235         mov   dx,arg
0236       end if
0237         mov   ah,9
0238         int   21h
0239      }
0240 
0241     macro ext instr
0242      {
0243       macro instr op1,op2,op3
0244        \{
0245         if op3 eq
0246           instr op1,op2
0247         else
0248           instr op1,op2
0249           instr op2,op3
0250         end if
0251        \}
0252      }
0253 
0254     ext add
0255     ext sub
0256 
0257 
0258     macro tmacro [params]
0259      {
0260       common macro params {
0261      }
0262     MACRO fix tmacro
0263     ENDM fix }
0264 
0265 
0266     MACRO stoschar char
0267         mov al,char
0268         stosb
0269     ENDM
0270 
0271     postpone
0272      {
0273       code_size = $
0274      }
0275 
0276     struc point x,y
0277      {
0278         .x dw x
0279         .y dw y
0280      }
0281 
0282     struc db [data]
0283      {
0284        common
0285         . db data
0286         .size = $ - .
0287      }
0288 
0289     rept 5 { in al,dx }
0290 
0291     rept 3 counter
0292      {
0293         byte#counter db counter
0294      }
0295 
0296     match +,+ { include 'first.inc' }
0297     match +,- { include 'second.inc' }
0298     match a b, 1+2+3 { db a }
0299 
0300     V fix {
0301       macro empty
0302        V
0303     V fix }
0304        V
0305 
0306 
0307     list equ
0308 
0309     macro append item
0310      {
0311        match any, list \{ list equ list,item \}
0312        match , list \{ list equ item \}
0313      }
0314 
0315     define a b+4
0316     define b 3
0317     rept 1 result:a*b+2 { define c result }
0318 
0319     rept 8 n:0 { pxor xmm#n,xmm#n }
0320 
0321 
0322    irps reg, al bx ecx
0323     { xor reg,reg }
0324 
0325 
0326     if 0
0327     a = 1
0328     b equ 2
0329     end if
0330     dd b
0331 
0332 
0333     extrn exit
0334     extrn '__imp__MessageBoxA@16' as MessageBox:dword
0335 
0336     extrn 'printf' as _printf
0337     printf = PLT _printf
0338 
0339     tester? = 0
0340 
0341         space:
0342         space.x = 1
0343         space.y = 2
0344         space.color:
0345         space.color.r = 0
0346         space.color.g = 0
0347         space.color.b = 0
0348 
0349         space:
0350         namespace space
0351                 x = 1
0352                 y = 2
0353                 color:
0354                 .r = 0
0355                 .g = 0
0356                 .b = 0
0357         end namespace
0358 
0359 
0360         first:
0361                 .child = 1
0362                 ..other = 0
0363         second:
0364                 .child = 2
0365                 ..another = ..other
0366 
0367 
0368         label character:byte
0369         label char:1
0370 
0371         byte? = 1       ; 8 bits
0372         word? = 2       ; 16 bits
0373         dword? = 4      ; 32 bits
0374         fword? = 6      ; 48 bits
0375         pword? = 6      ; 48 bits
0376         qword? = 8      ; 64 bits
0377         tbyte? = 10     ; 80 bits
0378         tword? = 10     ; 80 bits
0379         dqword? = 16    ; 128 bits
0380         xword? = 16     ; 128 bits
0381         qqword? = 32    ; 256 bits
0382         yword? = 32     ; 256 bits
0383         dqqword? = 64   ; 512 bits
0384         zword? = 64     ; 512 bits
0385 
0386         element A
0387         linpoly = A + A + 3
0388         vterm = linpoly scale 1 * linpoly element 1     ; vterm = 2 * A
0389 
0390         db 4 dup 90h            ; generate 4 bytes
0391         db 2 dup ('abc',10)     ; generate 8 bytes
0392 
0393         macro measured name,string
0394                 local top
0395                 name db string
0396                 top: name.length = top - name
0397         end macro
0398 
0399         measured hello, 'Hello!'        ; hello.length = 6
0400 
0401         A equ 1
0402         A equ 2
0403 
0404         drop A
0405         drop A
0406 
0407         data1 dw 1
0408         buffer1 rb 10h          ; zeroed and present in the output
0409 
0410         org 400h
0411         data dw 2
0412         buffer2 rb 20h          ; not in the output
0413 
0414         section 1000h
0415         data3 dw 3
0416         buffer3 rb 30h          ; not in the output
0417 
0418         virtual at 0
0419                 hex_digits::
0420                 db '0123456789ABCDEF'
0421         end virtual
0422         load a:byte from hex_digits:10  ; a = 'A'
0423 
0424         db "Text"
0425         key = 7Bh
0426         repeat $-$$
0427                 load a : byte from $$+%-1
0428                 store a xor key : byte at $$+%-1
0429         end repeat
0430 
0431         load char : byte from const:0
0432 
0433         if $>10000h
0434                 err 'segment too large'
0435         end if
0436         calminstruction please? cmd&
0437                 match =do? =not? cmd, cmd
0438                 jyes done
0439                 assemble cmd
0440             done:
0441         end calminstruction
0442 
0443         please do not display 'Bye!'
0444 
0445         macro jmpi target
0446                 if target-($+2) < 80h & target-($+2) >= -80h                    
0447                         db 0EBh
0448                         db target-($+1)
0449                 else
0450                         db 0E9h
0451                         dw target-($+2)
0452                 end if 
0453         end macro
0454 
0455         macro EX? first,second
0456                 match (=SP?), first
0457                         match =HL?, second
0458                                 db 0E3h
0459                         else match =IX?, second
0460                                 db 0DDh,0E3h
0461                         else match =IY?, second
0462                                 db 0FDh,0E3h
0463                         else
0464                                 err "incorrect second argument"
0465                         end match
0466                 else match =AF?, first
0467                         match =AF'?, second
0468                                 db 08h
0469                         else
0470                                 err "incorrect second argument"
0471                         end match
0472                 else match =DE?, first
0473                         match =HL?, second
0474                                 db 0EBh
0475                         else
0476                                 err "incorrect second argument"
0477                         end match
0478                 else
0479                         err "incorrect first argument"
0480                 end match
0481         end macro
0482 
0483         EX (SP),HL
0484 
0485         macro INC? argument
0486                 match [:r:], argument
0487                         db 100b + r shl 3
0488                 else match (=HL?), argument
0489                         db 34h
0490                 else match (=IX?+d), argument
0491                         db 0DDh,34h,d
0492                 else match (=IY?+d), argument
0493                         db 0FDh,34h,d
0494                 else
0495                         err "incorrect argument"
0496                 end match
0497         end macro
0498 
0499         INC (IX+2)
0500 
0501         element IY? 
0502 
0503         element L? : register + 101b
0504 
0505         macro CALL? arguments&
0506                 local cc,nn
0507                 match condition =, target, arguments
0508                         cc = condition - CC
0509                         nn = target
0510                         db 0C4h + cc shl 3
0511                 else
0512                         nn = arguments
0513                         db 0CDh                     
0514                 end match
0515                 dw nn
0516         end macro