2016-10-14 18 views
0
.text 
.global main 
main:  
     addi $v0, $zero,0 
     la $t0, length 
     lw $t1, 0($t0) 
     la $t4, array 
     addi $t1, $t1, -1 
     sll $t1,$t1,2 

loop: 
     add $t3, $t4,$t1 
     lw $t2,0($t3) 
     add $v0,$v0,$t2 
     addi $t1,$t1,-4 
test: 
     slti $t9,$t1,0 
     beq $t9,$zero,loop 
     nop 
     sw $v0, 0($t0) 
.data 
length: .word 8 
array: .word 9,8,7,6,5,4,3,2 

このコードにいくつの静的命令があるかを教えてください。私はデータの前に16の命令があることを知っています。私は、.dataの後に書かれた命令が2つの命令とみなされ、合計18の命令があるかどうか疑問に思っています。MIPSアセンブリ命令数

+1

いいえ、指示は指示ではありません。 – Michael

+1

しかし、おそらく、命令数を伝えるためにデータセグメントのベースアドレスを知る必要があるでしょう。 – Michael

+0

これは、長さが何らかの形でメモリにロードされているかどうか、命令として数えられているかどうか疑問に思っている理由です。だから、このコードを見ると、16の静的命令で書かれていることを確認できますか? – SebastianC

答えて

0

はいいいえ。

ディレクティブ ".data"自体は、関連するマシンにはコンパイルされません。一部のツールチェーンでは、別のリンクステージでコンパイルされたソースの一部がリンクされ、特定の実行可能ファイル(実行可能ファイルのヘッダーに記載されている、ターゲットプラットフォームの実行可能ファイル形式に依存します)。

そして、それらの.word 9,8,7,6,5,4,3,2は、ワードサイズの数値として9をコンパイル行う8、...

しかし、メモリ内のビュー数のCPUの観点からは、命令のように優れているので、あなたはそれを実行しようとしますCPUはそれに喜んで乗り込み、それらの数字を命令(ゴミの意味、おそらく機械のクラッシュ)として実行します。 IIRC MIPSは、1ワードに固定された命令サイズのriscのようなものなので、.word 9,8,7,6,5,4,3,2行には8つの命令が含まれています。

を実行した命令の数を教えてください。そしてそれはコードの実行の流れに依存します。あなたのケースでは、コードは単純なループで(ループごとに数回か1回だけカウントするのか?)、最後までかなり単純で直感的に見えます。

sw $v0, 0($t0)命令で終了します。それは店舗の言葉ですか?したがってCPUは次の命令(メモリ内の次のワード値)に従います。何がソースに定義されていない場合、.dataセグメントがそこから始まると、8,9,8、...という単語が命令として実行されます(逆アセンブルするにはあまりにも時間がかかります)。

人が読みやすいソースには16個の命令がありますが、コードが未完成であるため、HW上で実行することを恐れています。

そして...どこで16の命令を数えましたか?私は14だけを見ますか?マイケルはすぐに値に応じて、いくつかのオペコードに集合かもしれないいくつかの負荷を指摘したように


は、分解をチェックするために、おそらく容易になるだろう。

+0

_ "14が見える" _ 'la'は擬似命令であり、必ずしも1つの実際の命令に変換する必要はありません。 – Michael

+0

laはluiとoriに翻訳されています – SebastianC

+0

実際の質問はオリジナルポストに表示されていますが、このコード16または18にはいくつの静的命令がありますか? lenght:.word 8とarray:.word 9、x1、x2 ... xnの長さが命令であるかどうかはわかりません。 – SebastianC