2012-01-05 3 views
0

최소한 int 배열을 찾는 어셈블리 프로그램을 작성해야합니다 (C에서 포인터로 프로그램에 입력 됨)어셈블러 (SPARC)에서 최소 int 배열을 찾는 방법은 무엇입니까?

아무도 말해 줄 수 있습니까? 또는 최소한 어셈블러에 배열을 저장/액세스하는 방법은 무엇입니까?

일반적으로 변수는 연속적인 버퍼로 액세스됩니다. :

subcc %i0, 2, %l0 

하지만 난 어떻게 배열을 할 수있는 단서가 없습니다.

답변

0

C 표현식에서 arr[i]은 실제로 *(arr + i)과 같습니다.

배열의 값에 액세스하려면 주소를 계산해야합니다 (arr + i * sizeof(int)). 그런 다음 ld, st 명령어를 사용하여 읽고 쓸 수 있습니다.

0

나는 이런 식으로 어떻게 든이 일을 처리했다 :

.global findminmax  ! 
.proc 4    ! 
       ! 
findminmax:   ! 
    save %sp, -96, %sp ! 
    ld [%i0], %l0  ! 
    mov %l0, %l2  ! 
    mov %l0, %l3  ! 
       ! 
loop:    ! 
    subcc %i1, 1, %l0 ! 
    bneg end  ! 
    nop    ! 
       ! 
    ld [%i0], %l1  ! 
       ! 
    subcc %l2, %l1, %l0  ! 
    bneg newmax   ! 
    nop    ! 
       ! 
    subcc %l1, %l3, %l0  ! 
    bneg newmin   ! 
    nop    ! 
       ! 
back:   ! 
    add %i0, 4, %i0  ! 
    sub %i1, 1, %i1  ! 
    ba loop   ! 
    nop    ! 
end:    ! 
    st %l2, [%i2]  ! 
    st %l3, [%i3]  ! 
    ret    ! 
    restore   ! 
       ! 
newmax:    ! 
    mov %l1, %l2  ! 
    ba back   ! 
    nop    ! 
newmin:    ! 
    mov %l1, %l3  ! 
    ba back   ! 
    nop    ! 
관련 문제