
前回は8087での浮動小数点数の比較結果を8086のフラグに反映させて分岐する練習でした。今回は比較でなくテストです。8087のレジスタスタックのトップに置かれている浮動小数値が、正なの負なのゼロなの?と調べる命令。でもメンドクセーことに「比較不能」という分類もこれあり。浮動小数だもんね。ようやくNaN登場。
“ぐだぐだ低レベルプログラミング(218)x86(16bit)、浮動小数点数のテスト” の続きを読む
デバイス作る人>>デバイス使う人>>デバイスおたく
前回は8087での浮動小数点数の比較結果を8086のフラグに反映させて分岐する練習でした。今回は比較でなくテストです。8087のレジスタスタックのトップに置かれている浮動小数値が、正なの負なのゼロなの?と調べる命令。でもメンドクセーことに「比較不能」という分類もこれあり。浮動小数だもんね。ようやくNaN登場。
“ぐだぐだ低レベルプログラミング(218)x86(16bit)、浮動小数点数のテスト” の続きを読む
前回で8087の加減乗除は極めてしまったかと思いましたが早とちりデス。計算したら、計算結果を判断するという過程が必要。当然、8087には8087の比較命令というものが存在するのですが、8086側が司っているプログラム・フローに反映するのはどしたら良いの?ここで古代の遺物と蔑まれていた命令が活躍。ホントか?
前回は8087の浮動小数加算命令を練習、これで加減乗除はバッチリかと思えば、「演算順序」の問題もあり。某国の小学校のようにスカラーの乗算に順序を求めることは流石にないです。減算、除算のときだけです。オペランドの表記法のルールと相まって慣れないとハマります。それもこれもスタック・アーキテクチャのせい?知らんけど。
前回は8087に浮動小数値をロード。その度にレジスタ・スタックは積みあがっていきます。今回は、浮動小数の加算。演算結果はスタックトップに書きこむのですが、スタックトップ位置はそのままの場合と、ポップして1個少なくなる場合あり。それに忘れちゃいけないx86はCISCデス。FADDでメモリを参照することも可。 “ぐだぐだ低レベルプログラミング(215)x86(16bit)、浮動小数点数の加算” の続きを読む
前回、8087数値演算コープロセッサの実行制御などハード的な部分を復習しました。何年、いや何十年ぶりだ?いよいよ浮動小数点演算命令の演習に突入?かと思われましたが、まだ復習必要っす。8087のレジスタです。こいつがまたメンドクセー奴。浮動小数点数のルールの数々、お惚け老人は覚えきれませぬが、知らないと命令動かせませぬ。
“ぐだぐだ低レベルプログラミング(213)x86(16bit)、8087のレジスタ” の続きを読む
前回までに8086/8088命令はほぼ舐め終わりデス。残るはWAIT命令とESC命令群です。ただし、WAIT命令を使うには「数値演算コープロセッサ」8087に登場していただかねばなりません。そしてESC命令には8087の命令が詰まってますが、8086/8088も遊んでいるわけではありませぬ。 “ぐだぐだ低レベルプログラミング(212)x86(16bit)、WAITとESCAPE命令” の続きを読む
遥か半世紀を遡る8088/8086の時代からx86はマルチプロセッサに対応しとります。そのお印がLOCKプリフィックスです。LOCK自体はエミュレータ上でも使い放題ですが意味なし。その動作をシミジミ味わうには、マルチ・プロセッサに対応したインテル・マルチバスシステムなどが必要。そんなもの無いぞなもし。 “ぐだぐだ低レベルプログラミング(210)x86(16bit)、LOCKプリフィクス” の続きを読む
x86(16bit)のオペコードマップの「塗りつぶし」も見た目は後一息という雰囲気を醸してます。今回は過去回でMOVSのみ練習して他の命令どもから目を背けていたストリング命令の残りからSCASとCMPSを練習してみます。メモリの中から特定のパターンを見つけたり文字列同士の比較に威力を発揮するもの。まあCISCらしい。 “ぐだぐだ低レベルプログラミング(207)x86(16bit)、SCASとCMPS” の続きを読む
x86(16bit)のオペコードマップもかなり塗りつぶし出来てきて、今回は落穂拾い回。XLATとな。何の略かと問えばTRANSLATEみたい。AIの言語変換ではありませんよ。バイト単位で最大256バイトの単なる表引きデス。当時、どなたかがこういう命令が欲しいなどとリクエストしたのかな?お惚け老人には知るよしもなし。
“ぐだぐだ低レベルプログラミング(206)x86(16bit)、XLAT” の続きを読む