他笑他自己 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条)

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程