📄 exp4(9).asm
字号:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
IDD_DIALOG1 equ 101
ID_START equ 1000
ID_STOP equ 1001
IDC_SHOW equ 1002
Porta equ 0a400h
Portb equ 0a401h
Portc equ 0a402h
Portcn equ 0a403h
.data
szTitle db "申请失败",0
szText db "申请线程失败",0
Thread_Exe db 1
szdFmtStr db '%04d',0
Code_Table db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,98h
Temp_Table db 5 dup(?)
hWnd dd ?
count db ?
.data?
ThreadID dw ?
hThread dd ?
Show_Num dd ?
LED_CT db ?
szOutStr db 9 dup(?)
.code
Show_Data proc
pushad
mov al,1
mov count,al
.while (count!=0)
mov LED_CT,11110111b
mov esi,0
.while(esi<4)
mov dx,Portb
mov al,LED_CT
out dx,al
mov al,Temp_Table[esi]
mov dx,Porta
out dx,al
invoke Sleep,10
ror LED_CT,1
inc esi
.endw
dec count
.endw
popad
ret
Show_Data endp
GetHexCode proc
pushad
lea esi,szOutStr
lea edi,Temp_Table
mov cl,4
.while(cl)
mov al,[esi]
sub al,30h
lea ebx,Code_Table
xlat
mov [edi],al
inc edi
inc esi
dec cl
.endw
popad
ret
GetHexCode endp
Show_Thread proc
.while Thread_Exe
invoke wsprintf, addr szOutStr,addr szdFmtStr,Show_Num
invoke SetDlgItemText,hWnd,IDC_SHOW,addr szOutStr
invoke GetHexCode
invoke Show_Data
inc Show_Num
.if (Show_Num>9999)
mov Show_Num,0
.endif
.endw
ret
Show_Thread endp
DlgProc proc hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
push hDlg
pop hWnd
invoke GetDlgItem,hDlg,ID_START
invoke EnableWindow,eax,TRUE
invoke GetDlgItem,hDlg,ID_STOP
invoke EnableWindow,eax,FALSE
mov dx,Portcn
mov al,10000000b
out dx,al
.elseif uMsg==WM_COMMAND
mov eax,wParam
.if ax == ID_START
mov Show_Num,0
invoke CreateThread,NULL,0,addr Show_Thread,NULL,NULL,addr ThreadID
.if eax
mov hThread,eax
invoke CloseHandle,eax
.else
invoke MessageBox, NULL, addr szText, addr szTitle, NULL
.endif
invoke GetDlgItem,hDlg,ID_START
invoke EnableWindow,eax,FALSE
invoke GetDlgItem,hDlg,ID_STOP
invoke EnableWindow,eax,TRUE
.elseif ax==ID_STOP
mov Thread_Exe,0
invoke GetDlgItem,hDlg,ID_START
invoke EnableWindow,eax,TRUE
invoke GetDlgItem,hDlg,ID_STOP
invoke EnableWindow,eax,FALSE
.endif
.elseif uMsg == WM_CLOSE
invoke EndDialog,hDlg,NULL
.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 + -