2017-05-26 4 views
1

基本的に私は迷路を作成してそれをテキストファイルに保存する必要があります。後で開くことができます。私はすでに迷路の部分を作成していますが、私の人生は保存できません私は知っている私はintファイルに物事を書くために21hを使用することができます私はちょうどテキストファイル(全体の80行と25列)にすべてを書く方法を知らないは、dosbox画面に表示されます。テキストモード画面をテキストファイルに書き込む。 (MASM)

mov  ah,3CH ; File creation 
mov  cx,0 ; 
mov  dx, OFFSET filename 
int  21h 
mov  handle, ax 

mov ax,0b800h 
mov es,ax 
ciclo2: 
    mov ah, es:[bx] 
    mov al, es:[bx+1] 
    mov var1, ax 
    mov ah,40h 
    mov cx,2 
    mov dx,var1 
    mov bx,handle 
    int 21h 
    inc bx 
    inc bx 
    cmp bx, 4000 
    jne ciclo2 
fim: 
    mov  ah,3Eh ; Closing the file 
    mov  bx,handle 
    int  21h 

    mov  ah,4CH ; Closing the program 
    INT  21H 

私はMASMとdosBOXを使用しています。

+0

何が問題なのですか、間違った結果が得られましたか? –

+0

画面上の内容をtxtファイルに書き込むことになっていますが、何も印刷しないことになります。 –

+0

あなたのコードに4つのエラーが見つかりました。以下の答えをチェックしてください(便利な場合は、答えのチェックマークをクリックすることを忘れないでください)。 –

答えて

0

次はあなたのコードスニペットと修正で4つのエラーです:あなたがコンテンツを表示するには、ファイルを読み込むとき

mov ax,0b800h 
mov es,ax 
xor si,si  ;◄■■ INITIALIZE SI = 0. 
ciclo2: 
    mov aL, es:[si] ;◄■■ CHARACTER IN AL. 
    mov aH, es:[si+1] ;◄■■ COLOR IN AH. 
    mov var1, ax 
    mov ah,40h 
    mov cx,2 
; mov dx,var1  ;◄■■ WRONG : VARIABLE VALUE. 
    lea dx,var1  ;◄■■ RIGHT : VARIABLE ADDRESS. 
    mov bx,handle 
    int 21h 
    inc si 
    inc si 
    cmp si, 4000 
    jne ciclo2 
fim: 

、画面を覚えていることは、最初の文字(mov al, es:[si])以降の色(mov ah, es:[si+1])が含まれていその順序でバイトを表示するか、画面に奇妙な文字や色が表示されます。

+0

私は、このコードでは、intが21hを使用するためにbxが "handle"の値に変更され続けているので、無限ループに置かれていることに気づきました。この部分にbxの代わりに使用できるレジスタがあります。 mov al 、es:[bx] mov ah、es:[bx + 1] –

+0

@GabrielSilva、私は 'BX'を' SI'に置き換えました。 –

関連する問題