我有一个名为customer.txt
的文件。
customer.txt
amin jamal
我需要一个示例代码,它从amin
文件中获取字符串输入(customer.txt
)
并使用c printf()
函数打印它。
我的代码是
section .bss
s: resb 100
section .data
fmt: db "%s",10,0
name: db "customer.txt",0
mode: db "r+",0
fp: dq 0
section .text
global main
extern fopen
extern fgets
extern printf
main:
push rbp
mov rdi , name;
mov rsi , mode
call fopen
mov [fp] , rax
mov rdi , s
mov rsi , 7
mov rdx , [fp]
call fgets
mov rdi , fmt
mov rsi , s
call printf
pop rbp
ret
这不能使用完整的字符串。
我正在使用NASM汇编程序。我的操作系统是64位Linux。
我使用nasm命令进行汇编,编译和运行。
nasm -f elf64 file.asm
gcc file.o
./a.out
结果 -
amin j
答案 0 :(得分:0)
您的代码适用于我。你能添加一些错误处理吗?我尝试了你的代码,它对我来说很好。
section .bss
s : resb 100
section .data
fmt : db "%s",10,0
name : db "customer.txt",0
mode : db "r+",0
err1 : db "Failed To Open File", 10, 0
err2 : db "Failed To Read File", 10, 0
section .text
extern fopen
extern fgets
extern printf
global main
main:
push rbp
; Open the file for reading
mov rdi , name
mov rsi , mode
call fopen
cmp rax, 0 ; Check for errors
je .errfopen
; read first 7 characters from the open file
mov rdi , s
mov rsi , 7
mov rdx , rax ; File Pointer
call fgets
cmp rax, 0 ; Check for errors
je .errfgets
mov rdi, fmt
mov rsi, s
call printf
pop rbp
ret
.errfopen:
mov rdi, err1
call printf
pop rbp
ret
.errfgets:
mov rdi, err2
call printf
pop rbp
ret