如何打印单个 ASCII 字符?

Posted

技术标签:

【中文标题】如何打印单个 ASCII 字符?【英文标题】:How to print a single ASCII char? 【发布时间】:2013-12-09 08:15:35 【问题描述】:

在 DOS 汇编中我们可以这样做:

mov dl, 41h
mov ah, 02h
int 21h

但是 Linux nasm x86 Assembly 怎么样?

【问题讨论】:

使用sys_write 系统调用和fd == 1 (stdout) 和count == 1。你将如何去做取决于你是否在写作32 位或 64 位代码。有关 32 位示例,请参阅 this page。 不,我想打印一个 SINGLE 字符而不是字符串.. 然后让字符串由一个字符组成。 在 Linux 中你不能做的是从寄存器打印单个字符 - 它必须在缓冲区中。 push 41h 可以。 相关:***.com/questions/15596688/…(在 Linux x86-64 汇编中,您可以将其转换为 Linux x86 汇编)。 【参考方案1】:
section     .data

msg     db  'H'
len     equ $ - msg


section     .text
global      _start

_start:

mov     edx,len
mov     ecx,msg
mov     ebx,1    ;file descriptor (stdout)
mov     eax,4    ;system call number (sys_write)
int     0x80

mov     eax,1    ;system call number (sys_exit)
int     0x80

写入单个字符可能不会产生所需的输出,因为根据终端设置,它可能会被缓存,因此您可能需要刷新输出,以确保它出现在您写入的任何位置。

这是linux 32 Bit system calls的列表。

【讨论】:

sys_write 从不缓冲 I/O。我认为您正在谈论诸如printf 之类的C stdio 函数和写入缓冲区,但这就是库中的所有用户空间。 write() 永远不会“缓存”,只有在终端被阻塞时才会延迟(例如,通过 xon/xoff 流控制:^S^Q

以上是关于如何打印单个 ASCII 字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Perl 在文件中查找扩展的 ASCII 字符?

Arduino Serial.print()串口打印函数

如何在 Python 中打印非 ASCII 字符

c语言字符ASCLL码顺序

如何在 Python 中将单个字符转换为其十六进制 ASCII 值?

通过删除 PRIME ASCII CHARACTERS 打印字符串 [关闭]