Может кто-нибудь сказать мне, как читать 10 байтов с буфером длиной 1 байт? - PullRequest
0 голосов
/ 27 марта 2011

Может кто-нибудь сказать мне, как читать 10 байтов с буфером длиной 1 байт?

моя среда программирования - Ubuntu Linux, Emacs, сборка, синтаксис AT & T

Я могу прочитать файл и сохранить прочитанные данные в буфер (1 байт)

но как я могу прочитать следующие 1 байт файла и сохранить в буфер?

Я редактирую контент, чтобы вставить свои усилия

.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

1 Ответ

1 голос
/ 27 марта 2011

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

Вам все еще нужно настроить цикл для 10 символов и преобразовать его в синтаксис ATT, но это должно помочь вам начать.

...