.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include gdi32.inc
includelib gdi32.lib
include kernel32.inc
includelib kernel32.lib
.data
hinstance dd ? ;例項控制代碼
hwinmain dd ? ;窗體控制代碼
;rectx dd ?
.const
szclassname db 'ssyclass',0 ;視窗類名
szcaptionname db 'mywindow',0 ;視窗標題
sztext db 'hello world',0 ;客戶區顯示內容
.code
;視窗過程函式
_procwinmain proc uses ebx edi esi hwnd,umsg,wparam,lparam ;.uses ebx edi esi這句是讓編譯器在
;函式中用push,pop指令保護這三個暫存器的值
local @stps:paintstruct
local @strect:rect
local @hdc
mov eax,umsg
.if eax==wm_paint
invoke beginpaint,hwnd,addr @stps ;beginpaint函式為指定視窗進行繪圖工作的準備,並用將和繪圖有關的資訊填充到乙個
;paintstruct結構中。
mov @hdc,eax ;返回裝置環境控制代碼
invoke getclientrect,hwnd,addr @strect ;獲取客戶區的座標
;invoke drawtext,@hdc,addr sztext,-1,\ ;在目標區域繪製 -1自動設定大小
; addr @strect,\
; invoke drawtext,@hdc,addr @strect.top,-1,\ ;在目標區域繪製 -1自動設定大小
; addr @strect,\
invoke textout,@hdc,null,null,addr sztext,sizeof sztext-1
;dt_singleline or dt_center or dt_vcenter
invoke endpaint,hwnd,addr @stps
.elseif eax==wm_close
invoke destroywindow,hwinmain
invoke postquitmessage,null
.else
invoke defwindowproc,hwnd,umsg,wparam,lparam
ret.endif
xor eax,eax
ret_procwinmain endp
;註冊建立顯示 訊息迴圈
_winmain proc
local @stwndclass:wndclas*** ;宣告個 wndclas***結構體的區域性變數@stwndclass
local @stmsg:msg ;宣告 msg結構體的區域性變數 @stmsg 訊息結構體
invoke getmodulehandle,null ;獲得當前例項控制代碼
mov hinstance,eax ;返回值在eax hinstance中
invoke rtlzeromemory,addr @stwndclass,sizeof wndclas*** ;初始化wndclas***,全置0
;註冊視窗類
invoke loadcursor,0,idc_wait ;裝載游標 idc wait 為漏斗游標
mov @stwndclass.hcursor,eax ;函式返回游標控制代碼
push hinstance
pop @stwndclass.hinstance ;把例項控制代碼壓棧再彈到結構體裡
mov @stwndclass.cbsize,sizeof wndclas*** ;把視窗類結構體占的位元組放在cbsize中
mov @stwndclass.style,cs_hredraw or cs_vredraw ;在水平或垂直方向視窗大小變化時重繪視窗
mov @stwndclass.lpfnwndproc,offset _procwinmain ;把視窗過程函式位址給lpfnwndproc
mov @stwndclass.hbrbackground,color_window+10 ;設定背景色
mov @stwndclass.lpszclassname,offset szclassname ;把視窗類名位址給lpszclassname
invoke registerclas***,addr @stwndclass ;註冊視窗
;建立並顯示視窗
;訊息迴圈
.while true
invoke getmessage,addr @stmsg,null,0,0
.break .if eax==0
invoke translatemessage,addr @stmsg
invoke dispatchmessage,addr @stmsg
.endw
ret_winmain endp
start:
call _winmain
invoke exitprocess,null
end start
乙個簡單函式的反彙編
void myfunction int a,int b int c a b 1 儲存ebp。ebp總是被我們用來儲存這個函式執行前的esp的值。執行完畢後,我們用ebp恢復esp 同時,呼叫此函式的上層函式也用ebp做同樣的事情。所以先把ebp壓入堆疊,返回之前彈出,避免ebp被我們改動。push ...
乙個彙編簡單樣例
int i,m u 0 for i 1 ireturn m u a0,n a1 i a0,s1 m max lw s1,0 a0 m u 0 addi s0,zero,l i l slt to,s0,a1 ibeq to,zero,exit sll t1,so,2 i 4 int 4位元組 add ...
pygame 建立乙個簡單的視窗
import pygame,sysimport pygame,sys def pygame test 初始化 pygame.init import pygame,sys def pygame test 初始化 pygame.init 建立乙個視窗 screen pygame.display.set ...