一道微机接口题

yanmiedetianshi 2009-05-17 11:40:48
没攻这个,学的不好,这几天大作业,自己写的程序,怎么看怎么不对劲,感觉是拼凑的代码...大侠帮忙看下 哪错了


题目:主程序重复显示"Welcome You!";8253计数器工作与方式0,做事件计数,每5次事件后,通过8259向CPU申请中断,终止显示"Welcome You!"程序;CPU响应中断后,通过8255使8个指示灯依次点亮(要求有时间间隔),并要求在屏幕上显示中断CPU次数和灯亮的顺序号,即显示的结果为n12345678,n为中断次数,设n=1-9;

STACK				SEGMENT	STACK
DW 64 DUP (?)
STACK ENDS
DATA SEGMENT
MESS DB 'WELCOME YOU!',0AH,0DH,'$'
LIGHT DB '87654321',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ; 保留DATA段地址
PUSH DS
MOV AX,0000H
MOV DS,AX ; 数据段清零
MOV AX,OFFSETIRQ7 ; 取中断程序入口地址
ADD AX,2000H ; 加装载时IP=2000h地址
MOV SI,003CH ; 装8259中断7的中断失量
MOV [SI],AX ; 填偏移失量
MOV AX,0000H
MOV SI,003EH
MOV [SI],AX ; 填段地址矢量
CLI
POP DS

IN AL,21H
AND AL,7FH ; 开8259中断7
OUT 21H,AL

MOV AL,90H ; 8253控制字
OUT 43H,AL ; 8253 控制寄存器,工作在方式0,选择2号计数器,读/写低8位

MOV DX,0000H ;记录中断次数

A1: MOV AL,05H
OUT 42H,AL ; 8253 2#计数器
STI

MOV AH,06H ; 使welcome you! 输出
MOV BX,OFFSET MESS
INT 10H


HLT
JMP A1

DELAY: MOV CX, 77FFH ;延迟程序
A2: PUSH AX
POP AX
LOOP A2
RET


IRQ7: CLI
MOV AL,82H ; 8255控制字
OUT 63H,AL


;显示中断的次数以及中断的顺序
INC DX
CMP DX,000AH ; 当中断第10次时,跳转到EN结束
JMP EN
MOV AX,DX
INT 10H
MOV AH,06H ; 使87654321 输出
MOV BX,OFFSET LIGHT
INT 10H


;灯亮的顺序 87654321
IN AL,FE
OUT 60H,AL
CALL DELAY

IN AL,FD
OUT 60H,AL
CALL DELAY

IN AL,FB
OUT 60H,AL
CALL DELAY

IN AL,F7
OUT 60H,AL
CALL DELAY

IN AL,EF
OUT 60H,AL
CALL DELAY

IN AL,DF
OUT 60H,AL
CALL DELAY

IN AL,BF
OUT 60H,AL
CALL DELAY

IN AL,7F
OUT 60H,AL
CALL DELAY

MOV AX,0120H
INT 10H
MOV AL,20H
OUT 20H,AL
IRET

En: MOV AX,4CH
INT 21H

CODE ENDS
END START
...全文
83 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanmiedetianshi 2009-05-18
  • 打赏
  • 举报
回复
CMP DX,000AH ; 当中断第10次时,跳转到EN结束
JMP EN


这写错...

CMP DX,000AH
JE EN

...好多都忘了,希望有人帮忙...

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧