📄 4.asm
字号:
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include 4.inc
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,IDD_DIALOG,NULL,addr DlgProc,NULL
invoke ExitProcess,0
;########################################################################
GetBcdNum proc
mov ecx, 4
.while ecx
dec ecx
mov al, szBuffer[ecx]
and al, 0fh
lea ebx, ledTable
xlat
mov displayTable[ecx], al
.endw
ret
GetBcdNum endp
ledDisplay proc
mov al, 80h
mov dx, BasePort
add dx, PortCN
out dx, al
mov displayNum, 1
.while displayNum
mov index, 0
mov saveAl, 0f7h
.while index < 4
mov al, index
lea ebx, displayTable
xlat
mov dx, BasePort
add dx, PortA
out dx, al
mov al, saveAl
ror saveAl, 1
mov dx, BasePort
add dx, PortB
out dx, al
invoke Sleep, 1
inc index
.endw
dec displayNum
.endw
mov al, 0ffh
mov dx, BasePort
add dx, PortB
out dx, al
ret
ledDisplay endp
displayThread proc
.while Thread_Exe
xor eax, eax
mov ax, displayData
invoke wsprintf, addr szBuffer, addr szFormat, eax
invoke SetDlgItemText, hDlg, IDC_EDT, addr szBuffer
invoke GetBcdNum
invoke ledDisplay
inc displayData
.if displayData == 10000
mov displayData, 0
.endif
.endw
ret
displayThread endp
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax == WM_INITDIALOG
invoke GetDlgItem, hWin, IDC_START
invoke EnableWindow, eax, TRUE
invoke GetDlgItem, hWin, IDC_STOP
invoke EnableWindow, eax, FALSE
mov eax, hWin
mov hDlg, eax
.elseif eax == WM_COMMAND
mov eax, wParam
.if ax == IDC_START
invoke GetDlgItem, hWin, IDC_START
invoke EnableWindow, eax, FALSE
invoke GetDlgItem, hWin, IDC_STOP
invoke EnableWindow, eax, TRUE
mov displayData, 0
mov Thread_Exe, 01h
invoke CreateThread, NULL, 0, addr displayThread, NULL, NULL, addr ThreadID
.if eax
mov hThread, eax
invoke CloseHandle, eax
.endif
.elseif ax == IDC_STOP
invoke GetDlgItem, hWin, IDC_START
invoke EnableWindow, eax, TRUE
invoke GetDlgItem, hWin, IDC_STOP
invoke EnableWindow, eax, FALSE
mov Thread_Exe, 00h
invoke SetDlgItemText, hWin, IDC_EDT, NULL
.endif
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -