2013-07-21 1 views

답변

2

글쎄, 나는 당신이 묘사 한 것에 아무런 문제가 없다고 말할 것이다. 그러나 루프를 사용하여 배열을 초기화하는 것도 가능합니다. 루프를 사용

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 

여기에 대한 대답에서 발견 된 이후로 내가 가진


콜론 앞에있는 값. 이것은 아마도 당신이 찾고 있었던 것입니다.

2

가 없다 데이터가 C 코드와 일치하지 않습니다. 이 것보다 같은 초기화되지 않은 BSS 섹션에서 .data

mov [data], 1 
mov [data+1], 1 

. 이 길로 가려면 데이터를 0으로 만드십시오.

실제 리터럴 데이터를 삽입해도 아무런 문제가 없습니다. 단순한 50 개의 0은 아무 것도 아니지만, 유형이 아닌 내 텍스트 편집기의 힘을 사용합니다. 좀 더 무작위적인 데이터를 위해서, 바이너리 포맷을 코드에 삽입 할 수있는 짧은 프로그램을 작성했습니다.

+0

그래, 어쨌든 흥미 롭다는 사실을 모르는 채로 'mov'기능을 보지 못했습니다. – compski

+1

아, MIPS에서 실제로 '로드'및 '저장'(lw/lb 및 sw/sb)이라고 불리는 것을 볼 수 있습니다. 'mov'는 양방향에 대한 일반적인 인텔 opcode입니다. – usr2564301

+0

그건 그렇고, 어쩌면 귀하의 어셈블러는 데이터에 대한 .repeat 의사 opcode를 제공합니다. – usr2564301