所以我必須做這樣的練習: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