【发布时间】:2019-05-19 14:11:41
【问题描述】:
我正在尝试调用 isdigit,为此我需要缓冲区的第一个字节,其定义如下。
...
.equ ARRAYSIZE, 20
.section ".bss"
buffer:
.skip ARRAYSIZE
...
input:
pushl $buffer
pushl $scanFormat
call scanf
addl $8, %esp
因此,缓冲区被分配了一个 20 字节的内存空间,我使用 scanf 输入了一些值,如输入所示。
现在我想访问前 4 个字节以调用 isdigit。如何访问它们?
我最初的猜测是使用 movl 缓冲区,%eax,因为 eax 寄存器是 4 字节大小,并且会将前 4 个字节存储在缓冲区中。但我不确定它是如何工作的。
如果我只能访问缓冲区的前 4 个字节,或者任何其他将 isdigit 应用于前 4 个字节的方法,请告诉我。谢谢。
【问题讨论】:
-
通常
.section .bss不会在".bss"周围加上引号。我不确定这是否有效。 -
libc / POSIX
isdigit是区域设置感知的,但如果您可以假设当前区域设置的唯一“数字”字符是'0' .. '9',那么它更有效手动检查sub $'0', %al/cmp $10, %al/jae not_a_digit