在汇编程序中制作尾行 NASM

Making endline in assembler NASM

我想问一下在 NASM 汇编器中制作馈线的问题。此刻我们在大学里制作简单的程序。

之前想make endline的时候,只是声明了byte,把里面的“0ah”改写了。类似的东西:

section .text
global _start

_start:

mov eax,4
mov ebx,1
mov ecx,variable
mov edx,1

section .data
variable db 0ah

有效,但需要很长时间。所以我想直接将“0ah”写入寄存器,而不用初始化变量,这样:

section .text
global _start

_start:

mov eax,4
mov ebx,1
mov ecx,10 ;; hexadecimal 0ah
mov edx,1

但它不起作用。我会寻求帮助。

附言。如果有人有时间,请查看我之前关于寄存器工作的线程:Binary representation in processor's registers in Nasm

您可以将 .data 部分用于您想要使用的字符串值,例如 \n 或您想要使用的其他字符串,并使用 C 函数 printf 和 scanf 来处理 IO。 只需添加:

extern  printf, scanf

在您的 asm 文件的开头,然后:

section .data
   input_n db  'n = ',0
   number   db  '%d',0   
   endofline   db  10,0 

然后在 .text 部分像这样调用 printf:

mov eax,endofline
push    eax
call    printf
add esp,8

要编译,Makefile 如下:

main: main.o factorial.o 
    gcc -o main main.o facto.o

%.o: %.asm
    nasm -f elf $^

clean:
    rm -f a.out core *.o *~ main

其中 main.asm 将是您的主要 asm 程序,而 factorial.asm 和其他 cotaining 让我们说 nasm

中的阶乘函数