2012-08-07 5 views
-4
I는 MIPS에서 다음 구현 시도하고

을에 2 차원 어레이로 고투는조립체

X는 번호를 배정 밀도 부동 소수점의 2 차원 배열 (매트릭스)이고, Y는 (32)의 2 차원 배열이며 비트 정수. 는 코드를 작성하는 노력

Z= (X[i][j] + Y[i][j]) 

지금 내가 MIPS 이러한 배열을 선언하는 방법을 잘 모릅니다 다음 사항에이를 구현하는 방법을 알고

을 내가 메인 프로그램의 일부를 작성한 지금까지하지만 그나마 .data 섹션

.data 

.text 
.main: 
mtc1 $0, $f0 
cvt.d.w $f0, $f0 
    # $a1 is the address of the first element of x 
    l.a $r1, $a1 
    # $a2 is the address of the first element of y 
    l.a $r2, $a2 
    addi $r4, $0, 30 
    add.d $f8, $f0, $f0 
+1

어셈블리 설명서를 찾고 읽는 방법은 어떻습니까? –

+0

가능한 중복 [MIPS 어셈블리에서 이러한 2D 배열을 선언 할 수 있습니까?] (http://stackoverflow.com/questions/11828209/is-it-possible-to-declare-such-2d-arrays-in-mips -assembly) –

+0

@AlexeyFrunze - 알았지 만 어떤 정보도 찾을 수 없다. –

답변

0

2D 어레이가 그렇게 나쁘지 않습니다. 트릭은 한 번에 하나의 차원을 처리하는 것입니다. 각 요소의 크기와 각 차원의 크기가 있다면 수학은 간단합니다. 행 인덱스 (0부터 시작), 행 크기 및 요소 크기 (바이트)의 제품을 기본 주소에 추가하십시오. 이것은 원하는 행의 기본 주소가됩니다. 열 인덱스와 요소 크기의 결과를 추가하면 요소의 주소가 있습니다.

데이터 세그먼트의 경우 배열의 총 크기 만 예약하면됩니다. 예를 들어 3x4 공간이 필요한 경우 12 개의 요소를 예약하십시오. 정수를 사용하는 경우 array : .word 0:12이 필요한 것을 처리합니다.

+1

2D 배열이 그렇게 나쁩니다. 그들은 아기를 먹는다. 토르 (Thor)가 만날 때마다 지구 온난화, 허리케인, 무좀, 귀 뒤의 가렵고 뇌우를 일으 킵니다. 그것들은 C/C++ 프로그래밍의 가증스러운 일이며, 모든 진정한 어셈블리 프로그래머는 그들을 피하려고합니다. 컴파일러 출력에는 2D 배열이 없습니다. 어셈블리 주소 지정 모드는 2D 배열에 대해 아무 것도 모릅니다. Turing이 2D 배열을 사용하기를 원한다면 테이프가 아닌 플로피 디스크를 발명했습니다. '(x, y)'에서'x + width * y'로 변환하는 것이 얼마나 어려운가요? –