写没有累加器的mov函数

时间:2014-02-13 05:30:53

标签: assembly x86 accumulator

我必须使用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

2 个答案:

答案 0 :(得分:0)

让我提出一个可能的事件情景......

你的老师给你代码来显示数组中的元素;并要求你编写代码,在数组中添加2个元素。您根本没有修改数组中的元素,只将2添加到从数组中读取的值(在它们显示之前)。

你的老师看到了这一点,而不是解释你根本没有修改数组中的值;他们告诉你不使用“累加器”(寄存器)这样做,希望这会强制你使用实际修改数组的指令(并且不会因任何原因使用任何寄存器)。 / p>

基本上,我认为您的老师希望您执行add array1,2add array1+4,2等。注意:我使用NASM,其中正确的语法为add dword [array1+4],2,而我不知道你碰巧使用哪个汇编程序的语法(我提供了一个可能错误的“最佳猜测”语法。)

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

答案 1 :(得分:-1)

mov A, B

相当于

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

您也可以这样做

xor A, A
xor A, B

另一种方式

lea A, [B + 0]