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

📄 temp.asm

📁 一个用WIN32编的兔子繁殖问题
💻 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
;**************************数据段*************************
.data
szError         db       "请输入1到60之间的数!",0
szCaption	db	"输入错误",0
szHelp	db	"著名的意大利数学家Fibonacci曾提出一个有趣的问题:设有一对新生兔子,从第三个月开始它们每个月都生一对兔子。按此规律,并假设没有兔子死亡,第N个月有多少对兔子。这就是着名的Fibonacci算法。本程序就是用汇编实现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函数
;********************************************************************
_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函数
;********************************************************************
_pause	proc
invoke	ExitProcess,NULL
     ret
      _pause	endp
;********************************************************************
;	help函数
;********************************************************************
_help	proc
invoke	MessageBox,hWinMain,addr szHelp,addr szCaptionHelp,MB_OK
     ret
      _help	endp
;********************************************************************
;	maker函数
;********************************************************************
_maker	proc
invoke	MessageBox,hWinMain,addr szMaker,addr szCaptionMaker,MB_OK
     ret
      _maker	endp
;********************************************************************
;	将窗口移动到屏幕中间
;	参数:窗口句柄
;********************************************************************
_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
;********************************************************************
;	模式对话框的过程函数
;********************************************************************
_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  ;向编辑框发送消息
		.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 + -