Assembly 使用部件旋转阵列

Assembly 使用部件旋转阵列,assembly,x86,masm,irvine32,Assembly,X86,Masm,Irvine32,我在生成或运行程序时出错。我想循环数组并将第一个元素移动到末尾,基本上将索引中的每个元素向上移动1。 我知道我需要索引,但这对我来说是令人困惑的语法部分 请帮忙 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 ma

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

请帮忙

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

感谢您的帮助

我建议从用更高级的语言编写您想要的算法开始:

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;
}
void rotatarray(uint32\u t*arr,size\u t num)
{
uint32_t temp=arr[0];

对于(size_t i=0;i)您对要实现的目标的描述不清楚。您想如何排列数组?{0,1,2,3}->{1,2,3,0}(基本上是旋转数组)?是的!准确地说!我该怎么做?我的寄存器逻辑/语法太离谱了