ぐだぐだ低レベルプログラミング(216)x86(16bit)、浮動小数点数の加減乗除

FSUBba
Joseph Halfmoon

前回は8087の浮動小数加算命令を練習、これで加減乗除はバッチリかと思えば、「演算順序」の問題もあり。某国の小学校のようにスカラーの乗算に順序を求めることは流石にないです。減算、除算のときだけです。オペランドの表記法のルールと相まって慣れないとハマります。それもこれもスタック・アーキテクチャのせい?知らんけど。

“ぐだぐだ低レベルプログラミング(216)x86(16bit)、浮動小数点数の加減乗除” の続きを読む

ぐだぐだ低レベルプログラミング(215)x86(16bit)、浮動小数点数の加算

FADD_uEC
Joseph Halfmoon

前回は8087に浮動小数値をロード。その度にレジスタ・スタックは積みあがっていきます。今回は、浮動小数の加算。演算結果はスタックトップに書きこむのですが、スタックトップ位置はそのままの場合と、ポップして1個少なくなる場合あり。それに忘れちゃいけないx86はCISCデス。FADDでメモリを参照することも可。 “ぐだぐだ低レベルプログラミング(215)x86(16bit)、浮動小数点数の加算” の続きを読む

ぐだぐだ低レベルプログラミング(214)x86(16bit)、浮動小数点数のロード

unassemFLD_EC
Joseph Halfmoon

前回前々回と浮動小数点「コープロセッサ」8087の復習を行いました。ようやく8087命令をエクササイズする準備が出来たというところです。今回は、最初の一歩というところで、8087のレジスタ・スタックに浮動小数点数をロードしてみます。メモリから、そして沢山ある定数のロード命令を使ってみます。スタックに積まれていくのよ。

“ぐだぐだ低レベルプログラミング(214)x86(16bit)、浮動小数点数のロード” の続きを読む

ぐだぐだ低レベルプログラミング(213)x86(16bit)、8087のレジスタ

8087registers
Joseph Halfmoon

前回、8087数値演算コープロセッサの実行制御などハード的な部分を復習しました。何年、いや何十年ぶりだ?いよいよ浮動小数点演算命令の演習に突入?かと思われましたが、まだ復習必要っす。8087のレジスタです。こいつがまたメンドクセー奴。浮動小数点数のルールの数々、お惚け老人は覚えきれませぬが、知らないと命令動かせませぬ。
“ぐだぐだ低レベルプログラミング(213)x86(16bit)、8087のレジスタ” の続きを読む

ぐだぐだ低レベルプログラミング(211)x86(16bit)、HLT命令

Joseph Halfmoon

今回もエミュレータ上では動作確認がとってもしずらい命令です。HLTとな。マニュアルをみれば「CPUをHalt stateに入れる命令」ということですが、そもそもHalt stateって何?って話です。まあ、アプリコードを書くのに専念しているよゐこには縁がない命令かも。まあ、知らなくても実害はない?どうなんだ?

“ぐだぐだ低レベルプログラミング(211)x86(16bit)、HLT命令” の続きを読む

ぐだぐだ低レベルプログラミング(210)x86(16bit)、LOCKプリフィクス

busLOCK_EC
Joseph Halfmoon

遥か半世紀を遡る8088/8086の時代からx86はマルチプロセッサに対応しとります。そのお印がLOCKプリフィックスです。LOCK自体はエミュレータ上でも使い放題ですが意味なし。その動作をシミジミ味わうには、マルチ・プロセッサに対応したインテル・マルチバスシステムなどが必要。そんなもの無いぞなもし。 “ぐだぐだ低レベルプログラミング(210)x86(16bit)、LOCKプリフィクス” の続きを読む

ぐだぐだ低レベルプログラミング(209)x86(16bit)、INTOとINT

unassemHANDLER
Joseph Halfmoon

いよいよファーストバイト・オペコードマップの塗りつぶしも佳境。今回はソフトウエア割り込み命令、INTとINTOを練習してみます。といってINT命令の方はDOSのシステムコールで毎度お馴染み。いつも割り込みを操作するときは緊張して夜しか眠れないのだけれども、今回はお気楽。エミュレータ(QEMU)上での作業だし。

“ぐだぐだ低レベルプログラミング(209)x86(16bit)、INTOとINT” の続きを読む

ぐだぐだ低レベルプログラミング(208)x86(16bit)、LODSとSTOS

LODS_STOS
Joseph Halfmoon

前回はストリング命令SCASとCMPSを練習しました。どちらもREPプリフィックスでCX回繰り返し、途中ゼロフラグで継続か中断する判断するのに向いてます。しかしストリング命令と括られる中にはREPプリフィックスと「相性」の良くない命令があります。LODSとSTOSです。でもこいつら意外と便利なんだ、ホントか?

“ぐだぐだ低レベルプログラミング(208)x86(16bit)、LODSとSTOS” の続きを読む

ぐだぐだ低レベルプログラミング(207)x86(16bit)、SCASとCMPS

SCASunassemble
Joseph Halfmoon

x86(16bit)のオペコードマップの「塗りつぶし」も見た目は後一息という雰囲気を醸してます。今回は過去回でMOVSのみ練習して他の命令どもから目を背けていたストリング命令の残りからSCASとCMPSを練習してみます。メモリの中から特定のパターンを見つけたり文字列同士の比較に威力を発揮するもの。まあCISCらしい。 “ぐだぐだ低レベルプログラミング(207)x86(16bit)、SCASとCMPS” の続きを読む

ぐだぐだ低レベルプログラミング(206)x86(16bit)、XLAT

Joseph Halfmoon

x86(16bit)のオペコードマップもかなり塗りつぶし出来てきて、今回は落穂拾い回。XLATとな。何の略かと問えばTRANSLATEみたい。AIの言語変換ではありませんよ。バイト単位で最大256バイトの単なる表引きデス。当時、どなたかがこういう命令が欲しいなどとリクエストしたのかな?お惚け老人には知るよしもなし。
“ぐだぐだ低レベルプログラミング(206)x86(16bit)、XLAT” の続きを読む

冥界のLSI(12) 8086 Minimum Mode のバス波形(Read)を描く

8086mnRead_EC
Joseph Halfmoon

別シリーズにてx86のアセンブラを古き16ビットから順に練習中です。段々煮詰まり、バス波形を参照しないと動作が説明できん命令に近付いております。しかし今時8086のバス波形など説明するための土台がありませぬ。そこで今回は何を今更8086/8088のバス波形(Read)をWaveDrom使用で描いてみました。
“冥界のLSI(12) 8086 Minimum Mode のバス波形(Read)を描く” の続きを読む

Lispと一緒(49) Wio TerminalでもuLisp、SDカードの使用

textReadWrite
Joseph Halfmoon

迂闊なことに、つい最近までWio Terminal(ハード的にはWiFi対応)上のuLispで無線LANできるものと思い込んでました。しかし、uLisp4.6b ではWio Terminal上でのWiFi対応は無。仕方ないのでSDカードを使用できるようにしてみました。とばっちり? SDカードはフツーに使えます。 “Lispと一緒(49) Wio TerminalでもuLisp、SDカードの使用” の続きを読む

ぐだぐだ低レベルプログラミング(205)x86(16bit)、I/O空間とI/O命令

IOspace
Joseph Halfmoon

今回はI/O命令デス。I/O命令といってもその動作はデータの転送です。8086/8088においてはMOVと変わるのは「空間」の種別のみ。他のプロセッサ、かってのライバル?68系も、現在ブイブイ言わせている?ArmやRISC-VにもI/O空間などありませぬ。みなメモリ・マップドI/Oね。でも使っているのよねI/O。

“ぐだぐだ低レベルプログラミング(205)x86(16bit)、I/O空間とI/O命令” の続きを読む

Lispと一緒(48) Wio TerminalでもuLisp、レイトレーシングのデモ

RayTracingDemo
Joseph Halfmoon

前回はホフスタッターQ数列でクロージャを学びましたです。今回は1ピクセル描画関数 draw-pixel の「重そうなデモ」ということで Graphics examples の Ray tracing を試行。@200MHzとはいえ uLispインタプリタで直列処理。360×240ピクセルの画面に出力するのに約11分。

“Lispと一緒(48) Wio TerminalでもuLisp、レイトレーシングのデモ” の続きを読む