在汇编程序中制作尾行 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
中的阶乘函数
我想问一下在 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
中的阶乘函数