⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fire.asm

📁 menuet os应用程序源代码,很多汇编写的应用程序
💻 ASM
字号:
;
;    FIRE for MENUET  - Compile with FASM
;
   
use32
   
           org     0x0
           db      'MENUET00'           ; 8 byte id
           dd      38                   ; required os
           dd      START                ; program start
           dd      I_END                ; image size
           dd      0x100000             ; reguired amount of memory
           dd      0x00000000           ; reserved=no extended header
   
   
START:
   
    call draw_window
   
    mov  edi,0x80000
    mov  ecx,320*600+100
    mov  eax,0
    cld
    rep  stosb
   
sta:                                         ; calculate fire image
   
    mov  esi, FireScreen
    add  esi, 0x2300
    sub  esi, 80
    mov  ecx, 80
    xor  edx, edx
   
  NEWLINE:
   
    mov  eax,dword [FireSeed]                ; New number
    mov  edx, 0x8405
    mul  edx
    inc  eax
    mov  dword [FireSeed], eax               ; Store seed
   
    mov  [esi], dl
    inc  esi
    dec  ecx
    jnz  NEWLINE
   
    mov  ecx, 0x2300
    sub  ecx, 80
    mov  esi, FireScreen
    add  esi, 80
   
  FIRELOOP:
   
    xor  eax,eax
   
    cmp  [type],0
    jnz  notype1
    mov  al, [esi]
    add  al, [esi + 2]
    adc  ah, 0
    add  al, [esi + 1]
    adc  ah, 0
    add  al, [esi + 81]
    adc  ah, 0
  notype1:
   
    cmp  [type],1
    jnz  notype2
    mov  al, [esi]
    add  al, [esi - 1]
    adc  ah, 0
    add  al, [esi - 1]
    adc  ah, 0
    add  al, [esi + 79]
    adc  ah,0
  notype2:
   
    cmp  [type],2
    jnz  notype3
    mov  al, [esi]
    add  al, [esi - 1]
    adc  ah,0
    add  al, [esi + 1]
    adc  ah, 0
    add  al, [esi + 81]
    adc  ah,0
  notype3:
   
    shr  eax, 2
    jz   ZERO
    dec  eax
   
  ZERO:
   
    mov  [esi - 80], al
    inc  esi
    dec  ecx
    jnz  FIRELOOP
   
    pusha
   
    mov  eax,5
    mov  ebx,[delay]
    int  0x40
   
    mov  al,byte [calc]
    inc  al
    mov  byte [calc],al
    cmp  al,byte 2
    jz   pdraw
   
    jmp  nodrw
   
  pdraw:
   
    mov  byte [calc],byte 0
   
    mov  edi,0x80000
    add  edi,[fcolor]
    mov  esi,FireScreen
    xor  edx,edx
   
  newc:
   
    movzx eax,byte [esi]
    mov   ebx,eax
    mov   ecx,eax
    shl   ax,8
    shr   bx,1
    mov   al,bl
    add   ecx,eax
    shl   ax,8
    mov   ch,ah
   
    mov  [edi+0],cx
    mov  [edi+3],cx
    mov  [edi+6],cx
    mov  [edi+9],cx
    mov  [edi+0+320*3],cx
    mov  [edi+3+320*3],cx
    mov  [edi+6+320*3],cx
    mov  [edi+9+320*3],cx
   
    add  edi,12
    inc  edx
    cmp  edx,80
    jnz  nnl
    xor  edx,edx
    add  edi,320*3
  nnl:
    inc  esi
    cmp  esi,FireScreen+0x2000
    jnz  newc
   
    mov  eax,dword 0x00000007           ; display image
    mov  ebx,0x80000
    mov  ecx,4*80*65536+200
    mov  edx,1*65536+22
    int  0x40
   
  nodrw:
   
    popa
   
    mov  eax,11                  ; check if os wants to talk to us
    int  0x40
    cmp  eax,1
    jz   red
    cmp  eax,3
    jz   button
   
    jmp  sta
   
  red:                           ; draw window
    call draw_window
    jmp  sta
   
  button:                        ; get button id
    mov  eax,17
    int  0x40
   
    cmp  ah,1
    jnz  noclose
    mov  eax,-1                  ; close this program
    int  0x40
  noclose:
   
    cmp  ah,2                    ; change fire type
    jnz  nob2
    mov  eax,[type]
    add  eax,1
    and  eax,1
    mov  [type],eax
   nob2:
   
    cmp  ah,3                    ; change delay
    jnz  nob3
    mov  eax,[delay]
    sub  eax,1
    and  eax,1
    mov  [delay],eax
  nob3:
   
    cmp  ah,4                    ; change color
    jnz  nob4
    mov  eax,[fcolor]
    add  eax,1
    cmp  eax,2
    jbe  fcok
    mov  eax,0
  fcok:
    mov  [fcolor],eax
    mov  eax,0
    mov  ecx,0x10000
    mov  edi,0x80000
    cld
    rep  stosd
   
  nob4:
   
    jmp  sta
   
   
   
; ************************************************
; ********* WINDOW DEFINITIONS AND DRAW **********
; ************************************************
   
   
draw_window:
   
    pusha
   
    mov  eax,12                    ; tell os about redraw
    mov  ebx,1
    int  0x40
   
    mov  eax,0                     ; define and draw window
    mov  ebx,100*65536+321
    mov  ecx,70*65536+222
    mov  edx,0x00000000
    mov  esi,0x00000000
    mov  edi,0x00000000
    int  0x40
   
    mov  eax,dword 0x00000004      ; 'FIRE FOR MENUET'
    mov  ebx,110*65536+8
    mov  ecx,dword 0x00FFFFFF
    mov  edx,text
    mov  esi,textlen-text
    int  0x40
   
    mov  eax,8
    mov  ebx,(321-19)*65536+12     ; button start x & size
    mov  ecx,5*65536+12            ; button start y & size
    mov  edx,1                     ; button number
    mov  esi,0x009a0000
    int  0x40
   
    mov  eax,8
    mov  ebx,5*65536+12
    mov  ecx,5*65536+12
    mov  edx,2
    int  0x40
   
    mov  eax,8
    mov  ebx,18*65536+12
    mov  ecx,5*65536+12
    mov  edx,3
    int  0x40
   
    mov  eax,8
    mov  ebx,31*65536+12
    mov  ecx,5*65536+12
    mov  edx,4
    int  0x40
   
    mov  eax,12                    ; tell os about redraw end
    mov  ebx,2
    int  0x40
   
    popa
   
    ret
   
   
; DATA SECTION
   
calc      dd  0
fcolor    dd  2
xx        db  'x'
type      dd  0
delay     dd  0
FireSeed  dd  0x1234
text:     db 'FIRE FOR MENUET'
textlen:
   
FireScreen:
   
I_END:
   
   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -