gpt4 book ai didi

linux - 为什么此汇编代码没有再次读取相同的字节,而是返回文件结尾?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:44 25 4
gpt4 key购买 nike

这是我的代码:

section .bss
bufflen equ 1024
buff: resb bufflen

whatread: resb 8

section .data

section .text

global main

main:
nop
read:
mov eax,3 ; Specify sys_read
mov ebx,0 ; Specify standard input
mov ecx,buff ; Where to read to...
mov edx,bufflen ; How long to read
int 80h ; Tell linux to do its magic

; Eax currently has the return value from linux system call..
add eax, 30h ; Convert number to ASCII digit
mov [whatread],eax ; Store how many byte reads info to memory at loc whatread

mov eax,4 ; Specify sys_write
mov ebx,1 ; Specify standart output
mov ecx,whatread ; Get the address of whatread in ecx
mov edx,4 ; number of bytes to be written
int 80h ; Tell linux to do its work

mov eax,3 ; Specify sys_read
mov ebx,0 ; Specify standard input
mov ecx,buff ; Where to read to...
mov edx,bufflen ; How long to read
int 80h ; Tell linux to do its magic

; Eax currently has the return value from linux system call..
add eax, 30h ; Convert number to ASCII digit
mov [whatread],eax ; Store how many byte reads info to memory at loc whatread

mov eax,4 ; Specify sys_write
mov ebx,1 ; Specify standart output
mov ecx,whatread ; Get the address of whatread in ecx
mov edx,4 ; number of bytes to be written
int 80h ; Tell linux to do its work

mov eax, 1;
mov ebx, 0;
int 80h

我有一个名为 all.txt 的文件,其内容为:

61 62 63 0A 64 65 66 0A (abc - new line - def - new line)

这是一个示例运行:

koray@koray-VirtualBox:~/asm/buffasm$ ./buff < all.txt
80koray@koray-VirtualBox:~/asm/buffasm$

因此第一次读取代码会尝试从文件中读取 1024 字节。文件本身有 8 个字节。然后它在控制台中打印 8,我猜这很好。但是,为什么它会打印“0”,这意味着文件结束呢?我希望它再次读取相同的 8 个字节?为什么它要尝试读取接下来的 1024 个字节?

最佳答案

程序没有逻辑再次读取相同的字节。它们已被读取并位于缓冲区中。输入缓冲区(由重定向文件填充)为空,因此无法读取更多字节。这就是 sys_read 以 0 读取字节结束的原因。

如果它不是 STDIN,而是一个真实的文件(当然,之前由 sys_open 打开),则逻辑相同。

顺便说一句,返回的计数为0实际上就是所谓的EOF。

关于linux - 为什么此汇编代码没有再次读取相同的字节,而是返回文件结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com