Assembly 使用部件旋转阵列
我在生成或运行程序时出错。我想循环数组并将第一个元素移动到末尾,基本上将索引中的每个元素向上移动1。 我知道我需要索引,但这对我来说是令人困惑的语法部分 请帮忙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
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}(基本上是旋转数组)?是的!准确地说!我该怎么做?我的寄存器逻辑/语法太离谱了