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

📄 ledirq0.asm

📁 汇编终结....此程序讲述了在软件开发的底层,如何通过汇编来开发高效的驱动程序
💻 ASM
字号:
INTA00   EQU       20H
INTA01   EQU       21H
PORTSEG  EQU       209H
PORTBIT  EQU       208H

STACK    SEGMENT   STACK 'STACK'
	 DW        512 DUP (?)
STACK    ENDS

DATA     SEGMENT
MIN1     DB        0
MIN2     DB        0
	 DB	   10
	 DB	   10
SEC1     DB        0
SEC2     DB        0
INTMASK  DB        ?
CSREG    DW        ?
IPREG    DW        ?
COUNT    DB        0
LED      DB        3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40H
MES      DB        'DISPLAY THE LEDS,PRESS ANY KEY TO DOS!'
         DB        0AH,0DH,'$'
DATA     ENDS
 
CODE     SEGMENT
         ASSUME    CS:CODE,DS:DATA,SS:STACK
START:   MOV	   AX,DATA
	 MOV	   DS,AX
	 MOV	   DX,OFFSET MES
	 MOV	   AH,09
	 INT	   21H  
	 CLI     ;关中断
      	 MOV       AX,3508H
	 INT	   21H
	 MOV       AX,ES
	 MOV       CSREG,AX
	 MOV       IPREG,BX
	 PUSH      BX     
	 PUSH      DS  ;接到8259的irq0
	 MOV	   AX,CS
	 MOV	   DS,AX   
	 MOV	   DX,OFFSET INT_PROC  ;设置新中断向量
	 MOV	   AX,2508H
	 INT	   21H
         POP       DS
	 MOV	   DX,INTA01  ;8259的21端口
	 IN	   AL,DX
	 MOV	   INTMASK,AL
	 AND	   AL,0FEH   ;允许08号中断
	 OUT	   DX,AL
;
	 MOV	   AL,36H     ;8253初始化
	 OUT 	   43H,AL
	 MOV	   AL,34H
	 OUT	   40H,AL
	 MOV	   AL,5DH     ;5D34h对应50ms
	 OUT	   40H,AL
;
	 STI
AGAIN:	 CALL	   DISP
	 MOV	   AH,01
	 INT	   16H
	 JZ	   AGAIN
	 CLI
      	 POP       BX
	 MOV	   DX,INTA01
      	 MOV       AL,INTMASK
	 OUT	   DX,AL
	 MOV       DX,IPREG
	 MOV       AX,CSREG
	 MOV       DS,AX
	 MOV	   AX,2508H
	 INT	   21H
	 STI
	 MOV	   AX,4C00H
	 INT	   21H
;
DISP	 PROC	   NEAR
      	 MOV       DI,OFFSET MIN1
	 MOV	   CL,01
DIS1: 	 MOV       AL,[DI]    ;显示程序
	 MOV	   BX,OFFSET LED
	 XLAT
	 MOV	   DX,PORTSEG   ;209端口
	 OUT	   DX,AL
	 MOV	   AL,CL
	 MOV	   DX,PORTBIT   ;208端口
	 OUT	   DX,AL
	 PUSH      CX
	 MOV	   CX,350H
DELAY:	 LOOP      DELAY    ;延时
	 POP	   CX
      	 CMP       CL,20H ;判断6位是否显示完 
	 JZ	   CHG
	 INC	   DI
      	 SHL       CL,1    
	 MOV       AL,00   ;让led灭一下
	 OUT       DX,AL
	 JMP	   DIS1
CHG:	 RET
DISP	 ENDP
;	    	                     
INT_PROC:PUSH      AX
	 PUSH	   CX
	 PUSH	   DX
	 PUSH	   DI
	 INC       COUNT       
      	 CMP       COUNT,50
	 JL	   QUIT
	 MOV	   COUNT,0
	 INC	   SEC2
	 CMP	   SEC2,10
	 JL	   QUIT
	 MOV	   SEC2,0
	 INC	   SEC1
	 CMP	   SEC1,6
	 JL	   QUIT
	 MOV	   SEC1,0
	 INC	   MIN2
	 CMP	   MIN2,10
	 JL	   QUIT
	 MOV	   MIN2,0
	 INC	   MIN1
	 CMP	   MIN1,6
	 JL	   QUIT
	 MOV	   MIN1,0
QUIT: 	 MOV       DX,PORTBIT
	 MOV	   AL,00
	 OUT	   DX,AL
	 MOV	   DX,INTA00
	 MOV	   AL,20H
	 OUT	   DX,AL
	 POP	   DI
	 POP	   DX
      	 POP       CX
	 POP	   AX
	 IRET
;
CODE     ENDS
 	 END START    
;

⌨️ 快捷键说明

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