アーキテクチャの違いを感じたことはありませんが、除算命令を触っていたところ、アーキテクチャによってかなり動きが違っていて面白かったので、メモしておきます。プログラムは下記のとおりです。言語上の仕様上、動作が未定義です。どんなことでも起こり得ます。不定な結果が返ることもあるし、プログラムが停止することだってあります。上でそれぞれ実行してみます。ffffffff当然ながら、動作が定義されている演算は、どのアーキテクチャでも同じ結果です。0一方で動作が未定義の演算は、かなり挙動が変わります。(RV64GC)個性が出ますね。2条件が挙げられています。表現できないため、後者に引っ掛かるわけです。異常な演算に対して例外を発生させる設計思想なら分かりますが、乗算命令は異常な結果でも素通しなのに、除算命令は異常な結果だと例外発生します。片手落ちの不思議な仕様です。00:41]コメント一覧hdkx86の除算例外は8086/8088の頃からありました。乗算については、8ビット同士を掛けて16ビットを出すか、16ビット同士を掛けて32ビットを出すかしかなかったので、異常な結果というのがそもそもなかったんですよね。(下位ビットだけ使うのはCコンパイラーの勝手なので。今はIMUL命令のオペランドが増えて同一ビット幅の答えを返す命令もありますが、例外がないのは名残か、あるいは、同じく例外がないシフトと足し算の命令の代わりに使われることを意図したかでしょうか。ついては、結果が倍のビット幅になっていたからという理屈もわかるんですが、加算、減算はオーバーフローしたらOFをセットするだけなのに、「除算だけ」オーバーフローで例外を発生させるのは、変な仕様です。10:56:45)すずきOFをセットして例外を出したければINTOでオーバーフロー例外(#OF)を発生させるのがx86の仕様に思えるのですが、除算だけ特別というかわざわざ除算例外(#DE)なんて用意しているのも不思議です......。11:02:10)hdk加算減算は符号のありなしどちらも命令が同じですから、オーバーフローで即例外ってわけにはいかないですね。ちなみにAAM命令でも0を指定すれば#DE発生させられます。