SDL v1.2 >> Assembly (x64)

Hello, world!


參考資訊:
1. docs
2. SDL-Assembly

main.s

    .macro invoke func:req, args:vararg
        .ifnb \args
            argc = 0
            .irp param, \args
                .if argc == 0
                    mov \param, %rdi
                .elseif argc == 1
                    mov \param, %rsi
                .elseif argc == 2
                    mov \param, %rdx
                .elseif argc == 3
                    mov \param, %rcx
                .elseif argc == 4
                    mov \param, %rcx
                .elseif argc == 5
                    mov \param, %rcx
                .endif
                argc = argc + 1
            .endr
        .endif
        call \func
    .endm

    .equ SDL_INIT_VIDEO,  0x20
    .equ SDL_HWSURFACE,   0X01

    .text
    .global main
main:
    invoke SDL_Init, $SDL_INIT_VIDEO
    invoke SDL_SetVideoMode, $320, $240, $16, $SDL_HWSURFACE
    mov %rax, screen

    invoke SDL_RWFromFile, $bmp_path, $bmp_mode
    invoke SDL_LoadBMP_RW, %rax, $1
    mov %rax, bmp

    invoke SDL_UpperBlit, bmp, $0, screen, $0
    invoke SDL_Flip, screen
    invoke SDL_Delay, $3000
    invoke SDL_FreeSurface, bmp
    invoke SDL_Quit

    mov $0, %rax
    ret

    .align
    .text
bmp_path: .asciz "main.bmp"
bmp_mode: .asciz "rw"

    .align
    .data
screen: .quad 0
bmp:    .quad 0
  .end

編譯、執行

$ gcc main.s -o main -lSDL -no-pie
$ ./main



返回上一頁