-1

アキュムレータなしで記述されるようにするには、mov 関数を使用してこのコードを再設計する必要があります。これが何を意味するのか、またはどのように行うのかわかりません。誰か助けてくれませんか?

array1 DWORD 21H,22H,23H,24H,25H
array2 DWORD 31H,32H,33H,34H,35H

resultLbl1 BYTE "Array 1 values are",0
resultLbl2 BYTE "Array1 value1 is",0
resultLbl3 BYTE "Array1 value2 is",0
resultLbl4 BYTE "Array1 value3 is",0
resultLbl5 BYTE "Array1 value4 is",0
resultLbl6 BYTE "Array1 value5 is",0
string1 BYTE 40 DUP (?)
count DWORD 0

.CODE
_MainProc PROC

       ;add 2 to array1 elements

       mov eax, array1
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+4
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+8
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+12
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+16
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1
4

2 に答える 2

2

イベントのありそうなシナリオを提案させてください...

先生は配列内の要素を表示するコードを教えてくれました。配列の要素に 2 を加算するコードを作成するように求められました。配列内の要素をまったく変更せず、配列から読み取った値に 2 を追加しただけです (表示される直前)。

先生はこれを見て、配列の値をまったく変更していないと説明する代わりに、彼らは、「アキュムレータ」(レジスタ)を使用せずにそれを行うように指示しました。これにより、実際に配列を変更する命令を使用することが強制されることを期待しています(何らかの理由でレジスタを使用する必要はありません)。

add array1,2基本的に、あなたの先生はあなたにadd array1+4,2、 などをしてほしいと思っていると思います。注: 私は正しい構文が である NASM を使用していますがadd dword [array1+4],2、あなたが使用しているアセンブラーの構文はわかりません (「最適な推測" 構文が間違っている可能性があります)。

また、各要素に 2 を加算してから各要素から 2 を減算する場合にも注意してください。その後、各要素には元の値が含まれることになります。

于 2014-02-13T06:34:54.790 に答える