최소한 int 배열을 찾는 어셈블리 프로그램을 작성해야합니다 (C에서 포인터로 프로그램에 입력 됨)어셈블러 (SPARC)에서 최소 int 배열을 찾는 방법은 무엇입니까?
아무도 말해 줄 수 있습니까? 또는 최소한 어셈블러에 배열을 저장/액세스하는 방법은 무엇입니까?
일반적으로 변수는 연속적인 버퍼로 액세스됩니다. :
subcc %i0, 2, %l0
하지만 난 어떻게 배열을 할 수있는 단서가 없습니다.
최소한 int 배열을 찾는 어셈블리 프로그램을 작성해야합니다 (C에서 포인터로 프로그램에 입력 됨)어셈블러 (SPARC)에서 최소 int 배열을 찾는 방법은 무엇입니까?
아무도 말해 줄 수 있습니까? 또는 최소한 어셈블러에 배열을 저장/액세스하는 방법은 무엇입니까?
일반적으로 변수는 연속적인 버퍼로 액세스됩니다. :
subcc %i0, 2, %l0
하지만 난 어떻게 배열을 할 수있는 단서가 없습니다.
C 표현식에서 arr[i]
은 실제로 *(arr + i)
과 같습니다.
배열의 값에 액세스하려면 주소를 계산해야합니다 (arr + i * sizeof(int)
). 그런 다음 ld
, st
명령어를 사용하여 읽고 쓸 수 있습니다.
나는 이런 식으로 어떻게 든이 일을 처리했다 :
.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 !