关于用8254定时器编写发声程序时的问题

tuita 2004-09-07 10:58:54
在利用定时器编写通用发生程序的时候,书上说3个步骤
第2个步骤是,在2号定时器中的42H端口装如一个16位的定时常数(533h*896/频率)
书上相关部分的程序是:
mov dx,12h
mov ax,533h*896
div di
out 42h,al
mov al,ah
out 42h,al
我的问题是它这里做了一次字节的除法运算,这样商(16位)存放在AX中,端口42H也是16位的
为什么要分两次把结果输出到42H,为什么不直接 out 42h,ax?
...全文
356 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuita 2004-09-08
  • 打赏
  • 举报
回复
明白了
programfanny 2004-09-08
  • 打赏
  • 举报
回复
8253的数据总线只有8位,42H(数据口)是一个字节口,每次接收8位数据,而内部的计数器是16位的。给计数器装入初始计数值时,分两次装入:先装入低字节,再入高字节。
--------------------------------
40H-42H是数据口,用于三路独立的定时器。
43H是控制口
Areslee 2004-09-07
  • 打赏
  • 举报
回复
42H是字节端口
Ruluo 2004-09-07
  • 打赏
  • 举报
回复
8253的数据总线只有8位,42H(数据口)是一个字节口,每次接收8位数据。
当你要送一个 字 进去的时候自然要分两次了
--------------------------------
40H-42H是数据口
43H是控制口
csdsjkk 2004-09-07
  • 打赏
  • 举报
回复
out 42h,ax = out 42h,al out 43h,ah
clumsy 2004-09-07
  • 打赏
  • 举报
回复
>> 为什么要分两次把结果输出到42H,为什么不直接 out 42h,ax?
这个就是它的规定吧, 没有为什么的, 虽然你可以选择是先送 LSB, 还是 MSB. 43h 是定时器的控制端口啊, 只接受控制内容的. 40h-42h 才是 0#-2# 的数据端口.
tuita 2004-09-07
  • 打赏
  • 举报
回复
??
tuita 2004-09-07
  • 打赏
  • 举报
回复
我一开始说错了, 这个除法是字的除法而不是字节的除法
tuita 2004-09-07
  • 打赏
  • 举报
回复
那么就是说应该是
out 42h,ax
或者是out 42h,al
out 43h,ah
???

21,497

社区成员

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

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