0

アセンブリコードを書くのは初めてで、ループを使用して配列の値を出力するのに問題があります。私が持っているコードは、配列の値ではなく、カウンターの値を出力します。誰かが私が間違っていることを説明できますか?また、配列の先頭を指すにはどうすればよいですか?別のレジスタを使用してみましたが、何も機能していないようです。私の教授は私がこのようにそれをするように頼みます(それが非効率的であると思われる場合):

           .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    

任意の提案をいただければ幸いです。

4

1 に答える 1

2
mov    [arr+edi], ecx

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

于 2012-05-05T19:39:09.110 に答える