2011-03-27 30 views
0

有人可以告诉我如何读取10字节长1字节的缓冲区?有人可以告诉我如何用1字节长的缓冲区读取10个字节?

我的编程环境是Ubuntu Linux操作系统,emacs的,大会在& T语法

我可以读取文件并保存读取数据缓冲(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 
+0

使用C会不会更容易?或者失败了,从汇编代码中调用'read()'? – 2011-03-27 06:54:16

+0

感谢您的回复。 但我想在汇编中实现。 ,因为它很好理解它是如何工作的 – 2011-03-27 06:56:30

+0

为什么你不先努力? – 2011-03-27 07:00:29

回答

1

[email protected]:/tmp$ nasm -f elf -o test.o test.nasm 
[email protected]:/tmp$ ld -o test test.o 
[email protected]:/tmp$ ./test 
0 # this is what I typed 
[email protected]:/tmp$ 
[email protected]:/tmp$ echo $? 
48 
[email protected]:/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语法,但是这应该让你开始。

+0

谢谢大家。我不知道的是当我想在文件中间开始读取时将索引(偏移量)放到哪里。用于系统调用号的eax,用于文件描述符的ebx,用于缓冲区地址的ecx,用于缓冲区大小的edx。数据的第一个字节 - > 1个字节的缓冲区。没关系。但数据的第二个字节 - > 1个字节的缓冲区,如何? – 2011-03-27 09:17:36

+0

哦对不起,这是我的输入文件错误。当我尝试上面的代码粘贴时,它读取第二个字节的数据!无论如何,谢谢你的帮助 – 2011-03-27 10:33:06

相关问题