配列の最大値を返す関数をアセンブリ (MIPS) でプログラムする必要があります。
Cコードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
int MaxAssembly(int *ptr, int num_elements);
int main ( )
{
int n=9;
int tab[] = {2, -8, 0, 25, 14, 2, 9, 15, -32};
printf("The maximum is %d \n", MaxAssembly(tab,n));
MaxAssembly
アセンブリでプログラムする必要がある関数です。
私は最大値を見つける側ではありません。関数の引数を読む際の私の問題。いくつかのテストを行うためにこのコードを作成しました。
.data
.text
.globl MaxAssembly
MaxAssembly:
add $9,$5,$zero
move $2,$9
jr $ra
このコードを実行すると、関数の 2 番目の引数が期待どおりに読み取られていることがわかります。画面に表示されますThe maximum is 9
コードを次のように変更します。
.data
.text
.globl MaxAssembly
MaxAssembly:
move $2,$4
jr $ra
関数の最初の引数をメモリアドレスとして読み取り、画面に出力されていることがわかりますThe maximum is 2143429780
。これまでのところ、期待どおりに機能しています。
問題は、そのメモリ アドレス (配列の最初の要素) に格納されている要素を読み込もうとしたときです。私は 1 つのセグメンテーション違反を取得しています...私はこれをやっています:
.data
.text
.globl MaxAssembly
MaxAssembly:
lw $16,0($4)
move $2,$16
jr $ra
私は何を間違っていますか?配列の最初の項目lw
に格納することになっていませんでしたか? $16
使い方lb
は同じ