あなたは
人目のアセンブラの受講生です。 |
アセンブラ入門内検索
アセンブラトップ
0. はじめに
1. 基礎
1. レジスタとは
2. セグメントとは
2. MOV命令
1. MOV命令
2. コンパイル
3. 即値の転送
4. メモリーへの転送
5. データ定義疑似命令
6. 練習問題
3. 算術演算
1. 符号なし演算と符号付き演算
2. 足し算
3. 練習問題
4. フラグ
5. 引き算
6. かけ算
7. わり算
8. INC,DEC
4. 分岐
1. 無条件分離
2. 比較命令
3. 条件分離
4. 練習問題
5. ループ
6. サブルーチン
7. スタックとは
8. PUSH,POP
9. 練習問題
5. 論理演算
1. AND命令
2. OR命令
3. XOR命令
4. NOT命令
5. NEG命令
6. TEST命令
7. 練習問題
6. シフト演算
1. シフト
2. ローテート
3. 練習問題1
4. 練習問題2
7. ストリング命令
1. ストリング命令とは
2. MOVS?
3. REP
4. DFの設定
5. LODS?
6. STOS?
7. SCAS?
8. CMPS?
9 .練習問題
8. 入出力
1. 概要
2. IN命令
3. OUT命令
4. INS,OUTS命令
9. その他
1. LEA
2. XCHG
3. NOP
10. 割り込み
1. 割り込みとは
2. ソフトウェア割り込み
3. ハードウェア割り込み
4. 割り込みベクター
5. 割り込み処理の作り方
6. 練習問題
11. レジスタの型変換(キャスト)
12. 卒業試験
1. 卒業試験
2. 画像データの格納形式
3. インラインアセンブラ
4. ネガポジ反転
5. 明るくする、暗くする
6. グレースケール
7. 二値化
8. 上下反転、左右反転
9. 4分割
10. モザイク
11. シャープ
12. ぼかし
13. エンボス
14. ディザ拡散
15. 鉛筆を置いてください
13. 終わりに
文字コード
アセンブラ 〜MS-DOSの世界〜
このページの先頭に戻る
トップページに戻る
このページの先頭に戻る
トップページに戻る
|
前ページへ :
トップへ :
練習問題へ
次はフラグを見て分岐する命令です。
ニーモニック |
意味 |
意味 |
フラグ |
JA JAE JB JBE JC JE JG JGE JL JLE JNA JNAE
JNB JNBE JNC JNE JNG JNGE JNL JNLE JNO JNP JNS JNZ
JO JP JPE JPO JS JZ |
Jump if avobe Jump if avobe or equal Jump if below Jump if below or equal
Jump if carry Jump if equal Jump if great Jump if great or equal
Jump if less Jump if less or equal Jump if not avobe Jump if not avobe or equal
Jump if not below Jump if not below or equal Jump if not carry Jump if not equal
Jump if not great Jump if not great or equal Jump if not less Jump if not less or equal
Jump if not overflow Jump if not parity Jump if not sign Jump if not zero
Jump if overflow Jump if parity Jump if parity even Jump if parity odd
Jump if sign Jump if zero |
上なら(符号なし) 以上なら(符号なし) 下なら(符号なし)
以下なら(符号なし) Carry Flag=1なら イコールなら 大きいなら(符号付き)
大きいか同じなら(符号付き) 小さいなら(符号付き) 小さいか同じなら(符号付き)
上じゃないなら=以下なら(符号なし) 以上じゃないなら=下なら(符号なし)
下じゃないなら=以上なら(符号なし) 以下じゃないなら=上なら(符号なし)
Carry Flag=0 = CF=1じゃないなら イコールじゃいなら 大きくないなら(符号付き)
大きくも同じでもないなら(符号付き) 小さくないなら(符号付き)
小さくも同じでもないなら(符号付き) オーバーフローでないなら
Parity Flag=0 = PF=1じゃないなら マイナスでないなら
ゼロじゃないなら オーバーフローなら Parity Flag=1なら
パリティが奇数(PF=1)なら パリティが偶数(PF=0) マイナスなら
ゼロなら |
CF=0 and ZF=0 CF=0 CF=1 CF=1 and ZF=1 CF=1 ZF=1 ZF=0 and SF=OF
SF=OF SF<>OF ZF=1 or SF<>OF CF=1 or ZF=1 CF=1 CF=0 CF=0 and ZF=0
CF=0 ZF=0 ZF=1 or SF<>OF SF<>OF SF=OF ZF and SF=OF OF=0 PF=0
SF=0 ZF=0 OF=1 PF=1 PF=1 PF=0 SF=1 ZF=1
|
たくさんあって、ごちゃごちゃしていてわかりずらいかと思います。覚え方としては
いくつかあります。英語で覚える人、フラグで覚える人。よく見ると同じものがいくつかあります。
例えば、「JAE」=「JNB」。意味で考えると、「Jump if above or equal=以上なら」と
「Jump if not below=下でないなら=以上なら」同じですね。フラグをみると両方「CF=0」
ならジャンプしますから、動作も同じです。アセンブラによってマシン語(2進数の羅列)に
変換されても同じです。これらは人間が意味と照らし合わせて覚えやすいように、
同じ命令を複数用意してあるのです。
ところで、何が大きかったり、小さかったりするのでしょう? これは
「CMP」命令と関係しているのです。
「CMP AX,BX」で、AXの方が○○だったらジャンプするわけです。
「CMP AX,BX」の次に「JA 100h」とあったら、
AXが上の時にジャンプします。
さて次に不思議なのが、「JZ」と「JE」。「Jump if Zero」と「Jump if equal」。
フラグはどちらも「ZF=1」の時にジャンプする。なんで「ゼロ」と「イコール」が
同じ意味なんでしょうか? 「CMP」命令を考えると「イコール」はわかりますよね。
前にも書きましたが「CMP」は「SUB」と同じように引き算をして、そのフラグだけを
結果に残す命令なのです。したがって、引き算の結果0になれば、「ゼロ」と考え
られますし、同じ値なら(ようするに引いた結果0)「イコール」と考えられます。
まぁ、よく使うものはそのうち自然と覚えてくるので、別に覚える必要は
ないでしょう。
前ページへ :
トップへ :
練習問題へ
|