使用in,out命令在fasm中输入/输出

时间:2015-05-10 16:38:04

标签: assembly fasm

我开始学习汇编程序,在fasm的文档中有两个输入和输出命令 - in& out。据我所知,stdin是端口#0和stdout - #1,所以我尝试运行这段代码:

in eax,0

但程序崩溃了。运行后的结果相同

out 1,eax

我试图搜索一下这个,但没有运气。

那么,输入/输出命令的正确用法是什么,是否有更简单的输入/输出方式?

2 个答案:

答案 0 :(得分:1)

你正在混合一些东西。

命令inout分别用于从端口读取和写入端口。这些端口与STDIN或STDOUT无关。 (在DOS级别,STDIN为1,STDOUT为2.)

端口按设计字节大小,但您可以一次读/写多个端口 当你写in eax,0时,CPU有4个字节来自端口0,1,2和3 当您编写out 1,eax时,CPU将4个字节放入端口1,2,3和4中。

此处使用的端口为第一个DMA控制器提供服务。你不应该篡改这些设置!

答案 1 :(得分:0)

这些是硬件端口。一种特殊的x86硬件方法,用于读写外围设备。 inout指令会向CPU总线形成特殊信号,外设可以理解这些信号。

为了读写STDIN和STDOUT,必须使用OS上的标准文件函数,将STDIN和STDOUT分别作为文件句柄传递。

对于Linux,这些是sys_read和sys_write系统函数。您可以阅读广泛的以汇编为中心的系统调用参考here