装配 - 如何正确存储用户输入并打印它?

时间:2017-11-30 21:27:41

标签: linux assembly scanf nasm x86-64

我刚刚开始学习asm,我正在尝试创建一个程序,要求用户输入(N)并打印从1到N的数字。 问题是,当我尝试打印我从scanf获得的值时,如果它不起作用。循环只打印&#34 ;;"。

这是我到目前为止所拥有的:

section .data
   msg db "Enter a number: "
   fmt db "%d", 0

section .bss
   N resb 1

section .text
extern scanf

global main

main:

   mov rax, 1
   mov rdi, 1
   mov rsi, msg
   mov rdx, 15
   syscall

   mov rax, 0
   mov rdi, fmt
   mov rsi, N
   call scanf

这是我尝试打印从scanf获得的数字N

   mov rax, 1
   mov rdi, 1
   mov rsi, N
   mov rdx, 1
   syscall

循环

   mov rcx, 0
loop:
   inc rcx

   mov rax, 1
   mov rdi, 1
   mov rsi, rcx
   mov rdx, 1
   syscall

   cmp rcx,[N]
jne loop    

关闭程序

   mov rax,60
   mov rdi,0
   syscall

这是我编译的方式:

 nasm -f elf64 -o program.o program.asm
 gcc -o program program.o

0 个答案:

没有答案