2017-05-26 31 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

我剛剛意識到,這段代碼使我處於一個無限循環,因爲bx不斷變化爲「句柄」中的值,以便使用int 21h,是否有任何其他寄存器可用於替代此部分的bx mov al ,es:[bx] mov ah,es:[bx + 1] –

+0

@GabrielSilva,我用'SI'取代了'BX',這個寄存器可以完成這項工作。 –