有人可以告诉我如何用1字节长的缓冲区读取10个字节吗?
我的编程环境是ubuntu linux,emacs,assembly,at& t syntax
我可以读取文件并将读取数据保存到缓冲区(1byte)
但是如何读取文件的下一个字节并保存到缓冲区?
我编辑内容以粘贴我的努力
.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 :(得分:1)
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语法,但这应该让你开始。