could somebody tell me how to read 10 bytes with 1 byte long buffer?开发者_如何学C
my programming environment is ubuntu linux, emacs, assembly, at&t syntax
I can read file and save read data to buffer(1byte)
but how can I read next 1 byte of file and save to buffer?
I edit the content to paste my effort
.section .data
.section .bss
.lcomm buffer,1
.section .text
.global _start
_start:
movl %esp,%ebp
subl $8,%esp
#8(%ebp) is 2nd arg == input
#12(%ebp) is 3rd arg == output
#open,read,open,write,close
movl $5,%eax
movl 8(%ebp),%ebx
movl $0,%ecx
movl $0666,%edx
int $0x80
#%eax contains input's fd
#movl to first local var
movl %eax,-4(%ebp)
movl $5,%eax
movl 12(%ebp),%ebx
movl $03101,%ecx
movl $0666,%edx
int $0x80
#eax contains output's fd
#movl to second local var
movl %eax,-12(%ebp)
#read 1 byte from file 1st byte of data
movl $3,%eax
movl -4(%ebp),%ebx
movl $buffer,%ecx
movl $1,%edx
int $0x80
#read 1 byte from file I expect 2nd byte of data
movl $3,%eax
movl -4(%ebp),%ebx
movl $buffer,%ecx
movl $1,%edx
int $0x80
#buffer contains 1 byte of file
subb $48, buffer
movl buffer,%ebx
movl $1,%eax
int $0x80
jcomeau@intrepid:/tmp$ nasm -f elf -o test.o test.nasm
jcomeau@intrepid:/tmp$ ld -o test test.o
jcomeau@intrepid:/tmp$ ./test
0 # this is what I typed
jcomeau@intrepid:/tmp$
jcomeau@intrepid:/tmp$ echo $?
48
jcomeau@intrepid:/tmp$ cat test.nasm
global _start
_start:
push eax ; for buffer
mov ecx, esp
mov edx, 1 ; # bytes to read
mov ebx, 0 ; stdin
mov eax, 3 ; read
int 0x80
mov ebx, [ecx] ; what we just read
mov eax, 1 ; exit
int 0x80
you still need to set up the loop for your 10 chars and convert to ATT syntax, but this ought to get you started.
精彩评论