3

私はMIPSアセンブリ言語プログラミングを学ぶことによってMIPSアセンブリを学ぼうとしています。本の中に私はこのコードを持っています(本の37ページから抽出されました):

.data
prompt: .asciiz "\n Please Input a Value: "
bye: .asciiz "\n Bye!"
.globl main
.text

main:
   li $v0, 4
   la $a0, prompt
   syscall

   li $v0, 5
   syscall
   beqz $v0, end
   move $a0, $v0
   li $v0, 1
   syscall
   b main


end:
   li $v0, 4
   la $a0, bye
   syscall

   li $v0, 10
   syscall

を対象としたクロスコンパイルされたbinutilsmips-elfがありますが、コードをアセンブルしようとすると、いくつかのエラーが発生しました

ubuntu @ eeepc:〜/ Desktop $ mips-elf-as test-mips.asm
test-mips.asm:アセンブラメッセージ:
test-mips.asm:8:エラー:不正なオペランド'li'
test-mips.asm:9:エラー:不正なオペランド'la'
test-mips.asm:12:エラー:不正なオペランド'li'
test-mips.asm:14:エラー:不正なオペランド'beqz'
test-mips.asm:15:エラー:不正なオペランド ' move'test
-mips.asm:16:エラー:不正なオペランド'
li'test-mips.asm:22:エラー:不正なオペランド'
li'test-mips.asm:23:エラー:不正なオペランド' la'test
-mips .asm:26:エラー:不正なオペランド'li'
ubuntu @ eeepc:〜/ Desktop $

x86 UbuntuHardyHerronを使用してMIPSにクロスコンパイルしています

なにが問題ですか?

4

3 に答える 3

4

liと命令はアセンブラによって認識される必要laがある疑似命令ですが、環境がそれらを定義するために何かをする必要がある可能性があります(それらがマクロである場合でも私は驚かないでしょう)。

それらを「実際の」形式に変更してみてください。

li $v0,4   -->   lui $v0,0;       ori $v0,$v0,4
la $a0,bye -->   lui $a0,bye>>16; ori $a0,$a0,bye&ffff

RIGHT-SHIFT-16-BITSまたは、特定のMIPSアセンブラがとに使用するものは何でもAND

lsまで見たことがない指示。それはタイプミスではありませんlaか?beqzそして、私はそうあるべきだと思いますbeq。ほとんどのCPUは、同じ命令をさまざまな方法で使用します。たとえば、レジ​​スタをゼロ(z)までデクリメントし、レジスタを何か(eq)比較すると、ゼロフラグが設定されます。

いずれもlsbeqzまたはMIPSアセンブラのウィキペディアページmoveには表示されませんが、後者の2つはPatterson&Hennessyに疑似命令としてリストされています。

そのため、疑似命令を機能させるために必要な追加の設定があるように見えます。

于 2010-01-28T02:37:20.303 に答える
3

問題は、MIPSレジスタのシンボリック名をサポートしていない古いバージョンのbinutilsを使用していることだと思います。

$v0binutils 2.17(リンク先のクロスコンパイル手順で参照されている)は、$a0などを理解していません(この質問を参照してください)。

ただし、とにかく自分でツールを構築している場合は、binutilsの新しいバージョンに移行することをお勧めします。2.18以降のバージョンはシンボリックレジスタ名をサポートしています。あなたの例は、2.18または最新バージョンの2.20のいずれかで正しく組み立てられます。

于 2010-01-28T22:27:12.850 に答える
0

liとlaのリストのシーケンスだと思います。アドレスをロードしない限り、すぐにロードして、表示する文字列を保持するように$v0に指示することはできません。それぞれのliの前にlaを最初に配置してみてください。ケース...疑似命令の場合もそうですが、それも問題になる可能性がありますが、私の提案は試してみる価値があります。

于 2012-01-17T20:32:15.917 に答える