回答受付が終了しました

ID非公開

2020/11/20 19:35

11回答

機械語(アセンブラ)得意な方、このファイルの解読をお願いできないでしょうか、

回答(1件)

0

多分MIPSアセンブラですよね。 大昔触った事はありますが、もう忘れてましたので、命令表を見ながら解析しました。 間違ってたらごめんなさい。 注意点として、x0には常にゼロが入っている筈です。 1行ずつの解説は↓↓の通りです。 ざっくり言うと、dataの内容(0x100000)をx1にロードし、ループで1から10までを足していきます。 最後に0x100をORして、84番地にストアします。 結果は0x100137になると思います。 ; sample2 lui x1,hi(data) // ori x1,x1,lo(data) //↑との2行でx1にdataアドレス値をロード lw x1,0(x1) //x1の示すアドレスの内容(0x100000)をx1にロード addi x2,x0,1 //x2←1(ループ初期値) addi x3,x0,11 //x3←11 addi x4,x0,1 //x4←1(真の値) loop: add x1,x1,x2 //x1←x1+x2 addi x2,x2,1 //x2←x2+1 slt x5,x2,x3 //x5←x2<x3(真なら1) beq x5,x4,loop //x5==x4ならloopへ ori x1,x1,0x100 //x1←x1 OR 0x100 sw x1,84(x0) //x1を84番地にストア data: .dw 0x100000

ID非公開

質問者

2020/11/21 3:43

ご丁寧にありがとうございます。 理解が不十分で初歩的な質問で申し訳ないのですが、0x100000の1番右のビットから順にx0、x1となっているのでしょうか? (2進数から最終的に137という数値がでてくるのは何故なのでしょうか、、)