开发者

could somebody tell me how to read 10 bytes with 1 byte long buffer?

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜