📄 计算是哪天生的.asm
字号:
;**************头文件和导入库文件****************************
.386
.model flat, stdcall
option casemap:none
;**************头文件和导入库文件****************************
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
;**************equ******************************
IDD_DIALOG1 equ 101
IDB_BITMAP1 equ 104
IDR_MENU1 equ 106
IDI_ICON1 equ 107
IDC_EDIT1 equ 1000
IDC_EDIT2 equ 1001
IDC_EDIT3 equ 1002
IDC_EDIT4 equ 1003
ID_MENUITEM40001 equ 40001
ID_MENUITEM40003 equ 40003
ID_MENUITEM40004 equ 40004
;**********************************************
;data
;**********************************************
.data
su dd 0,31,59,90,120,151,181,212,243,273,304,334
wan1 db '请输入正确的日期!',0
wan3 db '不不起,我们只计算公元后的年份',0
wan2 db '警告!',0
;**************data?****************************
.data?
dwVal DWORD ?
year dd ?
month dd ?
day dd ?
temp dd ?
off dd ?
;**************代码段****************************
.code
isrun proc year:dd
local t1:dw
local t2:dw
local t3:dw
local chu:dw
mov eax,year
mov chu,4
xor edx,edx
div chu
mov t1,dx
mov chu,100
xor edx,edx
div chu
mov t2,dx
xor edx,edx
mov chu,400
div chu
mov t3,dx
.if t1 == 0 && t2 != 0 || t3 == 0
mov eax,1
.else
mov eax,0
.endif
isrun endp
;====================================================================
; 对话框过程
;====================================================================
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.if uMsg == WM_INITDIALOG
mov year, 2007
invoke SetDlgItemInt, hWnd, IDC_EDIT1, year, FALSE
.elseif uMsg == WM_CLOSE
invoke EndDialog, hWnd,NULL
.elseif uMsg == WM_COMMAND
mov eax, wParam
.if ax == IDOK
invoke GetDlgItemInt, hWnd, IDC_EDIT1,NULL, TRUE
mov year,eax
invoke GetDlgItemInt, hWnd, IDC_EDIT2,NULL, FALSE
mov month,eax
invoke GetDlgItemInt, hWnd, IDC_EDIT3,NULL, FALSE
mov day,eax
invoke isrun,year
.if year < 0
invoke MessageBox,NULL,addr wan3,addr wan2,MB_OK
.elseif ((day > 0 && day < 32 && month > 0 && month < 13 && month != 2) || (eax == 1 && month == 2 && day > 0 && day < 30)||(eax ==0 && month == 2 && day > 0 && day < 29))
mov temp,0
mov eax,month
dec eax
mov ebx,offset su
mov eax,[eax*4+ebx]
add eax,day
mov temp,eax
invoke isrun,year
.if eax == 1 && month > 2
inc temp
.endif
invoke SetDlgItemInt, hWnd, IDC_EDIT4, temp, FALSE
.else
invoke MessageBox,NULL,addr wan1,addr wan2,MB_OK
.endif
.elseif ax == IDCANCEL
mov dwVal,0
invoke SetDlgItemInt, hWnd, IDC_EDIT1, dwVal, FALSE
invoke SetDlgItemInt, hWnd, IDC_EDIT2, dwVal, FALSE
invoke SetDlgItemInt, hWnd, IDC_EDIT3, dwVal, FALSE
invoke SetDlgItemInt, hWnd, IDC_EDIT4, dwVal, FALSE
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
;====================================================================
; 主程序入口处
;====================================================================
start:
;----------------------------------------
; 获取该程序实例句柄
;----------------------------------------
invoke GetModuleHandle, NULL
;----------------------------------------
; 创建模式对话框
;----------------------------------------
invoke DialogBoxParam, eax, IDD_DIALOG1 , NULL, DlgProc, NULL
;----------------------------------------
invoke ExitProcess, NULL
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -