x86におけるCF(キャリーフラグ)の動作について
Posted: 2019年9月24日(火) 17:25
こんにちは、ユーマと申します。
今回はx86におけるCF(キャリーフラグ)について疑問を持ったので質問させていただきました。
自分が勉強したサイトでは「cmp a, bを行った場合、a >= bのときはCF=0、a < bのときはCF=1になる」と記述されていました。
そして、実際にデバッガを用いて「5 - 3」「5 - 6」で実験した所、前者ではCF=0、後者ではCF=1となっていました。
ですが、自分の考えでは「cmp a, bを行った場合、a >= bのときはCF=1、a < bのときはCF=0になる」ような気がするのです。
例えば、x86では2の補数表現で計算しているらしいので、cmp命令を実行した際に「5 - 3 = 0x00000005 + 0xfffffffd = 0x100000002」となり最上位ビットから繰り上がりが起こります。
つまり、CF=1となると考えられます。
同様に「5 - 6 = 0x00000005 + 0xfffffffa = 0xffffffff」となり、最上位ビットからの繰り上がりは起こりません。
つまり、CF=0になると考えられます。
実際の動作と自分の考えとが全くの反対で困惑しております。
おそらく決定的な勘違いや理解不足だと思うのですが、いくら考えても解決の糸口がつかめません。
CFが最上位ビットからの繰り上がりと思い込んでいることが問題なのでしょうか...
どなたかお力を貸してください。
自分の考えと同じサイトを発見したのでここに貼らせていただきます。
http://donkeyhacks.zouri.jp/databank/65 ... carry.html
今回はx86におけるCF(キャリーフラグ)について疑問を持ったので質問させていただきました。
自分が勉強したサイトでは「cmp a, bを行った場合、a >= bのときはCF=0、a < bのときはCF=1になる」と記述されていました。
そして、実際にデバッガを用いて「5 - 3」「5 - 6」で実験した所、前者ではCF=0、後者ではCF=1となっていました。
ですが、自分の考えでは「cmp a, bを行った場合、a >= bのときはCF=1、a < bのときはCF=0になる」ような気がするのです。
例えば、x86では2の補数表現で計算しているらしいので、cmp命令を実行した際に「5 - 3 = 0x00000005 + 0xfffffffd = 0x100000002」となり最上位ビットから繰り上がりが起こります。
つまり、CF=1となると考えられます。
同様に「5 - 6 = 0x00000005 + 0xfffffffa = 0xffffffff」となり、最上位ビットからの繰り上がりは起こりません。
つまり、CF=0になると考えられます。
実際の動作と自分の考えとが全くの反対で困惑しております。
おそらく決定的な勘違いや理解不足だと思うのですが、いくら考えても解決の糸口がつかめません。
CFが最上位ビットからの繰り上がりと思い込んでいることが問題なのでしょうか...
どなたかお力を貸してください。
自分の考えと同じサイトを発見したのでここに貼らせていただきます。
http://donkeyhacks.zouri.jp/databank/65 ... carry.html