使用Assembly旋转数组

时间:2014-10-02 00:00:28

标签: assembly x86 masm irvine32

我在创建或运行程序时遇到错误。我想循环数组并将第一个元素移动到结尾,并基本上将每个元素在索引中向上移动一个。 我知道我需要索引,但这对我来说是令人困惑的语法部分。

请帮忙!

INCLUDE Irvine32.inc

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data
array dword 10h,20h,30h,40h
arraySize dword lengthof array

.code
main proc

  mov ecx, 0

  loop_start:
    cmp ecx, 7
    jge loop_end

    mov eax, array[ecx*4]
    ; Use Irvine's WriteHex to display value in register eax
    call WriteHex
    call Crlf
    add ecx, 1
    jmp loop_start
  loop_end:

  INVOKE  ExitProcess, 0
main endp
end main

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我建议首先用更高级别的语言编写您想要的算法:

void rotateArray(uint32_t *arr, size_t num)
{
  uint32_t temp = arr[0];
  for (size_t i = 0; i<num-1; i++)   //loop is essentially a memmove()
    {
      arr[i] = arr[i+1];
    }
  arr[num-1] = temp;
  return;
}

这应该很容易编译,即使对于 meatbag 人来说也是如此。