OpenWatcomでint DChを行うことを考えていたのですが、
全部inlineかコンパイラが用意している関数を使用する方法のどちらかでできればよいと考えていました。前回はinlineで解決したのですが今回標準で用意されている方法でできないか作成してみました。
一応動いてはいます。
追加で i86.hを入れました。
p20240521001
あと、呼び出すときにunion REGSやstruct SREGSを使いましたな。
int86x( )でinlineアセンブルで行ったことを代行しています。
あんまり見ないところでは
FP_SEGでセグメント
FP_OFFでオフセット
を取得できるようです。
r.w.dxのwやr.h.alのhは値の大きさみたいです。これはi86.hに定義が書かれていて

p20240521005
wはWORDREGS
hはBYTEREGS
というふうになっているようです。
(i86.hの内容はOpenWatcomのi86.hを引用)
x86のアセンブリ言語がわからないと理解しにくいかも
※あくまでもx86系CPUの縛りです

wdisコマンドでobjを逆アセンブルしてみました。
※ホストマシンに逆アセンブル結果をコピーしてWindows上のエディタで表示

p20240521002
コンパイラから出力したやつを逆アセンブルするとわかりにくいですな。

少しinlineアセンブラよりで記入してみました。
p20240521003

逆アセンブルすると少し見えるようになりました。
あんまり意味はないんですがkey1のセグメントアドレスを取得してDSにセットしています。
※小さいプログラムだと関係なさそう

p20240521004

速度を気にする必要がなければコンパイラ標準関数を使用したほうがよいです。
速度といっても古い実機でもないかぎり関係ないですな。

※ここで示しているプログラム例は使用者の責任において自由に使用してください(商用・フリーソフト問わず)。

©2024 wnc develop