x86 NASM程序集中的阶乘函数出错

时间:2019-04-22 17:58:19

标签: ubuntu assembly x86 nasm factorial

我正在使用x86 NASM学习汇编语言。我想编写一个简单的递归阶乘函数,使用EAX寄存器将一个参数传递给该函数。之后,我想在屏幕上打印结果,但是什么也没有发生。坐在电脑上凝视着我之后,我不知道我的代码有什么问题。你们可以帮助新手解决这个问题吗?

我知道阶乘函数的序言和结尾不是必需的,因为我没有使用堆栈,但是对我来说代码更易读;)

这是我的代码:

urlpatterns = [
    path('player/<str:playerid>/', views.player_info, name='player_info'),

1 个答案:

答案 0 :(得分:1)

C库-我猜您使用的是GCC中的库-无法立即输出printf的结果。而是将其存储在称为缓冲区的单独内存中,并偶然输出。在这种情况下,程序将以int 0x80/eax=1结束的速度比刷新缓冲区的速度快。您可以插入手动刷新:

...
extern fflush
...
push 0
call fflush
add esp, 4
...

最好的解决方案是使用C exit函数。替换

mov ebx,0
mov eax,1
int 0x80

作者

push 0
call exit

或简单地替换为

ret

在这种情况下,您不需要手动刷新缓冲区。这将exitret为您服务。

BTW:LF(换行符)编码为10个十进制和0x0A十六进制。