我必須編寫一個彙編程序,它會查找最小的整數(從C作爲指針輸入到程序中)如何在彙編程序(SPARC)中查找整數的最小值和最大值?
任何人都可以告訴我該怎麼做?或者至少如何在彙編中存儲/訪問數組?
通常,變量可以通過連續的緩衝器來訪問,例如, :
subcc %i0, 2, %l0
但我沒有線索如何與數組做。
我必須編寫一個彙編程序,它會查找最小的整數(從C作爲指針輸入到程序中)如何在彙編程序(SPARC)中查找整數的最小值和最大值?
任何人都可以告訴我該怎麼做?或者至少如何在彙編中存儲/訪問數組?
通常,變量可以通過連續的緩衝器來訪問,例如, :
subcc %i0, 2, %l0
但我沒有線索如何與數組做。
在C表達式arr[i]
中的Rebember實際上相當於*(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 !