如何使用8086汇编语言打印斐波那契数列的前20项?
你的代码核心问题是缺失了斐波那契迭代过程中前序数值的更新逻辑,当前循环仅计算了新的数值,没有更新存储前一项的bx寄存器,导致后续计算的序列完全错误。
问题说明
斐波那契数列的迭代规则为f(n+2) = f(n+1) + f(n),你的代码里用ax存储当前要打印的f(n),bx存储下一项f(n+1),打印完当前项后,需要把bx的值赋给ax作为下一轮要打印的数值,再把新计算出的f(n+2)赋值给bx,才能保证迭代逻辑正确。
修正后代码
以下是逻辑更清晰的实现版本:
org 100h mov ax, 0 ; 存储当前要打印的f(n),初始为f(0)=0 mov bx, 1 ; 存储下一项f(n+1),初始为f(1)=1 mov cx, 20 ; 循环次数,输出前20项 start: call print_num ; 打印当前项f(n) PRINTN ; 输出换行 mov dx, ax ; 暂存当前f(n)的值 mov ax, bx ; 将下一项f(n+1)放入ax,作为下一轮要打印的数值 add bx, dx ; 计算新的下一项f(n+2) = f(n+1) + f(n),存入bx loop start mov ah, 0 int 16h ret include magshimim.inc
内容的提问来源于stack exchange,提问作者roee attias
相关产品推荐
相关产品推荐

