入出力

システムコール

文字の出力


例)
   mov ah, 02h
   mov dl, 31h
   int 21h

文字列の出力


例)
   mov ah, 09h
   mov dx, msg  ;出力する文字列の先頭アドレスをDXレジスタにセットする
   int 21h

文字の入力


例)
   mov ah, 08h
   int 21h


文字列の入力


例)
   mov ah, 0Ah         ;キーボードからの文字列入力
   mov dx, buf
   mov byte[buf], 20h  ;バッファの長さ
   int 21h

※入力された文字列はバッファの3バイト目以降に入る。バッファの2バイト目には入力された文字列が入る


ファイルからの読み込み


例)
   mov dx, sfile    ;DX=ファイル名文字列
   mov al, 0        ;モード(AL:0 = 読み出し, 1 = 書き込み, 2 = 読み書き)
   mov ah, 3Dh      ;ファイルオープンを指定
   int 21h

sfile db "srcfile.txt", 0 ;ファイル名 (0で終わる文字列)
ファイルが開くとAXレジスタにファイルハンドルが入る

   mov [fh], ax      ;ファイルハンドル

データを読み込むためには、AHレジスタを3FhにしてINT21を実行する
   mov bx, [fh]    ;ファイルハンドル
   mov dx, buf     ;DX=バッファ
   mov cx, 1       ;読み込むバイト数
   mov ah, 3Fh     ;読み込む
   int 21h         ;読み込む (結果はCF:0=成功, 1=エラー)

読み込みが成功すると、読み込んだ文字がバッファに、読み込んだバイト数がAXレジスタに保存される


ファイルへの書き込み


例)
   dfile db  "destfile.txt", 0        ;ファイル名 (0で終わる文字列)
   
   ;入力ファイルオープン
   mov dx, sfile
   mov al, 0          ;モード(AL:0=読み出し, 1=書き込み, 2=読み書き)
   mov ah, 3Dh        ;ファイルオープンを指定
   int 21h
   jc  endquit        ;結果は(CF:0=成功, 1=エラー)

   mov [ofh], ax

新しいファイルを作成するには、CXレジスタに0を設定し、AHレジスタを3ChにしてINT21を実行する

   ;出力ファイルを作成
   mov dx, dfile      ;DX=ファイル名文字列
   mov cx, 0          ;通常ファイルを指定
   mov ah, 3Ch        ;ファイル作成
   int 21h
   jc  endquit        ;結果は(CF:0=成功, 1=エラー)
   mov [ofh], ax

ファイルにデータを書き込む場合は、AHレジスタに40hを設定してINT21を実行する

   mov bx, [ofh]      ;出力ファイルハンドル
   mov dx, buf        ;DX=バッファ
   mov cx, 1          ;書き込むバイト数
   mov ah, 40h        ;書き込みを指定
   int 21h            ;結果は(CF:0=成功, 1=エラー)
                      ;AX=書き込んだバイト数

ポートからの入力


IN

ポートからALレジスタ (またはAXレジスタ、EAXレジスタ)にバイト(またはワード、ダブルワード)のデータを入力する

INS

ポートからストリングを入力する
INSB, INSW, INSDがある.メモリの伸び方はディレクションフラグに依存する
REPプリフィックスを使って、この命令をCX回繰り返す

ポートからの出力


OUT
OUTS, OUTW, OUTDがある。
sample

ストリング操作


SIレジスタのオフセットアドレスの内容をDIレジスタのオフセットアドレスにコピーする
その後、SIレジスタとDIレジスタの内容をインクリメント・デクリメントする

MOVSB =
   1) MOV AL, [SI]
   2) MOV [DI], AL
   3) INC(DEC) SI
   4) INC(DEC) DI

DFフラグが0であればそれぞれのポインタをインクリメントし、 (CLD命令)
1であれば、デクリメントする (STD命令)

MOVSD

   [DS:SI]の内容4バイトを[ES:DI]に転送し、DF=0のときは、SI,DIを4増やす

REPと組み合わせることで繰り返し回数を指定できる
例)
   mov cx 128
   rep movsd   ;128*4バイトコピーする

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年08月30日 19:08
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。