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

あなたは

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

アセンブラ入門内検索

目次
アセンブラトップ
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-5.サブルーチン

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



4-6.サブルーチン

  サブルーチンはアルゴリズムのところで 解説しているので、サブルーチンが何かはここでは省略する。

  どこから呼ばれるかわからないサブルーチンでは、戻るアドレスも変わるので、 「JMP」命令を使用することはできない。(できなくはないんだけど) そこでこのような用途には「CALL」と「RET」を用いる。命令から推測できるように、 「CALL」でサブルーチンにジャンプし、「RET」で元の場所に戻ってくる。 元の場所に戻ってくるということは、どこかにアドレスを保存しておかなくては ならない。そのようなレジスタはないのだから、どこかのメモリーに置かれている わけである。これはスタックセグメント(SS)のスタックポインタ(SP)が指す 領域に保管されている。(ちょっと違うけど)

  まず、「CALL」命令が実行されると、SPを2減らす。次に戻ってくるアドレス (CALL命令の次の命令があるアドレス)をSS:SPに保管する。そして、CALL命令のオペランド が指すアドレスにジャンプする
  イメージ的には次のような感じである

	sub	sp,2
	mov	[ss:sp],ip		
	jmp	ADDRESS

  逆に「RET」命令では、SS:SPが指す2byte(16bit)の内容のアドレスにジャンプし、 SPを2増やす。

  下記に例を示した。

START:
	mov	dl,'0'
	call	DISP
	inc	dl
	call	DISP
	inc	dl
	call	DISP
	inc	dl
	call	DISP
	inc	dl
	mov	ax,4c00h
	int	21h

DISP:
	mov	ah,2
	int	21h
	ret

  実行結果:「0123」と表示する。

  さて、ジャンプ命令では「short jmp」、「near jmp」と「far jmp」があることは すでに述べた。「CALL」も「near call」と「far call」がある。意味も書き方も同じで、 「call  far [ds:1000]」のように書く。「near call」の書き方は上の例に示した 通りである。

  また、サブルーチンから他のサブルーチンもしくは自分自身を呼び出しも可能で ある(これはよくやる)。さらに、サブルーチンから他のサブルーチンへ 「jmp」したり、「jmp」で、メインプログラムに戻ってきても良いが、バグを防ぐ目的、 サブルーチンの汎用性といった問題から、お勧めしない。


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