예를 들어, 내가 상응하는 MIPS로 C 코드를 번역하기 위해 노력하고있어 :MIPS 어셈블리에서 거대한 배열을 초기화하는 방법은 무엇입니까?
int a[50];
int i;
...
a[0] = 1;
a[1] = 1;
...
answers 중 하나를 보면, 할 수있는 것보다 다른 방법? 리터럴
.data
array: .word 1,1,...,0 (till the 50th zero)
예를 들어, 내가 상응하는 MIPS로 C 코드를 번역하기 위해 노력하고있어 :MIPS 어셈블리에서 거대한 배열을 초기화하는 방법은 무엇입니까?
int a[50];
int i;
...
a[0] = 1;
a[1] = 1;
...
answers 중 하나를 보면, 할 수있는 것보다 다른 방법? 리터럴
.data
array: .word 1,1,...,0 (till the 50th zero)
글쎄, 나는 당신이 묘사 한 것에 아무런 문제가 없다고 말할 것이다. 그러나 루프를 사용하여 배열을 초기화하는 것도 가능합니다. 루프를 사용
initTable:
la $t0 table #$t0 stores first address in table
addi $t1 $t0 196 #$t1 stores address of one past end (49 * 4)
addi $t2 $zero 1
intiTableLoop:
sw $t2 0($t0)
addi $t0 $t0 4
blt $t0 $t1 initTableLoop
sw $zero 0($t0)
jr $ra
물론 하나는 동적으로 할당 된 배열을 초기화 할 수있는 유일한 방법입니다. MIPS Data Directives 하나가 너무로 MIPS이 작업을 수행 할 수 있습니다 : 콜론 뒤의 숫자가 할당되어야 단어의 수를 나타냅니다
array: .word 1:49
.word 0
여기에 대한 대답에서 발견 된 이후로 내가 가진
콜론 앞에있는 값. 이것은 아마도 당신이 찾고 있었던 것입니다.
가 없다 데이터가 C 코드와 일치하지 않습니다. 이 것보다 같은 초기화되지 않은 BSS 섹션에서 .data
와
mov [data], 1
mov [data+1], 1
. 이 길로 가려면 데이터를 0으로 만드십시오.
실제 리터럴 데이터를 삽입해도 아무런 문제가 없습니다. 단순한 50 개의 0은 아무 것도 아니지만, 유형이 아닌 내 텍스트 편집기의 힘을 사용합니다. 좀 더 무작위적인 데이터를 위해서, 바이너리 포맷을 코드에 삽입 할 수있는 짧은 프로그램을 작성했습니다.
그래, 어쨌든 흥미 롭다는 사실을 모르는 채로 'mov'기능을 보지 못했습니다. – compski
아, MIPS에서 실제로 '로드'및 '저장'(lw/lb 및 sw/sb)이라고 불리는 것을 볼 수 있습니다. 'mov'는 양방향에 대한 일반적인 인텔 opcode입니다. – usr2564301
그건 그렇고, 어쩌면 귀하의 어셈블러는 데이터에 대한 .repeat 의사 opcode를 제공합니다. – usr2564301