所以我必须做这样的练习:From STDIN take a string of text of any size, and then change every lowercase character to uppercase and vice versa and print it to a file or STDOUT
。第二部分非常简单。但是现在我怎么能说一个字或者任何长度的短语呢?例如,当我以前做过的时候,我总是有一个长度为500左右的缓冲区,但现在必须输入任意长度的输入。我怎样才能做到这一点?装配中未知尺寸的缓冲区
我必须在32位Linux机器的AT&T
语法中执行此操作。
这是我现在的代码:(不更改为大写/小写)
SYSCALL32 = 0x80
READ = 3
WRITE = 4
STDIN = 0
STDOUT = 1
EXIT = 1
BUF_SIZE = 10
.data
TEXT_SIZE: .long 0
BUFOR: .space BUF_SIZE
BUFOR1: .space BUF_SIZE
.globl _start
.text
_start:
reading:
movl $READ, %eax
movl $STDIN, %ebx
movl $BUFOR, %ecx
movl $BUF_SIZE, %edx
int $SYSCALL32
movl %eax, TEXT_SIZE
movl $WRITE, %eax
movl $STDOUT, %ebx
movl $BUFOR, %ecx
movl TEXT_SIZE, %edx
int $SYSCALL32
jmp reading
所以在这里我读过的输入长度254
的BUFOR
,但如果输入是什么样子的260个字节?
你可以阅读的500个字节的块输入文件,观察一下你不需要知道整个输入即可开始工作。 – fuz
好吧,我读了500字节,但接下来,我在哪里存储它或什么? – Frynio
使用一个静态缓冲区,并按照需要读取文件结尾的次数进行加载。像'while(!eof()){num_read = read(500);处理(num_read); }' – Tommylee2k