入出力

「入出力」の編集履歴(バックアップ)一覧はこちら

入出力」(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バイトコピーする

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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