Changes between Version 5 and Version 6 of Ex01 MIPSプログラミングの基礎2017
- Timestamp:
- Apr 17, 2017 5:10:08 PM (9 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ex01 MIPSプログラミングの基礎2017
v5 v6 139 139 if文の条件判定の式が複雑な場合も同様に分解します。 140 140 141 アセンブリプログラムでは、一時的な変数の役割はレジスタが 行います。141 アセンブリプログラムでは、一時的な変数の役割はレジスタが担います。 142 142 しかし、すべての一時的なレジスタを使いきるような場合、一時変数を保持するのにメモリを利用する必要があります。 143 143 メモリを利用する場合、swおよびlw命令が必要となり、 … … 167 167 168 168 配列のように連続するデータのアドレスが規則的に並んでいる場合、 169 レジスタを使ってアドレスを加 減算しながらメモリにアクセスするとプログラムが簡単に記述できます。169 レジスタを使ってアドレスを加算しながらメモリにアクセスするとプログラムが簡単に記述できます。 170 170 たとえば次のようにデータが並んでいるとします。 171 171 … … 175 175 ||A+8 || 10 || 176 176 ||A+12 || 15 || 177 ||S || 結果の格納 ||177 ||S || 結果の格納場所 || 178 178 179 179 このような場合、最初のアドレスAがわかれば、次のアドレスはAに4を足すことによって求めることができます。 180 したがって、 4つの要素の和を求める場合、次のようなプログラムを記述すればよいことになります。180 したがって、4つの要素の和を求める場合、次のようなプログラムを記述すればよいことになります。 181 181 182 182 {{{ … … 188 188 S: .word 0 189 189 .text 190 main: or $8, $0, $0 # 和 を 0 に初期化191 la $9, A # Aのアドレスを $9 に入れる。実際は ori 命令に置き換わる。190 main: or $8, $0, $0 # 和($8レジスタ)を 0 に初期化 191 la $9, A # la命令によりAのアドレスを $9 に入れる。実際は ori 命令に置き換わる。 192 192 193 193 lw $10, 0($9) … … 241 241 242 242 上の2番目のプログラムをエディタにコピー&ペーストして、xspimで動作を確認してください。 243 レジスタを インクリメントしながらメモリにアクセスする方法を理解してください。243 レジスタを使って配列アドレスををインクリメントしながらメモリにアクセスする方法を理解してください。 244 244 245 245 = 条件分岐 = 246 本演習で利用可能な命令の中で、条件分岐に利用できるのはbranch on equal命令 だけです。246 本演習で利用可能な命令の中で、条件分岐に利用できるのはbranch on equal命令(比較結果が等しい場合に指定したアドレスにジャンプする)だけです。 247 247 例えば、C言語での以下の条件分岐は 248 248 … … 278 278 beq $8,$0,label1 279 279 280 サブプログラム1に対応する アセンブラプログラム280 サブプログラム1に対応する部分 281 281 282 282 goto label2 283 283 label1: 284 284 285 サブプログラム2に対応する アセンブラプログラム285 サブプログラム2に対応する部分 286 286 287 287 label2: … … 297 297 }}} 298 298 299 === MIPSアセンブリ===299 === 疑似的なアセンブリプログラム === 300 300 {{{ 301 301 label1: … … 303 303 beq $a,$0,label2 304 304 305 サブプログラムに対応する アセンブラプログラム305 サブプログラムに対応する部分 306 306 307 307 goto label1 308 308 }}} 309 309 310 なお、条件が等式の場合は$aを用いず、直接beq命令で等式判定をします。 310 311 … … 349 350 総和演算のような処理は処理はwhile文を用いることによって記述できます。 350 351 351 === MIPSアセンブリ ===352 === MIPSアセンブリプログラム === 352 353 アセンブリプログラムでは、分岐命令と比較命令を用いてループを実現します。 353 354 メモリの初期状態を以下のように仮定します。 … … 430 431 .word 56 # A[8] = 56 431 432 .word 32 # A[9] = 32 432 B: .space 40 # 配列B の格納先 大きさは40バイト433 B: .space 40 # 配列B の格納先を確保する。大きさは40バイト(10ワード分) 433 434 .text 434 435 main:
