-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,2add array1+4,2等等。注意:我使用 NASM 正确的语法add dword [array1+4],2,并且我不知道您碰巧使用的任何汇编程序的语法(我提供了一个“最好的猜测”语法可能是错误的)。

另请注意,如果您将每个元素加 2,然后从每个元素中减去 2;那么每个元素最终都会包含其原始值。

于 2014-02-13T06:34:54.790 回答
-1
mov A, B

相当于

xor A, A
add A, B; // or: or A, B

你也可以这样做

xor A, A
xor A, B

另一种方式

lea A, [B + 0]
于 2014-02-13T06:02:25.967 回答