【发布时间】:2013-11-29 17:50:56
【问题描述】:
我在尝试打开文件并从中读取时遇到问题。系统会提示用户输入文件名。
程序编译没有错误,但不显示任何内容。当我在.data 部分对文件名进行硬编码时,它运行良好,但是当我从用户那里获取文件名时,它无法读取文件。我在哪里做错了?我找不到任何错误。
使用硬编码名称输出:welcome
用户输入姓名时输出:���
这是我的代码:
节 .data promptUsr db '输入文件名:',0xA,0xD lenPrompt equ $-promptUsr 信息数据库 1 ;file_name db 'data.txt' (注意:使用硬编码名称时有效) .bss 节 fd_in resb 1 缓冲资源 7 文件名 resb 20 部分 .text 全局_start _开始: ;提示用户输入文件名 mov eax,4 ;sys_write mov ebx,1 ;标准输出 mov ecx,promptUsr mov edx,lenPrompt 整数 0x80 ;读取文件名(注意:当用户输入相同的名称'data.txt'时,这是输出:���) 移动 eax,3 mov ebx,2 mov ecx,file_name ;(注意:尝试使用 'dword[file_name]',不起作用) 移动 edx,20 整数 0x80 ;打开文件 移动 eax,5 mov ebx,file_name ;(注意:也尝试使用 'dword[file_name]',也不起作用) mov ecx,2 ;读 n 写 mov edx,7777h ;所有文件权限 整数 0x80 mov [fd_in],eax ;读取文件的 7 个字节 移动 eax,3 mov ebx,[fd_in] mov ecx,缓冲区 移动 edx,7 整数 0x80 ;关闭文件 移动 eax,6 整数 0x80 ;打印出读过的内容 移动 eax,4 移动 ebx,1 mov ecx,缓冲区 移动 edx,7 整数 0x80 ;结束程序 移动 eax,1 整数 0x80【问题讨论】:
-
也很想知道如何在打开文件之前先检查文件是否存在。谢谢任何人
标签: linux file assembly x86 nasm