IN指令的疑问请朋友们帮帮!如果搞不懂我 我就回家种田算了!懂了就给分了

1423567 2005-06-17 12:04:54
IN 指令我有些地方很不明白 里面还分什么长格式和短格式的?
他这样写的
长格式:IN AL,PORT (字节)
IN AX,PORT (字)
短格式 IN AL,DX (字节)
IN AX,DX (字)

这是什么意思????上面说是 端口号小于255时就是长格式 大于255就是短格式
还说要先把传入到 DX里后 再传入 AL里 为什么呢?不都是16位寄存器啊 为什么?
还有为什么 IN 里不能用 AH 呢?
谢谢解答 懂了给分
...全文
194 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
VxD1 2005-07-07
  • 打赏
  • 举报
回复
找本好书学
hackingtruth 2005-07-05
  • 打赏
  • 举报
回复
学习
meishi 2005-06-29
  • 打赏
  • 举报
回复
inter这么做其实是为了缩短机械指令代码长度,节约空间,能满足要求的功能(16bit外设寻址)又节约空间,何乐而不为。
meishi 2005-06-29
  • 打赏
  • 举报
回复
你有没有看过汇编之后的机器代码,其实这是由每条指令的长度决定的,IN指令编译后的机械指令长度为16bit,自然操作数只能为8bit,如果IN指令编译后的机械指令长度为24bit,那你的指令IN AL,2FAH也没有什么问题,就好像移位多位,以及mov从一个内存地址到另一个内存地址,在8086都不可以,而到了386以后都可以,其实这是由CPU决定的,如果改做一下CPU,这些都可以。
1423567 2005-06-24
  • 打赏
  • 举报
回复
楼上的那就更不对拉。你说我们PC的IO地址线只有16位,所以不能直接产生大于255的IO地址。
255只需要8位就可以表示了 为什么说不可以呢?
lante911 2005-06-22
  • 打赏
  • 举报
回复
为什么不能直接 IN AL,2FAH 呢?

因为我们PC的IO地址线只有16位,所以不能直接产生大于255的IO地址。需要用寄存器存放地址。
lante911 2005-06-22
  • 打赏
  • 举报
回复
IN 指令怎么可以把 DX一个16位的传送到一个AL 8位中呢?

因为DX里放的是地址,并不是数据。那个地址的IO PORT 还是8位的。
大熊猫侯佩 2005-06-17
  • 打赏
  • 举报
回复
IN AL,DX 和 MOV AL,DX 或者MOV AL,DL 是不是一样?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当然不一样,完全是两个概念 mov 是寄存器之间的传送。
in 是 寄存器与 端口之间的交涉。还是找本好书静下心
来看看,相信不难理解的。
1423567 2005-06-17
  • 打赏
  • 举报
回复
书上说当端口地址超过255时,必须采用间接寻址方式
MOV DX,2FAH
IN AL,DX
这样从 2FAH 送一个字节到AL中间

为什么不能直接 IN AL,2FAH 呢?还有
IN AL,DX 和 MOV AL,DX 或者MOV AL,DL 是不是一样?
IN 指令怎么可以把 DX一个16位的传送到一个AL 8位中呢?

请各位说的细点 我刚学的 谢谢
1423567 2005-06-17
  • 打赏
  • 举报
回复
楼上的朋友~我没有听明白~555555
大熊猫侯佩 2005-06-17
  • 打赏
  • 举报
回复
I/O 设备(port 端口)地址以两种形式存在:固定端口和可变端口。
前者寻址允许在 al,ax 或 eax 与使用 8 位端口地址的设备之间
传送数据。而可变端口寻址允许在 al,ax, 和 eax 与 16 位端口
地址之间传送数据。称为可变端口是由于在 程序 执行期间寄存器
dx 中存放的 i/o 端口好可以改变。出现在地址总线 a0~a15 上。

in 里不能直接用 ah ,但可以事先将 al<-ah 。

21,459

社区成员

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

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