読者です 読者をやめる 読者になる 読者になる

ShiftCrops つれづれなる備忘録

CTF関連の事やその他諸々

雪降ったのに。。。

Assembly

昨晩はかなり雪が降りましたね~ うちのプリウス君もフロントガラスが結構斜めってるから効率的に雪を上に積もらせてましたよw

で、今日は学校行事「クロスカントリーレース」がある筈なんです。 多摩川沿いを9kmほど走ります。 んでこの雪ですよ。無くなると高をくくってました。 そこに連絡網「あるそうですよ~」 ・・・・・。

よし、今日はアセンブリで入出力をやってみよう。 あ、そういえば昨日言いませんでしたが、この中に出てくる単独の数字は十進法で表されたものです。ほかの2進数は○○b、16進法は0x○○とか、○○hとかで表記します。 あと、自分の開発環境はWindowsなのでシステムコールDOSWindows)用です。 あしからず

DOSのINT 21hの機能

キーボードからの文字列入力:AHレジスタに0Ahをセット(DX=バッファの先頭アドレス) ファイル作成:3Chをセット (DX=ファイル名の先頭アドレス、CX=作成モード、CF=結果、AX=ファイルハンドル) ファイルオープン:3Dhをセット (DX=ファイル名の先頭アドレス、AL=モード、CF=結果、AX=ファイルハンドル) ファイルクローズ:3Ehをセット (BX=ファイルハンドラ、CF=成功か否か) ファイルからの読み取り:3Fhをセット (DX=保存先の先頭アドレス、CX=読み取るバイト数、BX=ファイルハンドラ、CF=結果、AX=読み取ったバイト数) ファイルへの書き込み:40hをセット (DX=聞き込み元先頭アドレス、CX=書き込むバイト数、BX=ファイルハンドラ、CF=結果、AX=書き込んだバイト数)

多いね、ちと覚えるの大変だわ~ で、今日はこんなの作りました。 まあ見てもらえば分かるけど、ただ単純に「srcfile.txt」の中身を任意の名前のファイルにコピーするだけw [c] ;bcopy.asm bits 16 org 100h mov dx,input mov ah,09h int 21h mov ah,0ah mov dx,sfile mov byte [sfile],80h int 21h mov bh,0 mov bl,byte [sfile+1] mov [sfile+bx+2],byte 30h mov dx,crlf mov ah,09h int 21h mov dx,output mov ah,09h int 21h mov ah,0ah mov dx,dfile mov byte [dfile],80h int 21h mov bh,0 mov bl,byte [dfile+1] mov [dfile+bx+2],byte 30h

mov dx,sfile+2 mov al,0 ;読み出しモード mov ah,3dh ;ファイルオープン int 21h jc endquit mov [ifh],ax

mov dx,dfile+2 mov cx,0 ;通常ファイル mov ah,3ch ;ファイル作成 int 21h jc endquit mov [ofh],ax

mov dx,crlf mov ah,09h int 21h

readb: mov bx,[ifh] ;入力ファイルハンドル mov dx,buf mov cx,1 mov ah,3fh ;読み込み int 21h

test cx,ax jz endquit jc endquit

mov dl,[buf] call putc

mov bx,[ofh] ;出力ファイルハンドル mov dx,buf mov cx,1 mov ah,40h ;書き込み int 21h jmp readb

endquit: mov ah,3eh mov bx,[ifh] int 21h mov bx,[ofh] int 21h

mov ax,4c00h int 21h

putc: push ax mov ah,02h int 21h pop ax ret

input db "Put the name of the copied file>$" output db "Put the name of the make file>$" crlf db 0dh,0ah,"$"ifh dw 0ofh dw 0sfile resb 80hdfile resb 80hbuf resb 2 [/c]

本に書いてあったコードを見ながら手を加えた程度ですので、そんな大したものではないです。 でもま、こうやって技術は重ねてくものだよね