0
내가 어셈블리 프로그래밍에 새로운 절대적으로 브랜드이고 MIPS의 (C)에 다음과 같은 기능을 구현하기 위해 노력하고 있습니다 :MIPS 어셈블리 - 어레이?
int main()
{
int A[5]; // Empty memory region for 5 elements
int B[5] = {1,2,4,8,16};
int i;
for(i=0; i<5; i++) {
A[i] = B[i] - 1;
}
i--;
while(i >= 0) {
A[i]=(A[i]+B[i]) * 2;
i--;
}
}
지금까지 내가 무엇을 이것이다 :
main:
#Register Map
#i --> $s0
#A[0] --> $s1 address of start of A
#B[0] --> $s2 address of start of B
#A[i] --> $t0
#B[i] --> $t1
#(A[i] + B[i]) --> $t2
#((A[i] + B[i]) * 2) --> $t3
li $s0, 0 #Load immediate value 0 into i
#Begin for loop:
#for(i=0; i<5; i++){ A[i] = B[i] - 1; }
FOR_LOOP:
beq $s1, $t0, END_FOR #Branch if i == 5, go to END_FOR
addi $s0, $s0, 1 #Add immediate value 1 to i (i++)
j FOR_LOOP #Jump back to the top to loop again
END_FOR: #End for loop
addi $s0, $s0, -1 #Add immediate value -1 to i (i--)
#Begin while loop:
#while(i >= 0) { A[i] = (A[i] + B[i]) * 2; i--; }
WHILE_LOOP:
blt $s1, 0, END_WHILE #Branch END_WHILE when !(i > 0)
addi $s0, $s0, -1 #Add immediate value -1 to i (i--)
j WHILE_LOOP #Branch back to the while loop
END_WHILE:
sw $s0, i #Copy value in register to memory i
li $v0, 10 #Read integer from user, returned in $v0 (10=exit)
syscall #End program
#Store A, B in memory
.data
A: .word 0:5 #Allocate 20 consecutive bytes for 5-element integer word array A
B: .word 1, 2, 4, 8, 16 #Integer words stored in 5-element array B
i: .word 1 #Initial Value 1
내 주요
가 어떻게 배열의 요소에 액세스 것, 또는 할 어디 0으로 시작 : 질문 있습니다?
배열을 올바르게 선언 했습니까?
성취하려고하는 것에 대한 나의 등록 맵이 의미가 있습니까?
감사합니다.
은 내가 특별히 MIPS 어셈블리 언어에 대해 아무것도 몰라,하지만 일반적으로는 레지스터에 배열에 주소를 넣어, 다음 배열에 항목을 얻기 위해 오프셋 사용합니다. –