斐波契那数列,汇编问题,求找出问题。急急急
 .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个回答

修改后的代码如下:

.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
weixin_37736913
reslism 额,谢谢。
2 年多之前 回复
jinhangdev
造轮使者 回复reslism: 缺少输出是因为汇编语言的输入输出模块需要你自行编写,你可以自己设计一个子程序把某块内存中的数据以10进制或者16进制显示出来
2 年多之前 回复
weixin_37736913
reslism 我运行了一下。为啥没有输出呢。是缺少什么吗。
2 年多之前 回复
weixin_37736913
reslism 感谢大佬
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐