Assembly 汇编语言中的斐波那契
这不会显示错误,但当使用输入0运行时,它显示的输出是“0 1 b-” 其中,输出应类似于“0 1 1 2 3 5…”下面是代码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
.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,您的代码仍然是错误的。如果您的代码是用汇编语言编写的(例如,带有注释等),而不是用无意义的语言编写的(带有神奇的值,没有注释),那么大多数其他问题都不会出现(您在编写原始代码时会注意到并修复其中的大多数问题),我会指出剩下的问题。学习使用调试器,使用更好的标签名称并添加注释。