这显示没有错误但是当使用输入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
答案 0 :(得分:0)
根据拉尔夫·布朗的中断名单(http://www.ctyme.com/intr/rb-2554.htm);由于“未正式记录”行为,DOS“将字符写入STDOUT”函数返回AL中的最后一个字符输出。
如果您不期待它,这会破坏您使用AL的任何内容。
注意:据我所知,这是你正在寻找的错误;但是当修复这个错误时,除了“不太理想”(多余的指令等)之外,由于其他错误,你的代码仍然会出错。如果你的代码是用汇编语言编写的(例如带有注释等),而不是用废话写的(带有魔术值和没有注释),那么大多数其他问题都不存在(你会注意到并修复其中的大多数问题)写原始代码)我会指出任何剩下的。