by shigemk2

当面は技術的なことしか書かない

昨日やったこと #ikebin

8086の逆アセンブラ実装の続き。 aaa命令までやる。

add命令のImmediate to Register/Memoryがよくわからなかった。いつもどおりndisasmの仕様かと思ったら、最初の1バイトの82が欠番になっていたりで場合分けがしんどかった。

そこそこ実装が進んでいて、最初の1バイトが他の命令とダブっているっていうことがあったりして、そういう場合は場合分けをちょくちょくしている。inc命令とpush命令とか。

あとはコーディングの問題だと思う。

DisAsm201412070030.hs

シェルスクリプトで1000回コミット

シェルスクリプトで指定回数実行 とある現場の組込みエンジニア

これの応用です。機械的にファイルを作成したり消したりしてコミットしているだけなので、実用性は全くありません。

#!/bin/sh
for i in `seq 1 1 1000`
do
    touch 1.out
    git add .nn
    git commit -m "add"
    rm 1.out
    git add --all .
    git commit -m "delete"
done

8086逆アセンブラ実装の壁 その1

pop cs

pop csは8086/8088でしか動かなくって、たとえばndisasmで逆アセンブルすると結果はpop csにならない。ということが英語のWikipediaに書いてありました。

xchg ax, ax

これは事実上何もしていない命令なので、エイリアス扱いでnopとして逆アセンブルされる。

8086 メモ lesとかportとか

les

les ax,[bx+si]
! 4バイトぶん読み込んでesとaxに入れる

port

周辺機器(キーボード マウス)専用のアドレス(in out命令で使われるやつ)

fixed port

0x1234とかアドレスの場所を指定しているから固定

variable port

dxのアドレスは場合によって変わる

I/O空間の関係

今日やったこと #ikebin

今日やったこと

8086の逆アセンブラのHaskell実装。

mul命令までやる。順番にごにょごにょしていって、最後にリファクタするのがよろしいかと。

あとは物量の問題ですかね。とりあえずbcなしでも1バイトの2進数が計算できるようにはなってきている気はしている。

各記事

8086逆アセンブラ実装の壁 その1 - by shigemk2

8086のlea命令について - by shigemk2

8086 メモ lesとかportとか - by shigemk2

進捗どうですか

DisAsm201412072341.hs