求教windows汇编编程入门教程站点,请各位前辈不吝赐教!

KuangXiang 2000-06-07 08:45:00
...全文
329 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
beewae 2000-12-20
  • 打赏
  • 举报
回复
go to http://asm.yeah.net find a tutorial of win32asm, and go to the link of oringal writer's address.
bigluo 2000-06-22
  • 打赏
  • 举报
回复
goto http://asm.yeah.net
coolie 2000-06-10
  • 打赏
  • 举报
回复
asm.yeah.net上有,你去看看
RuFeng 2000-06-09
  • 打赏
  • 举报
回复
很容易的,其实写它比较写C还容易!看一看下面这例子就明白了:
;定义
.386
.model flat, stdcall
option casemap :none ; case sensitive

; #########################################################################
;包含库
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

; #########################################################################

;=============
; Local macros
;=============

szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM

m2m MACRO M1, M2
push M2
pop M1
ENDM

return MACRO arg
mov eax, arg
ret
ENDM

;=================
; Local prototypes
;=================
;定义API
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
TopXY PROTO :DWORD,:DWORD
Paint_Proc PROTO :DWORD, hDC:DWORD
Frame3D PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
;定义变量
.data
szDisplayName db "3D Frames",0
CommandLine dd 0
hWnd dd 0
hInstance dd 0

.code

start:
invoke GetModuleHandle, NULL ;一个调用API的call
mov hInstance, eax

invoke GetCommandLine
mov CommandLine, eax

invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax

; #########################################################################

WinMain proc hInst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD

;====================
; Put LOCALs on stack
;====================

LOCAL wc :WNDCLASSEX
LOCAL msg :MSG

LOCAL Wwd :DWORD
LOCAL Wht :DWORD
LOCAL Wtx :DWORD
LOCAL Wty :DWORD

;==================================================
; Fill WNDCLASSEX structure with required variables
;==================================================
;定义窗口风格
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInst ;<< NOTE: macro not mnemonic
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
invoke LoadIcon,hInst,500 ; icon ID
mov wc.hIcon, eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
mov wc.hIconSm, 0

invoke RegisterClassEx, ADDR wc

;================================
; Centre window at following size
;================================

mov Wwd, 500
mov Wht, 350

invoke GetSystemMetrics,SM_CXSCREEN
invoke TopXY,Wwd,eax
mov Wtx, eax

invoke GetSystemMetrics,SM_CYSCREEN
invoke TopXY,Wht,eax
mov Wty, eax

szText szClassName,"Template_Class"

invoke CreateWindowEx,WS_EX_LEFT,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInst,NULL
mov hWnd,eax

invoke LoadMenu,hInst,600 ; menu ID
invoke SetMenu,hWnd,eax

invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd

;===================================
; Loop until PostQuitMessage is sent
;===================================

StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:

return msg.wParam

WinMain endp

; #########################################################################

WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD

LOCAL hDC :DWORD
LOCAL Ps :PAINTSTRUCT


.if uMsg == WM_COMMAND
;======== menu commands ========
.if wParam == 1000
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.elseif wParam == 1900
szText TheMsg,"Assembler, Pure & Simple"
invoke MessageBox,hWin,ADDR TheMsg,ADDR szDisplayName,MB_OK
.endif
;====== end menu commands ======

.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin,ADDR Ps
mov hDC, eax
invoke Paint_Proc,hWin,hDC
invoke EndPaint,hWin,ADDR Ps
return 0

.elseif uMsg == WM_CREATE

jmp @F
Butn1 db "&Save",0
Butn2 db "&Cancel",0
Butn3 db "&Help",0
@@:

invoke PushButton,ADDR Butn1,hWin,350,30,100,25,500
invoke PushButton,ADDR Butn2,hWin,350,60,100,25,500
invoke PushButton,ADDR Butn3,hWin,350,90,100,25,500


.elseif uMsg == WM_CLOSE
szText TheText,"Please Confirm Exit"
invoke MessageBox,hWin,ADDR TheText,ADDR szDisplayName,MB_YESNO
.if eax == IDNO
return 0
.endif
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
return 0
.endif

invoke DefWindowProc,hWin,uMsg,wParam,lParam

ret

WndProc endp

; ########################################################################

TopXY proc wDim:DWORD, sDim:DWORD

shr sDim, 1 ; divide screen dimension by 2
shr wDim, 1 ; divide window dimension by 2
mov eax, wDim ; copy window dimension into eax
sub sDim, eax ; sub half win dimension from half screen dimension

return sDim

TopXY endp

; #########################################################################

Paint_Proc proc hWin:DWORD, hDC:DWORD

LOCAL btn_hi :DWORD
LOCAL btn_lo :DWORD
LOCAL Rct :RECT

invoke GetSysColor,COLOR_BTNHIGHLIGHT
mov btn_hi, eax

invoke GetSysColor,COLOR_BTNSHADOW
mov btn_lo, eax

; --------------------------------------------------------
; The following 2 calls draw the border around the buttons
; --------------------------------------------------------
invoke Frame3D,hDC,btn_lo,btn_hi,340,20,460,125,2
invoke Frame3D,hDC,btn_hi,btn_lo,337,17,463,128,2

; -----------------------------------------------------
; The following 2 calls draw the left window frame area
; -----------------------------------------------------
invoke Frame3D,hDC,btn_lo,btn_hi,17,17,328,290,2
invoke Frame3D,hDC,btn_hi,btn_lo,20,20,325,287,1

; ----------------------------------------------------------
; The following code draws the border around the client area
; ----------------------------------------------------------
invoke GetClientRect,hWin,ADDR Rct

add Rct.left, 1
add Rct.top, 1
sub Rct.right, 1
sub Rct.bottom, 1

invoke Frame3D,hDC,btn_lo,btn_hi,
Rct.left,Rct.top,
Rct.right,Rct.bottom,2

add Rct.left, 4
add Rct.top, 4
sub Rct.right, 4
sub Rct.bottom, 4

invoke Frame3D,hDC,btn_hi,btn_lo,
Rct.left,
Rct.top,Rct.right,Rct.bottom,2

return 0

Paint_Proc endp

; ########################################################################

PushButton proc lpText:DWORD,hParent:DWORD,
a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD

szText btnClass,"BUTTON"

invoke CreateWindowEx,0,
ADDR btnClass,lpText,
WS_CHILD or WS_VISIBLE,
a,b,wd,ht,hParent,ID,
hInstance,NULL

ret

PushButton endp

; ########################################################################

Frame3D proc hDC:DWORD,btn_hi:DWORD,btn_lo:DWORD,
tx:DWORD, ty:DWORD, lx:DWORD, ly:DWORD,bdrWid:DWORD

; --------------------------------
; prototype and example usage code
; --------------------------------

; LOCAL btn_hi :DWORD
; LOCAL btn_lo :DWORD

; invoke GetSysColor,COLOR_BTNHIGHLIGHT
; mov btn_hi, eax

; invoke GetSysColor,COLOR_BTNSHADOW
; mov btn_lo, eax

; invoke Frame3D,hDC,btn_lo,btn_hi,50,50,150,100,2
; invoke Frame3D,hDC,btn_hi,btn_lo,47,47,153,103,2
; --------------------------------

LOCAL hPen :DWORD
LOCAL hPen2 :DWORD
LOCAL hpenOld :DWORD

invoke CreatePen,0,1,btn_hi
mov hPen, eax

invoke SelectObject,hDC,hPen
mov hpenOld, eax

; ------------------------------------
; Save copy of parameters for 2nd loop
; ------------------------------------
push tx
push ty
push lx
push ly
push bdrWid

; ------------

lpOne:

invoke MoveToEx,hDC,tx,ty,NULL
invoke LineTo,hDC,lx,ty

invoke MoveToEx,hDC,tx,ty,NULL
invoke LineTo,hDC,tx,ly

dec tx
dec ty
inc lx
inc ly

dec bdrWid
cmp bdrWid, 0
je lp1Out
jmp lpOne
lp1Out:

; ------------
invoke CreatePen,0,1,btn_lo
mov hPen2, eax
invoke SelectObject,hDC,hPen2
mov hPen, eax
invoke DeleteObject,hPen
; ------------

pop bdrWid
pop ly
pop lx
pop ty
pop tx

lpTwo:

invoke MoveToEx,hDC,tx,ly,NULL
invoke LineTo,hDC,lx,ly

invoke MoveToEx,hDC,lx,ty,NULL
inc ly
invoke LineTo,hDC,lx,ly
dec ly

dec tx
dec ty
inc lx
inc ly

dec bdrWid
cmp bdrWid, 0
je lp2Out
jmp lpTwo
lp2Out:

; ------------
invoke SelectObject,hDC,hpenOld
invoke DeleteObject,hPen2

ret

Frame3D endp

; #########################################################################

end start
jc 2000-06-09
  • 打赏
  • 举报
回复
http://jiasheng.shangdu.net/
你可以上sohu或其他的搜索引擎

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧