【问题标题】:How to increment an array in x86 assembly?如何在 x86 程序集中增加数组?
【发布时间】:2013-05-06 17:44:31
【问题描述】:

如何在 for 循环中使用 x86 程序集递增数组。如果循环(使用 c++ 制作)看起来像:

for (int i = 0; i < limit; i++)

将数组中的值放入寄存器,然后将更改后的值放入单独的数组中。我将如何增加 x86 程序集中的每个数组(我知道 c++ 更简单,但它是练习工作),以便每次循环迭代使用的值并且放入数组中的值比上一次高一个?除了数组操作之外,循环中发生的细节并不重要,因为我想知道一般情况下如何做到这一点,而不是具体情况?

【问题讨论】:

  • 抱歉,它不是 C 版本(如果这就是您的意思)...它是汇编版本,最好以某种方式使用寄存器。谢谢

标签: c++ arrays assembly x86 character-arrays


【解决方案1】:

你在这里写的循环是:

   xor eax, eax   ; clear loop variable
   mov ebx, limit
loop:
   cmp eax, ebx
   je done

   inc eax
   jmp loop

done:
 ...

我真的不明白你所说的“增加一个数组”是什么意思。

如果你的意思是你想从一个数组中加载一些值,操作这个值并将结果存储在一个目标数组中,那么你应该考虑这个:

在 esi 中加载源数组的指针,在 edi 中加载目标指针。

 mov esi, offset array1
 mov edi, offset array2
 mov ebx, counter

 loop:
 mov eax, [esi]
 do what you need
 move [edi], eax

 inc esi
 inc edi

 dec ebx
 jne loop

【讨论】:

  • 谢谢,在我的程序中使用一些函数进行测试时,这确实可以完美运行。我只是想知道,“偏移”部分是做什么的?它的目的是什么……谷歌并没有真正提供任何相关的答案。
  • 它告诉汇编器你想加载数组的地址,而不是引用它。不确定它是否真的需要,距离我上次做一些实际的汇编编程已经有几天了,所以我有点生疏了。 :) 顺便说一句,如果你想从 C 函数调用函数或进行内联汇编,必须注意保存 edi 和 esi 并在退出汇编代码之前恢复它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 2013-11-18
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多