?? temp.asm
字號:
.386
.model flat, stdcall
option casemap:none
;**************************Include 文件定義*************************
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;**************************Equ 等值定義*************************
IDD_DIALOG1 equ 101
IDC_BUTTON1 equ 1010
IDC_BUTTON2 equ 1013
IDC_BUTTON3 equ 1014
IDC_EDIT3 equ 1006
IDC_EDIT2 equ 1009
;**************************數(shù)據(jù)段*************************
.data
szError db "請輸入1到60之間的數(shù)!",0
szCaption db "輸入錯誤",0
szHelp db "著名的意大利數(shù)學家Fibonacci曾提出一個有趣的問題:設有一對新生兔子,從第三個月開始它們每個月都生一對兔子。按此規(guī)律,并假設沒有兔子死亡,第N個月有多少對兔子。這就是著名的Fibonacci算法。本程序就是用匯編實現(xiàn)Fibonacci算法 ",0
szCaptionHelp db "關于題目",0
szCaptionMaker db "作者",0
szMaker db " 本程序為05051232張賀的第一個匯編程序,:)",0
szBuffer DWORD ?
.data?
add1 dd ?
add2 dd ?
add0 dd ?
sum dd ?
summ dd ?
temp dd ?
;szBuffer db 256 dup (?)
hInstance HINSTANCE ?
hWinMain dd ?
hMenu dd ?
hSubMenu dd ?
hAccelerator dd ?
;**************************代碼段*************************
.code
;********************************************************************
; start函數(shù)
;********************************************************************
_start proc
;local temp: WORD
;invoke GetDlgItemInt,hWnd,IDC_EDIT2,addr temp,FALSE
;mov temp ,eax
;mov eax ,temp
;mov szBuffer ,eax
mov sum , 0
;mov summ , 0
mov add0 , 0
mov add1 , 1
mov add2 , 1
;.if temp==0
; mov summ , 0
;invoke SetDlgItemInt,hWinMain,IDC_EDIT3, summ ,FALSE
.if temp==1
mov summ , 1
;invoke SetDlgItemInt,hWinMain,IDC_EDIT3, summ ,FALSE
.elseif temp==2
mov summ , 1
;invoke SetDlgItemInt,hWinMain,IDC_EDIT3, summ ,FALSE
.elseif (temp<61 && temp >2 )
dec temp
dec temp
.while temp
mov summ , 0
mov sum , 0
mov eax , add1
add sum , eax
mov eax , add2
add sum , eax
mov eax , sum
mov summ , eax
;mov eax , add1
;mov add0 , eax
mov eax , add2
mov add1 , eax
mov eax , sum
mov add2 , eax
dec temp
.endw
;mov eax , add1
; add summ , eax
;mov eax , add2
; add summ, eax
;invoke SetDlgItemInt,hWinMain,IDC_EDIT3, summ ,FALSE
.else
invoke MessageBox,hWinMain,addr szError,addr szCaption,MB_OK
.endif
invoke SetDlgItemInt,hWinMain,IDC_EDIT3, summ ,FALSE
ret
_start endp
;********************************************************************
; pause函數(shù)
;********************************************************************
_pause proc
invoke ExitProcess,NULL
ret
_pause endp
;********************************************************************
; help函數(shù)
;********************************************************************
_help proc
invoke MessageBox,hWinMain,addr szHelp,addr szCaptionHelp,MB_OK
ret
_help endp
;********************************************************************
; maker函數(shù)
;********************************************************************
_maker proc
invoke MessageBox,hWinMain,addr szMaker,addr szCaptionMaker,MB_OK
ret
_maker endp
;********************************************************************
; 將窗口移動到屏幕中間
; 參數(shù):窗口句柄
;********************************************************************
_CenterWindow proc hWnd:DWORD
local @stRectDeskTop:RECT,@stRectWin:RECT
local @dwWidth:DWORD,@dwHeight:DWORD
invoke GetWindowRect,hWnd,addr @stRectWin
invoke GetDesktopWindow
mov ebx,eax
invoke GetWindowRect,ebx,addr @stRectDeskTop
mov eax,@stRectWin.bottom
sub eax,@stRectWin.top
mov @dwHeight,eax
mov eax,@stRectWin.right
sub eax,@stRectWin.left
mov @dwWidth,eax
mov ebx,@stRectDeskTop.bottom
sub ebx,@dwHeight
shr ebx,1
mov ecx,@stRectDeskTop.right
sub ecx,@dwWidth
shr ecx,1
invoke MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE
ret
_CenterWindow endp
;********************************************************************
; 模式對話框的過程函數(shù)
;********************************************************************
_ProcDlgMain proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
invoke GetDlgItem,hWnd,IDC_EDIT2
invoke GetDlgItemInt,hWnd,IDC_EDIT2,addr temp,FALSE
mov temp , eax
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL ;關閉對話框
.elseif eax == WM_INITDIALOG ;初始化對話框
invoke _CenterWindow,hWnd
mov eax,hWnd
mov hWinMain,eax
invoke SendDlgItemMessage,hWinMain,IDC_EDIT3,EM_SETREADONLY,TRUE,NULL ;向編輯框發(fā)送消息
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDOK
call _start
.elseif eax == IDC_BUTTON1
call _pause
.elseif eax == IDC_BUTTON2
call _help
.elseif eax == IDC_BUTTON3
call _maker
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
;********************************************************************
; 主過程
;********************************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -