微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 NASM 找到 5 的阶乘?

如何解决如何使用 NASM 找到 5 的阶乘?

我刚刚开始使用 tutorialspoint 的在线 Asm 编译器 (https://www.tutorialspoint.com/compile_assembly_online.php) 学习 NASM。

我的第一个热身是编写一个计算 5 阶乘的代码。这是我的尝试:

section .text
    global _start      
_start:     
    mov eax,1      ;a = 1
    mov ebx,1      ;f = 1
    int 0x80        ;call kernel
    
l1:
    mul ebx        ; f = f*a
    inc eax        ; a++
    cmp eax,5     ; if a<=5
    jle l1         ; jump to l1

section .data
msg db 'Factorial 5 is:',0xa    
len equ $ - msg 

它没有打印出任何值,谁能给我提示一下问题出在哪里?谢谢。

解决方法

我不会使用 mul 操作。在汇编中,除非别无选择,否则您要坚持简单并避免除法、乘法和浮点数。

5! = 5 * 4 * 3 * 2 = 5 * 3 * 2 * 2 * 2 = (5 * 2 + 5 ) * 2 * 2 * 2

所以,计算这个:

5 << 1
ADD 5
<< 3

无需循环或乘法。如果您打算使用循环(或者如果这就是课程的重点),通常在汇编中您将与零进行比较,因此您倒计时,而不是倒计时。

在汇编中使用调试器是必不可少的。您的代码存在一些结构性问题,调试器会发现这些问题。您不能只使用在线系统。您必须在计算机上设置调试器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。