我是NASM和大会的新手。我试图从nasm调用fscanf,它失败了..请告诉我,我在哪里弄错了? (我使用的是ubuntu 14.04和Intel处理器)
extern fscanf
extern fopen
SECTION .bss
n: resq 1
fi: resq 1
SECTION .data
input1: db "%d", 0
fi_name: db "input.txt", 0
mode_read: db "r", 0
SECTION .text
global main
main:
push rbp
mov rdi, fi_name
mov rsi, mode_read
call fopen
mov qword [fi], rax
;fscanf(fi, input1, var)
mov rdi, fi
mov rsi, input1
mov rdx, n
call fscanf ;<---program dies here
pop rbp
ret
答案 0 :(得分:2)
在我看来,您几乎是对的。我注意到的唯一问题是您需要在调用 fi
之前将 fscanf
括起来。事实上,我添加了以下几行:
extern printf ; at top
fmt: db "Result: %d", 10, 0 ; in .data
; following the fscanf call
mov rdi, fmt
mov rsi, [n] ; the integer parsed
xor eax, eax ; required by printf
call printf
这会成功扫描并打印 input.txt
中的单个整数。
将您的代码更改为以下内容:
;fscanf(fi, input1, var)
mov rdi, [fi] ; <- Needs square brackets to derefrence.
mov rsi, input1
mov rdx, n
call fscanf