Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编语言中的斐波那契_Assembly_X86_Dos - Fatal编程技术网

Assembly 汇编语言中的斐波那契

Assembly 汇编语言中的斐波那契,assembly,x86,dos,Assembly,X86,Dos,这不会显示错误,但当使用输入0运行时,它显示的输出是“0 1 b-” 其中,输出应类似于“0 1 1 2 3 5…”下面是代码 .model small .stack 100h .data cons dw 1 num db 0 result db 10 dup('$'),0ah,0dh .code input proc ;Input procedure Starts xor ax,ax xor bx,bx xor cx,cx xor dx,dx

这不会显示错误,但当使用输入0运行时,它显示的输出是“0 1 b-” 其中,输出应类似于“0 1 1 2 3 5…”下面是代码

.model small
.stack 100h
.data
cons dw 1
num db 0
result db 10 dup('$'),0ah,0dh
.code
input proc ;Input procedure Starts
      xor ax,ax
      xor bx,bx
      xor cx,cx
      xor dx,dx
      mov cx,-1
tag1:
      mov ah,01
      int 21h
      mov bl,al
      sub bx,48
      push bx
      inc cx
      cmp al,0dh
      jne tag1
      pop bx
tag2:
      pop bx
      mov ax,cons
      mul bx
      add num,al
      mov ax,cons
      mov dx,10
      mul dx
      mov cons,ax
      loop tag2
      ret
input endP  ; Input procedure Ends
fabio proc  ; Procedure to find out the sequence and print it
      mov ax,0
      mov bx,0
      mov cx,5
      mov dx,0
      mov al,num
      mov bl,num
      add bx,1
      add ax,48
      add bx,48
      mov dx,ax
      mov ah,02
      int 21h    ; printing 1 of the 2 first numbers
      mov dx,0
      mov dx,bx
      mov ah,02
      int 21h
      mov al,num
      mov bl,num
      add bx,1
tag4:
      add al,bl ; the problem lies from somewhere here to the code below
      mov num,al
      mov bl,al
      add al,1
      mov dx,0
      add num,48
      mov dl,num
      mov ah,02
      int 21h
      loop tag4
      ret
fabio endP
proc main
      mov ax,@data
      mov ds,ax
      call input
      call fabio
      mov ax,4c00h
      int 21h
end main
main endP

根据拉尔夫·布朗的中断列表();由于“未正式记录”的行为,DOS“将字符写入标准输出”函数返回AL中的最后一个字符输出

如果你没有预料到的话,这会破坏你使用AL的任何用途


注意:据我所知,这就是您正在寻找的bug;但是当这个bug被修复后,除了“不理想”(多余的指令等)之外,由于其他bug,您的代码仍然是错误的。如果您的代码是用汇编语言编写的(例如,带有注释等),而不是用无意义的语言编写的(带有神奇的值,没有注释),那么大多数其他问题都不会出现(您在编写原始代码时会注意到并修复其中的大多数问题),我会指出剩下的问题。

学习使用调试器,使用更好的标签名称并添加注释。