8253初始化编程问题,为什么指向控制口要用DX

2024-12-15 10:36:30
推荐回答(3个)
回答1:

MOV AL,00110111B -8253控制字
MOV DX,3F6H (为什么指向控制口要用DX) -控制字寄存器地址 其实没有必要送DX 换个寄存器也行 就像计数习惯用CX一样 只是习惯了 这句指令只不过是将3F6H 写入一个寄存器
OUT DX,AL (输出语句out是不是先送AL,在对AL写入值?) --从你的问法就知道你不懂
这句话这么理解 将al寄存器的控制字 也就是00110111B 写入控制字寄存器 也就是DX中
简单说来第一句就是写控制字 控制字干嘛的你可以翻书 第二局就是将控制字寄存器地址送入寄存器DX 最后一句就是将控制字写入控制字寄存器 这三句可以说是8253 8253 8255基础中的基础了
顺带着说一句 3F0H,3F2H和3F4H 3F6H 这四个地址说明地址总线接的是a1,a2 ,因为结尾时000,010,100,110
再顺带着BS下楼上 你的写的是神马啊 骗分可耻啊 驴头不对马嘴

回答2:

8253是计算机的定时器外围接口芯片,对8253的读写和控制,用到的指令是IN,和OUT,
1、当口地址为8位时,可以直接用口地址与AL来操作,比如:
MOV AL,10H
OUT 80H,AL
2、当口地址为16位时,需要将地址送DX,然后再执行读写命令,比如:
MOV A,10H
MOV DX,388H
OUT DX,AL

回答3:

CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,90H ;A口方式0,输入口
;B口方式0,输出口
MOV DX,0FF2BH;0FF28H为我们用的
;试验箱的8255A
;控制端口地址;
OUT DX,AL
L1: MOV DX,0FF228H;0FF28为A口地址
IN AL,DX
TEST AL,01H;
JNZ RED
TEST AL,02H
JNZ YELL
TEST AL,04H
JNZ GREE
TEST AL,08H
JNZ BLUE
JMP L1
RED: MOV DX,0FF29H;B口地址
MOV AL,0FEH
OUT DX,AL
JMP L1
YELL: MOV DX,0FF29H;B口地址
MOV AL,0FDH
OUT DX,AL
JMP L1
FREE: MOV DX,0FF29H;B口地址
MOV AL,0FBH
OUT DX,AL
JMP L1
BLUE: MOV DX,0FF29H;B口地址
MOV AL,0F7H
OUT DX,AL
JMP L1
CODE ENDS
END START
如果还没解决你的问题,可以加我百度HI账号。