トップ->アセンブラ入門

あなたは

人目のアセンブラの受講生です。

アセンブラ入門内検索

目次
アセンブラトップ
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の世界〜


・ このページの先頭に戻る
・ トップページに戻る



・ このページの先頭に戻る
・ トップページに戻る

トップ-> アセンブラ入門:4章.分岐-> 4-8.PUSH, POP

←前ページへ :  トップへ :  次ページへ→



4-8.PUSH, POP

  スタック領域は「CALL」「RET」命令のためだけの領域ではない。 スタック領域を使える命令はほかに「PUSH」「POP」命令がある。これは レジスタを一時的に保管する命令と、それを戻す命令である。

PUSH	SRC

   動作:SPを2減らし、SS:SPにSRCを格納
  影響を受けるフラグ:なし
    SRC:レジスタ(16bit、32bitのみ)、セグメントレジスタ、メモリー(16bit、32bitのみ)
POP	DEST

   動作:SS:SPの内容をDESTに代入し、SPを2増やす
  影響を受けるフラグ:なし
    DEST:レジスタ(16bit、32bitのみ)、セグメントレジスタ、メモリー(16bit、32bitのみ)

  • 一時的にレジスタを保存する場合に用いる。
  • サブルーチンではレジスタは保存するのが一般的で、その保存の際によく使われる。
  • 多用するとバグの原因になる。
  • なお、80186(V30)以降は即値(16bit、32bitのみ)をプッシュすることもできるようになった。
  • プッシュしたレジスタ(メモリー)とポップするレジスタは異なっていてもかまわない。
    例えば「mov ds,es」という命令はない。これを「push es」「pop ds」とすれば行うことができる。
    また、「mov DATA1,DATA2」といったメモリー間の転写はできないが、「push DATA2」「pop DATA1」と すればレジスタを破壊せずに行うことができる。
  • AL,AHなど8bitレジスタ、8bitのメモリーをプッシュ、ポップすることはできない。
  • 「CALL」「RET」命令で使われるスタック領域と「PUSH」「POP」命令で使われるスタック領域は 同じ領域なので、「push 100h」「ret」とすると、100h番地にジャンプすることと同じことになる。 逆に「CALL」で飛んできたサブルーチンの最初に「POP」命令を用いると、呼ばれたアドレスの次の 命令のあるアドレスの番地がわかる。
    サブルーチン内で「PUSH」と「POP」が対になっていないと「RET」命令でどこに 戻るかわからない(大抵の場合暴走する)。


←前ページへ :  トップへ :  次ページへ→