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

📄 exp4(9).asm

📁 windows32 汇编 8255数码管实验
💻 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 + -