「入出力」の編集履歴(バックアップ)一覧はこちら
「入出力」(2009/08/30 (日) 19:08:02) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*システムコール
***文字の出力
例)
mov ah, 02h
mov dl, 31h
int 21h
***文字列の出力
例)
mov ah, 09h
mov dx, msg ;出力する文字列の先頭アドレスをDXレジスタにセットする
int 21h
***文字の入力
例)
mov ah, 08h
int 21h
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inpc.asm]]
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inpch.asm]]
***文字列の入力
例)
mov ah, 0Ah ;キーボードからの文字列入力
mov dx, buf
mov byte[buf], 20h ;バッファの長さ
int 21h
※入力された文字列はバッファの3バイト目以降に入る。バッファの2バイト目には入力された文字列が入る
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inps.asm]]
***ファイルからの読み込み
例)
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レジスタに保存される
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/sample.asm]]
***ファイルへの書き込み
例)
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=書き込んだバイト数
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/bcopy.asm]]
***ポートからの入力
&bold(){IN}
ポートからALレジスタ (またはAXレジスタ、EAXレジスタ)にバイト(またはワード、ダブルワード)のデータを入力する
&bold(){INS}
ポートからストリングを入力する
INSB, INSW, INSDがある.メモリの伸び方はディレクションフラグに依存する
REPプリフィックスを使って、この命令をCX回繰り返す
***ポートからの出力
&bold(){OUT}
OUTS, OUTW, OUTDがある。
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/beeps.asm]]
***ストリング操作
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増やす
*システムコール
***文字の出力
例)
mov ah, 02h
mov dl, 31h
int 21h
***文字列の出力
例)
mov ah, 09h
mov dx, msg ;出力する文字列の先頭アドレスをDXレジスタにセットする
int 21h
***文字の入力
例)
mov ah, 08h
int 21h
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inpc.asm]]
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inpch.asm]]
***文字列の入力
例)
mov ah, 0Ah ;キーボードからの文字列入力
mov dx, buf
mov byte[buf], 20h ;バッファの長さ
int 21h
※入力された文字列はバッファの3バイト目以降に入る。バッファの2バイト目には入力された文字列が入る
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/inps.asm]]
***ファイルからの読み込み
例)
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レジスタに保存される
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/sample.asm]]
***ファイルへの書き込み
例)
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=書き込んだバイト数
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/bcopy.asm]]
***ポートからの入力
&bold(){IN}
ポートからALレジスタ (またはAXレジスタ、EAXレジスタ)にバイト(またはワード、ダブルワード)のデータを入力する
&bold(){INS}
ポートからストリングを入力する
INSB, INSW, INSDがある.メモリの伸び方はディレクションフラグに依存する
REPプリフィックスを使って、この命令をCX回繰り返す
***ポートからの出力
&bold(){OUT}
OUTS, OUTW, OUTDがある。
[[sample>http://makotof.unfuddle.com/svn/makotof_android/assembler/Assembler101/beeps.asm]]
***ストリング操作
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バイトコピーする