汇编语言的总和程序

时间:2017-05-14 23:59:26

标签: visual-studio recursion assembly

我一直在努力学习汇编语言,而且我还是很陌生。 我现在正在学习的任务是简单的递归,我在完成任务时遇到了一些麻烦。

我的任务基本上使用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

以下是我遇到的主要问题:

  1. Visual Studio声明第1行上有一个错误,说"文件中的字符无效"代码a2044。我找不到任何解决方案如何解决这个问题。
    1. 我遇到了递归算法的问题并回忆了mehtod,最后发回结果值
    2. 添加正确的答案号码,例如使用esp和地址长度。
  2. 如果有人有任何解决方案,或者我做错了什么例子,这将是惊人的。 谢谢!

0 个答案:

没有答案