+ -
当前位置:首页 → 问答吧 → 要交实验报告!急!高手把代码逐句解释下。。初学者,不懂!

要交实验报告!急!高手把代码逐句解释下。。初学者,不懂!

时间:2010-12-19

来源:互联网

TITLE ZY2TJ.ASM
UCODE SEGMENT
  ASSUME CS:UCODE
BEGIN:
  JMP BEGIN_
  INT_SEG DW ?
  INT_OFF DW ?

BEGIN_:
  CLI
  MOV AH,35H
  MOV AL,0EH ;保存原来的IRQ6的地址
  INT 21H
  MOV INT_OFF,BX
  MOV INT_SEG,ES
 
  MOV AX,CS
  MOV DS,AX
  MOV AH,25H
  MOV AL,0EH
  MOV DX,OFFSET UINTR
  INT 21H
   
  IN AL,21H
  AND AL,0BFH
  MOV DX,21H
  OUT DX,AL
  STI
   
  JMP $
   
UINTR PROC FAR
  CLI
  MOV DX,88H
  MOV AL,'R'
  OUT DX,AL
  MOV AL,20H
  OUT 20H,AL
  IRET
UINTR ENDP
UCODE ENDS
  END BEGIN
 

作者: zhangcong002   发布时间: 2010-12-19

我就是看看

作者: abgood   发布时间: 2010-12-19

UCODE SEGMENT
  ASSUME CS:UCODE ;定义ucode为代码段
BEGIN: ;代码段的开始地址
  JMP BEGIN_ ;跳到标号为BEGIN_的地址
  INT_SEG DW ? ;定义变量INT_SEG 和INT_OFF 
  INT_OFF DW ?

BEGIN_: ;标号
  CLI ;关中断
  MOV AH,35H 
  MOV AL,0EH ;保存原来的IRQ6的地址
  INT 21H ;DOS中断,取指定中断号0EH的入口地址
  MOV INT_OFF,BX ;把bx赋给变量INT_OFF,即中断号0EH的偏移地址
  MOV INT_SEG,ES ;把es赋给变量INT_seg,即中断号0EH的段地址

  
  MOV AX,CS ;这段代码的意思是把UINTR子过程设置为中断号为0eh的中断过程
  MOV DS,AX
  MOV AH,25H
  MOV AL,0EH
  MOV DX,OFFSET UINTR
  INT 21H
   
  IN AL,21H ;读中断屏蔽寄存器
  AND AL,0BFH  
  MOV DX,21H
  OUT DX,AL ;屏蔽软盘中断
  STI ;开中断
   
  JMP $ ;还是执行本指令
   
UINTR PROC FAR
  CLI
  MOV DX,88H
  MOV AL,'R'
  OUT DX,AL
  MOV AL,20H
  OUT 20H,AL
  IRET
UINTR ENDP
UCODE ENDS
  END BEGIN

作者: leetow2003   发布时间: 2010-12-19

MOV AL,20H
OUT 20H,AL
是通知8259A当前中断结束
IRET是从中断返回

88H端口不知道是什么,哪位说说

作者: leetow2003   发布时间: 2010-12-19

TITLE ZY2TJ.ASM ;这个是描述文件名
UCODE SEGMENT ;CS关联的段名
  ASSUME CS:UCODE ;关联
BEGIN: ;BEGIN标签
  JMP BEGIN_ ;跳转到BEGIN_标签
  INT_SEG DW ? ;字变量INT_SEG
  INT_OFF DW ? ;字变量INT_OFF

BEGIN_: ;BEGIN_标签
  CLI ;关中断
  MOV AH,35H ;从0000:000E*4地址读取ISR地址
  MOV AL,0EH ;中断号
  INT 21H ;读取ISR地址
  MOV INT_OFF,BX ;出口参数为(高16 cs)ES:(低16 ip)BX
  MOV INT_SEG,ES ;BX保存到INT_OFF,ES保存到INT_SEG
  
  MOV AX,CS  
  MOV DS,AX ;DS=CS
  MOV AH,25H ;设置新的ISR地址到地址0000:000E*4
  MOV AL,0EH ;中断号
  MOV DX,OFFSET UINTR
  INT 21H ;入口参数为(高16 cs)DS:DX(低16 ip)
   
  IN AL,21H ;读21口字节到AL
  AND AL,0BFH ;D6位置0
  MOV DX,21H
  OUT DX,AL ;写回21口
  STI ;开中断
   
  JMP $ ;死循环
   
UINTR PROC FAR ;子程序UINTR,远调
  CLI ;关中断
  MOV DX,88H  
  MOV AL,'R'  
  OUT DX,AL ;数据'R'写回88口
  MOV AL,20H
  OUT 20H,AL ;数据20H写回20口
  IRET ;中断返回
UINTR ENDP ;子程序结束
UCODE ENDS ;代码段结束
  END BEGIN ;代码从BEGIN开始执行

作者: va_zaixuexi   发布时间: 2010-12-19

热门下载

更多