我开始学习汇编程序,在fasm的文档中有两个输入和输出命令 - in
& out
。据我所知,stdin是端口#0和stdout - #1,所以我尝试运行这段代码:
in eax,0
但程序崩溃了。运行后的结果相同
out 1,eax
我试图搜索一下这个,但没有运气。
那么,输入/输出命令的正确用法是什么,是否有更简单的输入/输出方式?
答案 0 :(得分:1)
你正在混合一些东西。
命令in
和out
分别用于从端口读取和写入端口。这些端口与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硬件方法,用于读写外围设备。 in
和out
指令会向CPU总线形成特殊信号,外设可以理解这些信号。
为了读写STDIN和STDOUT,必须使用OS上的标准文件函数,将STDIN和STDOUT分别作为文件句柄传递。
对于Linux,这些是sys_read和sys_write系统函数。您可以阅读广泛的以汇编为中心的系统调用参考here。