私が取り組んでいるプログラムでは、ユーザからの入力に基づいて配列を分割するサブプログラムを書く必要があります(メイン)。つまり、元の配列が[4.2、-1.2、16.5、12.3、3.7、3.8、3.9]で、ユーザーが6.1をパーティション値として入力した場合、2つの配列は[4.2,1.2,3.7,3.8,3.9]および[16.5,12.3]。私が混乱しているのは、私は2つのループを使う必要があることを知っており、c.lt.d
、bc1f
などの値を比較しなければならないことを知っていますが、それを正しく行う方法ははっきりしていません。誰もがこれで私を助けることができますか?MIPSアセンブリでアレイをどのように分割するのですか?
はまた、これはサブプログラムの基本的なJISTです:
###########################################################
# Subprogram Description
#
# 'partition_array'
#
# 1. Determine how many values in source are < partition value
# 2. Allocate two arrays on heap (one w/ values < partition value,
# one >= partition value)
# 3. Copy the values from the source array into appropriate destination array
# 4. Return base address and length of both
#
###########################################################
# Arguments In and Out of subprogram
#
# $sp source array base address (IN)
# $sp+4 source array length (IN)
# $sp+8 partition value, double-precision (IN)
# $sp+16 "less" array base address (OUT)
# $sp+20 "less" array length (OUT)
# $sp+24 "greater" array base address (OUT)
# $sp+28 "greater" array length (OUT)
###########################################################
.data
###########################################################
.text
partition_array:
partition_array_end:
jr $ra #return to calling location
###########################################################
非効率的な呼び出し規約。 MIPS ABIはすべて、最初のいくつかのパラメータにいくつかのレジスタを使用しています。この種の決定は、手書きの組立てのポイントを総括的に敗北させるでしょう。 – Kaz
@ Kazあなたは私の質問に答えるか、MIPSについて不平を言っていますか? –