linux - 从汇编中的键盘读取整数(Linux IA-32 x86 gcc gas)

标签 linux gcc assembly interrupt gnu-assembler

我想知道如何在汇编中从键盘读取整数。我正在使用 Linux/x86 IA-32 架构和 GCC/GAS(GNU 汇编程序)。到目前为止,我找到的示例是针对 NASM 或其他一些与 Windows/DOS 相关的编译器的。

我听说它与“int 16h”中断有关,但我不知道它是如何工作的(它需要参数吗?结果去 %eax 或者它的任何虚拟寄存器 [AX, AH , AL]?).

提前致谢, 弗莱森。

:D

最佳答案

简单的回答是,您不是从键盘读取整数,而是从键盘读取字符。您也不会在屏幕上打印整数 - 您打印字符。您将需要将“ascii-to-integer”和“integer-to-ascii”转换的例程。您可以为一个“只调用 scanf”,为另一个“只调用 printf”。如果用户行为良好并将输入限制为代表十进制数字的字符,则“scanf”可以正常工作,但很难摆脱输入的任何“垃圾”! “printf”还不错。

尽管我是 Nasm 用户(它在 Linux 上运行良好 - 不是真正的“Windows/dos 相关”),但我可能有 (G)as 语法中的例程。如果你想不通,我会看看能不能找到他们。

正如 Brian 指出的那样,int 16h 是 BIOS 中断 - 16 位代码 - 在 Linux 中没有用。

最好的, 弗兰克

关于linux - 从汇编中的键盘读取整数(Linux IA-32 x86 gcc gas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542745/

相关文章:

c++ - OS X 上的 Eclipse CDT 提示 gcc 内置函数 : "Function ' __builtin_bzero' could not be resolved"

c - 如何评估嵌套的预处理器宏

performance - 条件指令(cmov)和跳转指令之间的区别

linux - 为什么 gcc 为 x64 共享库强制 PIC?

assembly - Assembly (MASM) 中的 Push 操作是否使寄存器的新值与推送的值相同?

linux - 如何在私有(private)服务器上使用 docker-machine?

php - 使用 PHP 脚本运行 shell 命令

c - 错误 : file was built for unsupported file format which is not the architecture being linked (x86_64)

linux - 如何在我的安装脚本中使 chgrp 命令可选?

linux - 交叉编译时 ucLinux libbzip2 reloc 类型错误