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

あなたは

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

アセンブラ入門内検索

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


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



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

トップ-> アセンブラ入門:2章.MOV命令-> 2-4.メモリーへの転送

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



2-4.メモリーへの転送

  メモリーへの転送(メモリーからの転送)は2種類の方法がある。「直接アドレス法」と 「間接アドレス法」である。

2-4-1.直接アドレス法

  直接アドレス法とは、メモリーのアドレスを指定して転送する方法である。 例えば、「DATA」という変数にALレジスタの内容を転送したい場合、下記のように書く。
mov DATA,al
  また、決まったアドレスに書き込みたい場合は、下記のように[・・・]で囲う。
mov [1000h],al

  メモリーに即値を代入したい場合はちょっと面倒になる。例えば、変数DATAに、 0を代入したい場合、その0が「00h」(バイト)か「0000h」(ワード)か「00000000h」 (ダブルワード)かアセンブラにはわからないからである。レジスタの場合は、 レジスタの大きさがわかっているために、このようなことは起こらない。しかし、 メモリー←即値の場合はどの単位なのか指定してやらなければならない。 その場合、下記のように「byte ptr」「word ptr」などと指定する。ただし コンパイラの種類によってはどこに「byte ptr」を書くのかに差がある。 詳しくはお手持ちのコンパイラのマニュアルを参照してください。
mov byte ptr DATA,0
mov word ptr DATA,0
   or
mov DATA,byte ptr 0
mov DATA,word ptr 0

2-4-2.間接アドレス法

  間接アドレス法とはメモリーのアドレスをレジスタを使って指定する方法を言う。 C言語で言う「ポインタ」である。
mov bx,offset DATA
mov byte ptr [bx],0
   or
mov [bx],byte ptr 0
   or
mov [byte ptr bx],0
  ただし使用できるレジスタは下記のもの(80286以下のCPU)しかも値いることができない。
[BX]、[SI]、[DI」
[BX+SI]、[BX+DI]、[BP+SI]、[BP+DI]
[BX+disp]、[SI+disp]、[DI+disp」
[BX+SI+disp]、[BX+DI+disp]、[BP+SI+disp]、[BP+DI+disp]

  ※disp : 即値


2-4-3.ワード以上の単位の場合の注意

  ワード以上の単位でメモリーに格納する場合、ちょっとした注意が必要になる。 「mov [1000h],word ptr 1234h」とした場合、1000h番地には「34h」が入り、 1001h番地には「12h」が入る。これはx86系CPUの仕様で、他のCPUでは逆になる場合もある。

  また、ダブルワードの場合も同様に逆順に入るため、 「mov [1000h],dword ptr 12345678h」とした場合、1000h番地から 78h,56h,34h,12hと入る。


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