汇编语言中的斐波纳契语

时间:2014-04-04 00:03:23

标签: assembly x86 dos

这显示没有错误但是当使用输入0运行时,它显示的输出是“0 1 1 b - ” 其中s输出应该像“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

1 个答案:

答案 0 :(得分:0)

根据拉尔夫·布朗的中断名单(http://www.ctyme.com/intr/rb-2554.htm);由于“未正式记录”行为,DOS“将字符写入STDOUT”函数返回AL中的最后一个字符输出。

如果您不期待它,这会破坏您使用AL的任何内容。

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