私はintの配列の最小値を見つけるアセンブリプログラムを書く必要があります(ポインタとしてCからプログラムに供給されます)アセンブラ(SPARC)のint配列の最小値と最大値の検索方法は?
どのようにすればいいのですか?または少なくとも配列をアセンブラに格納/アクセスする方法は?
通常、変数は連続バッファによってアクセスされます。 :
しかし、私は配列でそれを行う方法の手がかりを持っていません。
私はintの配列の最小値を見つけるアセンブリプログラムを書く必要があります(ポインタとしてCからプログラムに供給されます)アセンブラ(SPARC)のint配列の最小値と最大値の検索方法は?
どのようにすればいいのですか?または少なくとも配列をアセンブラに格納/アクセスする方法は?
通常、変数は連続バッファによってアクセスされます。 :
しかし、私は配列でそれを行う方法の手がかりを持っていません。
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 !