Input/output 在 fasm 中使用 in,out 命令

Input/output in fasm using in,out commands

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

in eax,0

但是程序崩溃了。 运行ning

后结果相同
out 1,eax

我试着搜索了一下,但没有成功。

那么,in&out 命令的正确用法是什么,有没有更简单的方法input/output?

你正在混合一些东西。

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

端口设计为字节大小,但您可以一次 read/write 多个端口。
当您编写 in eax,0 时,CPU 从端口 0、1、2 和 3 获得了 4 个字节。
当您编写 out 1,eax 时,CPU 将 4 个字节放入端口 1、2、3 和 4。

您在此处使用的端口服务于第一个 DMA 控制器。您不应该篡改这些设置!

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

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

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