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

📄 experiment4.asm

📁 74LS393和Intel8253中断应用 采用74LS393对实验箱中8MHz时钟进行分频处理
💻 ASM
字号:
stack segment para 'stack'
	dw 200 dup(?)
stack ends
data segment para 'data'
	intoa_off	dw ?
	intoa_seg	dw ?
	count		dw 0
data ends
code segment
	assume cs:code,ds:data,es:data,ss:stack
	main proc far
		mov ax,data
		mov ds,ax
		mov es,ax
		mov ax,stack
		mov ss,ax
		;修改中断向量
		mov ax,3571h		;取原71H中断向量,并保存
		int 21h				;(段地址--ES,偏移地址--BX)
		mov intoa_off,bx
		mov bx,es
		mov intoa_seg,bx
		cli					;置新中断向量之前关中断
		mov ax,2571h
		mov dx,seg auto_add
		mov ds,dx
		mov dx,offset auto_add
		int 21h				;(段地址--DS,偏移地址--DX)
		mov ax,data			;恢复数据段
		mov ds,ax
		sti					;开中断				
		
		;开放IRQ10
		in al,0a1h
		and al,11111011b	;
		out 0a1h,al
		;开放IRQ2
		in al,21h
		and al,1111011b
		out 21h,al
		
	begin:
		sti					;开中断
		hlt					;等待中断
		test_exit:
		mov ah,0ah				;测试是否有键盘输入
		int 21h
		cmp al,0
		jnz getnumber			;无键盘输入则继续
		mov ah,06h
		mov dl,ffh
		int 21h
		cmp al,1bh
		jz  exit				;为ESC则退出
		jmp begin
	exit:
		cli						;恢复原中断向量关中断
		mov ax,2571h		
		mov dx,intoa_seg
		mov ds,dx
		mov dx,intoa_off
		int 21h
		mov ax,data				;恢复数据段
		mov ds,ax
		sti
		;屏蔽中断请求
		in al,0a1h
		or al,00000100b
		out 21h,al				;屏蔽从片82C59 IRQ10
		
		in al,21h
		or al,00000100b
		out 0a1h,al				;屏蔽主片82C59 IRQ2
		;返回D0S
		mov ax,4c00h
		int 21h
	main endp
	;中断服务程序
	auto_add proc far
		mov ch, 4				;将count输出到屏幕
		rotate:
		mov cl, 4
		rol al, cl
		mov dl, al
		and dl, 0fh				;保留DL中的后四位
		add dl, 30h
		cmp dl, 3ah
		jl tochar
		add dl, 07h
	
		tochar:
		mov ah,02h
		int 21h					;显示该字符
		dec ch
		jnz rotate
		mov dl,'H'				
		int 21h					;打印‘H’
		mov dl,20h				
		int 21h					;打印空格
		
		cli						;关中断
		inc count
		;发中断结束命令
		mov al,20h				
		out 20h,al				;主片82C59A中断结束
		mov dx,0a0h
		mov al,61h
		out dx,al				;从片82C59A中断结束
		
		sti						;开中断
		iret					;中断返回
	auto_add endp
	code ends
	end main
		
		
		
		
		
		
		
		
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -