MIPS ISA를 배우려고합니다. MIPS에서이 기능을 수행하려는 경우 :MIPS 어셈블리의 배열에서 두 요소 교환하기
A[2*i]=A[2*k+j];
어떻게해야합니까? 내가 읽을 수있는 다른 모든 콘텐츠, 즉 내가 이런 종류의 문제를 해결하는 방법을 읽을 수있는 링크에 감사드립니다.
MIPS ISA를 배우려고합니다. MIPS에서이 기능을 수행하려는 경우 :MIPS 어셈블리의 배열에서 두 요소 교환하기
A[2*i]=A[2*k+j];
어떻게해야합니까? 내가 읽을 수있는 다른 모든 콘텐츠, 즉 내가 이런 종류의 문제를 해결하는 방법을 읽을 수있는 링크에 감사드립니다.
우리는 두 부분이 분해 할 수
나는 (에헴) # 1을 다룰 예정입니다.
# 1 & # 3을 계산하는 방법이나 알고있는 것으로 알고 있다고 가정합니다. # 2는 간단한 연산과 관련이 있습니다. (당신이 어떻게 표현했는지, j & k가 표현 되었기 때문에, 나는 거기에서 너무 많이 도울 수 없다).
마지막 단계는 인덱스에 배열 요소의 크기를 곱하는 것입니다. 이 배열의 시작 부분에서 원하는 요소의 오프셋을 제공합니다. 배열의 시작 주소에 해당 주소를 추가하면 요소의 주소가 있습니다.
P. 번역하려는 코드는 두 요소를 바꿔 쓰지 않습니다. 그것은 하나를 다른 것으로 복사합니다.
오래되었지만 가까운 수치 일 수 있습니다. 스스로 시도하지 않고 어셈블리 언어를 배울 수 있습니다. 더 많은 예제를 만들고 코드를 작성하십시오. 더 많은 학습 자료 here.
# int calc(int *A, int i, int j, int k)
# {
# return A[2 * i] = A[2 * k + j];
# }
# Args: a0=A, a1=i, a1=j, a3=k Rtn: v0
.text
.set nomacro
.set noreorder
.global calc
.ent calc
calc:
sll $t0, $a1, 3 ; t0 = i * 8
sll $t1, $a3, 1 ; t1 = k * 2
add $t1, $t1, $a1 ; t1 += j
sll $t1, $t1, 2 ; t1 *= 4
add $t0, $t0, $a0 ; t0 += A
add $t1, $t1, $a0 ; t1 += A
lw $v0, 0($t1) ; r = A[4 * (2 * k + j)]
sw $v0, 0($t0) ; A[4 * (2 * i)] = r
.end calc
.global은 .globl이어야합니다. – Wiz
감사합니다. 여기 예제에서 구문을 사용했습니다. http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf 아마 다른 어셈블러가 다른 키워드를 사용했습니다. – Gene