我一直在努力学习汇编语言,而且我还是很陌生。 我现在正在学习的任务是简单的递归,我在完成任务时遇到了一些麻烦。
我的任务基本上使用Microsoft Visual Studio使下面的程序成为汇编语言。 我取得了一些进展,但是我遇到了一些问题而且我被困住了。
我试图复制的Java程序:
public static void main(String[] args)
{
Scanner keyboard=new Scanner(System.in);
int n=0, answer=0; //line 7
System.out.print("Enter positive integer: "); //line 8
n=keyboard.nextInt(); //line 9
answer=sum(n); //line 10
System.out.println("Sum is "+answer); //line 11
}
public static int sum(int n)
{
if (n==1) return 1; //line 15
else return n+sum(n-1); //line 16
}
这是我到目前为止的装配程序。
.586
.MODEL FLAT
INCLUDE io.h
.STACK 4096
.DATA
n DWORD 0
answer DWORD 0
prompt1 BYTE "Enter a positive integer",0
inputBuf BYTE 20 DUP (?)
prompt2 BYTE "Sum is ",0
.CODE
main PROC
input prompt1, inputBuf, 20 ;read characters coming in
atod inputBuf ;convert to Integers
mov n, eax ; n= eax (numner input)
push n ; 1st arguement
call sum ;sum(int n)
add esp, 8 ;remove parameter from stack
dtoa result, eax ;convert
output prompt2, result ;Sum label and result
mov eax, 0
ret
main ENDP
sum PROC
push ebp ;save location of caller's act record
mov ebp, esp ;establish a stack frame
push eax ;save register eax, used by sum
cmp eax, 1
je L1 ;jump if n==1
jne recursiveCase ;jump to recursive case if n!=1
pop ebx
pop ebp
ret
recursiveCase:
mov eax, [ebp+8] ;eax = n
dec eax ;n-1
call sum ;recursive call sum(n-1)
add esp 8
mov ebx, [ebp+8]
END
以下是我遇到的主要问题:
如果有人有任何解决方案,或者我做错了什么例子,这将是惊人的。 谢谢!