サーチ…


備考

このセクションでは、mipsの概要と、なぜ開発者がそれを使いたいのかを概説します。

また、mips内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 mipsのドキュメンテーションは新しいので、それらの関連トピックの初期バージョンを作成する必要があります。

インストールまたはセットアップ

ミップのセットアップまたはインストールに関する詳細な手順。

QtSpim for windows

  1. QtSpimをここからダウンロードする 32.6 MB
  2. 簡単にインストールする
  3. 最初のアセンブリファイル(.s)を作成するか、サンプルC:¥Program Files(x86)¥QtSpim¥helloworld.sを使用してください
  4. デスクトップショートカットまたはC:\ Program Files(x86)\ QtSpim \ QtSpim.exeからプログラムを実行します。

(ラベル付きテキスト)、メモリ(ラベル付きデータ)、レジスタの値(浮動小数点のFP Regsと整数のInt Regsというラベルが付けられています)の値が表示されます。シミュレータの制御

コンソールと表示された別のウィンドウは、出力が表示され、プログラムの入力があれば入力します

  1. ファイル→ロードファイルを使用してファイルをロードする
  2. クリック実行(f5)を使用して最終結果を確認するか、またはデバッグするプログラムの実行中にレジスタおよびメモリの状態を確認するためにステップバイステップ(p10)に進むことができます

MARS MIPSシミュレータ

MARS MIPSシミュレータは、Missouri State University( src )のPete SandersonとKenneth Vollmarによって開発された、MIPSプロセッサ用のアセンブリ言語エディタ、アセンブラ、シミュレータおよびデバッガです。

あなたはここで自由にMARSを手に入れます 。 4.5バージョンのインストールに関しては、 ここからあなたのシステムに適したJava SDKが必要になるかもしれません

アセンブルする前に、このシミュレーターの環境を単純に3つのセグメントに分割することができます。左上のエディターはすべてのコードが書き込まれ、コンパイラー/出力はエディターの下にあり、 レジスタリストは "CPU"私たちのプログラムのために。 ここに画像の説明を入力

組み立て後(単にF3を押すだけで)、環境が変化し、2つの新しいセグメントがエディタの位置を取得します。テキストセグメント

i)アセンブリコードの各行は、「基本的な」欄に「擬似命令」をクリアします(これについては秒単位で説明します)。

ii)「コード」列の各命令の機械コード、

リトルエンディアンの順序でプロセッサのメモリの表現を見ることができるデータセグメントです。 ここに画像の説明を入力

組み立て後、コードを一度に(F5)またはステップバイステップ(F7)で実行したり、実行をいくつか後ろに逆戻り(F8)して戻すことができます。 ここに画像の説明を入力

上の例のコードを見て、各行について説明しましょう:

.text
.globl main
main:            #main function

li    $v0, 11    #11=system code for printing a character, $v0=register that gets the system code for printing as value
la    $a0, 'a'   #'a'=our example character, $a0=register that accepts the character for printing
syscall          #Call to the System to execute our instructions and print the character at the a0 register 

li $v0, 10       #11=system code for terminating, $v0=register that gets the system code for terminating (optional, but desirable)
syscall          #Call to the System to terminate the execution

MARSは、.asmファイルタイプのファイルを受け入れ、エクスポートします。

しかし、上のコードは文字だけを表示していますが、「Hello World」はどうですか?何か、何もない何かを追加するのはどうですか?さて、私たちがちょうどそれを持っていたものを変更することができます:

.data               #data section 
str: .asciiz "Hello world\n"  
number: .word 256
 
.text                 #code section 
.globl main 
main: 
li       $v0, 4                #system call for printing strings 
la       $a0, str              #loading our string from data section to the $a0 register
syscall  
       
la       $t0, number        #loading our number from data section to the $t0 register
lw       $s1, 0($t0)        #loading our number as a word to another register, $s1 

addi     $t2, $s1, 8         #adding our number ($s1) with 8 and leaving the sum to register $t2

sw       $t2, 0($t0)        #storing the sum of register $t2 as a word at the first place of $t0

li       $v0, 10               # system call for terminating the execution
syscall 

MARSによる結果を説明する前に、これらのコマンドについてもう少し説明する必要があります。

  • システムコールは、オペレーティングシステムから提供される一連のサービスです。システムコールを使用するには、必要な操作のために$ v0レジスタにコールコードを入れる必要があります。システムコールに引数がある場合、それらは$ a0- $ a2レジスタに置かれます。 ここにはすべてのシステムコールがあります。

  • li (即時ロード)は、瞬時にレジスタに値をロードする疑似命令です(これについては後で説明します)。 la (ロードアドレス)は、レジスタにアドレスをロードする擬似命令でもあります。 li $v0, 4 、$ v0レジスタは4として値をとり、 la $a0, strstr$a0レジスタにロードします。

  • 単語は、32ビットシーケンスであり、ビット31が最上位ビットであり、ビット0が最下位ビットである(MIPSについて話しているように)。

  • lw (ロード・ワード)はメモリからレジスタに転送され、 sw (ストア・ワード)はレジスタからメモリに転送されます。 lw $s1, 0($t0)コマンドが、我々はにロード$s1 LSBのにあった値登録$t0レジスタ(何thatsの0 、ここ象徴する言葉のオフセット)、別名256$t0にはアドレスがあり、 $s1には値があります。 sw $t2, 0($t0)は正反対の仕事をします。

  • MARSはリトルエンディアンを使用します。つまり、ワードのLSBがメモリの最小バイトアドレスに格納されます。

  • MIPSはバイトアドレスを使用するため、アドレスは前と次の4分の1です。

これまでのコードを組み立てることで、メモリとレジスタの交換方法、データセグメントからの「16進値」の無効化をさらに理解することができます。

ここに画像の説明を入力

データセグメントから「ASCII」を有効にする:

ここに画像の説明を入力

このように始める

$ java -jar Mars4_5.jar

このファイルを作成して保存します。

    .text
main:
    li    $s0,0x30
loop:
    move    $a0,$s0        # copy from s0 to a0
    
    li    $v0,11        # syscall with v0 = 11 will print out
    syscall            # one byte from a0 to the Run I/O window

    addi    $s0,$s0,3    # what happens if the constant is changed?
    
    li    $t0,0x5d
    bne    $s0,$t0,loop
    nop            # delay slot filler (just in case)

stop:    j    stop        # loop forever here
    nop            # delay slot filler (just in case)

F3を押してアセンブリし、次に実行を押します。これで、MIPSコードのコンパイルと実行が開始されました。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow