如何解决如何使用 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 举报,一经查实,本站将立刻删除。