【发布时间】:2016-04-15 02:21:32
【问题描述】:
我在斐波那契数列计算的每个步骤中输出计算值时遇到问题,它输出计算值的相应 ascii 字符,如 ☺ ☻ ♥ ♣ 序列应该运行多少次取决于用户,但它是限制为 47:
org 100h
ask_for_input db " Please enter a number[1-47]: ","$"
inputNumber DB 0
conv DB 10D
newL DB 0AH,"$"
ask-again:
LEA DX, newL
MOV AH,9H
int 21H
; Ask for user input
LEA DX, ask_For_input
mov AH,9H
int 21H
; Gets user input
; First digit
MOV ah, 01H
int 21h
SUB AL, 30H
MUL conv
MOV inputNumber, AL
; Second Digit
MOV AH, 01H
int 21h
SUB AL, 30H
add inputNumber, AL
; Checks if number is above 47D
CMP inputNumber, 2FH
JNLE ask-again
; Checks if number is below 00D
CMP inputNumber, 00H
JLE ask-again
; Squence loop Counter
MOV CH, 00H
MOV CL, inputNumber
; Starting calculation
prev DB 01D
current DB 1D
Begin:
space DB " ","$"
LEA DX, space
MOV AH,9H
int 21H
; Print Current Number
LEA DX, current,"$"
mov AH,09H
int 21H
; Finds next number
MOV BL, prev
add current, BL
; Advances prev
MOV BL, current
SUB BL, prev
MOV prev, BL
Loop Begin
【问题讨论】:
-
绝对不要将数据放在代码执行路径中。把它们放在所有代码之后。就打印而言,
int 21h / ah=09h用于打印字符串。因此,您必须将您的号码转换为字符串。已经有很多关于如何做到这一点的问题,所以请搜索一下。 -
LEA DX, current,"$"应该做什么?那还能组装吗? -
@Michael 我实际上是汇编新手,这是我所看到的导师刚刚给出的关于将字符串输出到控制台的教科书
-
@Michael 你不将数据放在代码执行路径中是什么意思?
-
我的意思是混合代码和数据。 CPU 不知道区别,不会自动跳过数据。