他笑他自己 2017-11-13 14:39 采纳率: 66.7%
浏览 1610
已采纳

斐波契那数列,汇编问题,求找出问题。急急急

 .model small

.stack 

.data

total equ 10

count = 0
id    =0
Fibonacci  dw total dup(0)


.code

start: 

          mov ax,@data

            mov ds,ax

            mov ax,1

            mov bx,0

            mov cx,total

            mov count,0


while:      mov Fibonacci[count], ax

            mov id,ax

            add ax,bx

            mov bx,id

            inc count

            loop while

            mov ax,4ch

            int 21h

            end start

出现好几个错误,汇编新手,急用,谢谢。求告知问题所在。

  • 写回答

2条回答 默认 最新

  • 造轮使者 2017-11-13 15:11
    关注

    修改后的代码如下:

    .model small
    .stack 
    .data
        total equ 10
        count dw 0  ;count=0相当于宏替换,不是在内存中的,不能给值
        id    dw 0  ;id=0问题同count
        Fibonacci dw total dup(0)
    .code
    start: 
        mov ax,@data
        mov ds,ax
        mov ax,1
        mov bx,0
        mov cx,total
        ;mov count,0          ;变量不能做索引      
        mov si,0              ;因此,我们用si做索引
    again:
        mov Fibonacci[si],ax  ;变量不能做索引
        mov id,ax
        add ax,bx
        mov bx,id
        ;inc count
        inc si
        inc si                 ;dw为字长,索引增长2
        loop again
        ;mov ah,4ch或mov ax,4c00h才是退出
        ;原先的mov ax,4ch相当于mov al,4ch,没有选择功能号,无意义
        mov ax,4c00h                
        int 21h
    end start
    

    问题已在注释中说明,主要是语法错误,经检验算法正确,运行结果如下:
    运行情况

    1 1 2 3 5 8 13 21 34 55

    主要语法问题:

    • =equ都是宏替换,汇编器不为为二者开辟内存空间,向此处赋值不予通过
    • 某块内存不能作索引,可作索引的有bxsidi以及栈指针寄存器bpsp
    • 数组每个元素为字长,因此si作索引每次循环后加2
    • ah赋值4ch才是调用int 21h4ch号功能,而不是给ax赋值4ch
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败