2012-05-05 12 views
0

アセンブリコードの作成に新しく、ループを使用して配列の値を表示するのに問題があります。私は、カウンタの値と配列の値ではなく、誰かが私が間違っていることを説明してください、また、配列の先頭を指し示すことができますか?私は別のレジスタを使用しようとしましたが、何も動作していないようです。 (それは非効率的と思われる場合は)私の教授は、私はそれをこのように行うことを要求します:MASMアセンブリの配列の値の印刷

  .386 
      .model flat 
ExitProcess PROTO NEAR32 stdcall, dwExitCode:dword 
Include io.h 
cr   equ 0DH 
Lf   equ 0AH 
      .stack 4096 
      .data 
newline byte CR, LF, 0 
whitespace byte 32,32,0  
arr  dword 10 dup(?) 
n   dword 2 
string  byte 40 dup(?) 
prompt  byte "Please enter a value: ", 0 
origArr byte "Original Array", 0 
      .code 
_start: 
      mov ecx,n   ; number of values in the array 
      lea ebx,arr  ; address of the array 
      sub edi, edi 
top:  cmp ecx, 0 
      je  done 
      output prompt 
      input string, 40 
      atod string 
      mov [arr+edi], ecx 
      add edi, 4 
      loop top 
done:  output origArr 
      mov ecx, n 
      call myproc 

     INVOKE ExitProcess, 0 

PUBLIC _start 
myproc proc near32 
     .data 
val_str byte 11 dup(?), 0 
     .code 
     push eax 
     push edi 
     push ecx 
     sub edi,edi    ; index register 
top2: mov eax, [ebx+edi] 
     dtoa val_str, eax 
     output val_str 
     add edi,4    ; modify esi rather than ebx 
     loop top2 
     pop ecx 
     pop edi 
     pop eax 
     ret 
myproc endp 

     END  

任意の提案が高く評価されています。

答えて

2
mov [arr+edi], ecx 

返り値atodではなく、ループカウンタを格納しています。

+0

ありがとう、とてもシンプルです - 私はそれを見逃して怒っています。 –