あなたは
人目のアセンブラの受講生です。 |
アセンブラ入門内検索
アセンブラトップ
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-2.コンパイル
まだMOV命令しかやっていないので、プログラムを作ることもできません。なぜなら、
プログラムを終了して、処理をOS(このホームページではMS-DOSを前提としている)
に処理を戻すという処理もできないからです。しかし、実際にプログラムを実行
しなければつまらないので、解説が出てくるまで丸暗記してほしい部分が結構あるが
ご了承ください。
ところで、MS-DOSの実行形式のファイルは3種類あります。拡張子が「.BAT」
、「.COM」そして「.EXE」です。「.BAT」は
バッチファイルといって、実行したいプログラムをどのような順番で実行するかと言った
テキスト形式のもので、プログラムとはちょっと違います。詳しくはMS-DOSの本やマニュアルを
参照してください。「.COM」ファイルは、マシン語の羅列です。
扱うセグメントレジスタはすべて同じ値を示し、1つのセグメント領域しか
使わないのです。つまりFFFFh(64Kbytes)を越えるプログラムは書けません。初心者には
これが一番わかりやすいので、本ホームページはすべてこの形式で書いてあります。
「.EXE」ファイルは、複数のセグメントにわたってプログラムが書けます。
一般には、プログラム本体が書いてあるセグメント、データを格納するセグメントと
言った風に、用途によってセグメントを使い分けています。
では、下記のようなプログラムを書いてください。
CODE SEGMENT
ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE
.186
ORG 100h
START:
mov ah,2
mov dl,'A'
int 21h
mov ax,4c00h
int 21h
ENDS
END START
; 一部のコンパイラでは、
;CODE ENDS
; END START
;と記述しなければいけないようです
|
青いところがプログラムです。黒いところは「.COM」ファイルを作るという
おまじないです。本ホームページでは「.COM」しか扱わないので、
以後この部分を省略しますが、プログラムを実際に作るときにはこの部分も
入力してください。
まず1行目で、1つ目のセグメントの名前を「CODE」にすると
定義しています。そして2行目で、DS,CS,ES,SSレジスタはこのCODEセグメントを
指すようにしています。つまり1つのセグメントしか使わず、「.COM」
ファイルということになります。
3行目は80186以上のCPUを前提としていることをコンパイラに伝えています。
「.COM」ファイルでは、実際のプログラムが始まるのは、プログラムが
ロードされたセグメントの100h番地から始まるので、4行目でそのことを定義しています。
そして、最後の2行で、プログラムの終わりを宣言しています。プログラムの終わりというのは、
MS-DOSに戻るという意味ではなく、コンパイラにここまでがプログラムだよと伝えるだけです。
では次にプログラムの解説をします。
- mov ah,2
- 前のページで解説したMOV命令です。AHレジスタに2を代入します。
- mov dl,'A'
- 文字をシングルクォーテーションで囲うと、その文字コードを返します。すなわち、
'A'の文字コード41hをDLレジスタに代入しています。
- int 21h
- システムコールと呼ばれるもので、AH=2の状態でINT 21hを実行すると、
DLに入っている文字1文字ディスプレイに表示します。後で解説しますので、
ここではそういうものだと覚えておいてください。
- mov ax,4c00h
- AXレジスタに4C00hを代入しています。
- int 21h
- これもシステムコールです。AXに4C00hが入っていると言うことは、AHに4Ch、ALに0が
入っています。AHに4Chが入っているときにINT 21hを実行すると、プログラムが
終了して、MS-DOSに処理が移ります。これも覚えておいてください。
|
さて、これを実行形式「.COM」ファイルにしなければなりません。
エディターで上のプログラムを書いたら、「TEST.ASM」というファイル名で
保存してください。(別にファイル名は好きなものでよいが、拡張子は「.ASM」)
- BorlandaのTurbo Assemblerの場合
-
- TASM TEST.ASM
- TLINK /t TEST.OBJ
の順で、実行します。最初の「TASM」で、エラーが出る場合には、
どこか間違ってプログラムを書いていることになります。ここでエラーにならなくても、
いざ実行するとエラーになったり、暴走したりすることもあるので、気をつけてください。
- MASM32の場合
-
- ml /c /Fl test.asm
- link /t test.obj,test.com,nul,nul
の順で、実行します。link.exeは、MASM32に同梱されている物ではなく、16bitリンカが必要になります。
できた「TEST.COM」を実行してみてください。「A」と表示されたら成功です。
前ページへ :
トップへ :
次ページへ
|