2017-12-11 12 views
0

アセンブリ内のファイルからバイトを読み取った後、現在のファイルの位置が更新されます。そのバイトを変更し、読み込んだ同じ位置のファイルに書き込むことはできますか?私は単に読み取りバイトのASCIIコードにしてファイルに書き戻すよりも、NUMBER [0]を追加するために、上記のコードで試してみましたx8086アセンブリファイルの内容を変更します

READ_LOOP: 
    MOV AH,3FH 
    MOV BX, HANDLE 
    MOV CX, 1 
    LEA DX, BUFFER 
    INT 21H 
    INC SI 
    ;if no byte was read we reached the end of file or an error occured 
    CMP AL, 1 
    JB EOF_END_ERR 

    ;write the read content to output 
    ;MOV AH, 02H 
    ;MOV DL, BUFFER 
    ;INT 21H 

    JMP ENCRYPTING 
    JMP FINAL 

ENCRYPTING: 
    XOR AX,AX 
    MOV DL, BUFFER[0] 
    ADD DL, NUMBER[0] 
    MOV TEMP, DL 

    MOV AH, 42H 
    MOV BX, HANDLE 
    MOV CX,0FFFFH 
    MOV DX, 0FFFFH 
    MOV AL,1 
    INT 21H 

    XOR DX,DX 
    MOV DL, 65 
    MOV BX, HANDLE 
    MOV CX,1 
    MOV AH, 40H 
    INT 21H 

    JMP READ_LOOP 

にTASMで働いています。しかし、ファイル内に書かなければならないものはありません。

+1

ファンクション42hを使用してファイルポインタを戻します。 – Jester

+0

@Jesterと私はそれを使用して1バイトで戻ることができますか?私に例を挙げてもらえますか? – dbogdan

+1

ラルフ・ブラウンの割り込みリストの文書を参照してください。http://www.ctyme.com/intr/rb-2799.htm –

答えて

1

サービスAH=42hは同じものを使用できます。ファイルからバイトを読み取った後、ファイルポインタが更新されます。ファイル内の前の読み込みバイトを別のものに置き換えるには、先にファイルポインタを1バイト後ろに移動して(置き換えるバイトを指すように)、次のコードでこれを行う必要があります。

あなたは今、新しいバイトでバイトを上書きすることができます上記のコードの実行後

mov al, 1  ; relative to current file position 
    mov ah, 42h  ; service for seeking file pointer 
    mov bx, handle 
    mov cx, -1  ; upper half of lseek 32-bit offset (cx:dx) 
    mov dx, -1  ; moves file pointer one byte backwards (This is important) 
    int 21h 

を、これは次のコードで行うことができます。

コードは、現在の位置から1バイト後方ファイルポインタを移動します:

f ROMファイルポインタの現在の位置:ファイル操作後藤hereの詳細については

mov ah, 40h   ; service for writing to a file 
    mov bx, handle  
    mov cx, 1   ; number of bytes to write 
    mov dx, offset char ; buffer that holds the new character to be written 
    int 21h 

+0

私はcx、0ffffh、dx 0ffffhを入れても、それはC2では-1なので、私の問題はdxにオフセットを入れていなかったと思うだけです。 – dbogdan

+1

これは 'handle'です(ファイルハンドルのように)、 'handler'ではなく。英語では、「ハンドル」は、たとえばドアを開けることができるものです。 「ハンドラ」は、空港でバッグを取り扱う人、または割り込みなどを処理する機能です。 (ちょっといい答えです、これはいいコメントですごくきれいで、プログラム全体のこの部分を作るための不必要なコードではありません) –

+0

@dbogdan質問を編集して別の質問をしたのはなぜですか?これは別の質問を投稿する必要があります。前の質問に戻り、新しい質問を別に投稿してください。 – Ahtisham

関連する問題