2012-07-14 64 views
0
;the code read 4 bytes from file and print it on screen 
bits 16 

org 100h 

jmp start 

filename db 'example.file',0 

handle dw 0 

buffer db 255 

start: 

    mov ah,3dh 
    mov al,0 
    mov dx,filename 
    int 0x21 
    mov handle,ax 

    mov ah,3fh 
    mov cx,4 
    mov dx,buffer 
    mov bx,handle 
    int 21h 

    mov dx,buffer 
    add dx,ax 

    mov bx,dx 
    mov byte[bx],'$' 

    mov dx,buffer 
    mov ah,9 
    int 21h 
    mov ah,4ch 
    int 21h 
+0

代碼正在打印垃圾。我認爲問題是在mov mov handle,ax ....中,但我無法弄清楚。 – divanshu 2012-07-14 16:31:41

+1

用'mov [handle],ax'可能會更好。然後'mov BX,[處理]'。我們必須得到一個內存地址或存儲在地址上的值。 – 2012-07-14 16:42:08

+1

單步執行代碼。是否將正確的數據讀入緩衝區? – 2012-07-14 16:52:30

回答

0

您的緩衝區看起來是單個字節。如果你真正想要的是255個字節數組,那麼你應該使用(假設這是NASM):

buffer: times 255 dup 0

此外,如前所述,您應該使用括號在NASM代碼訪問的價值指向由一個地址。只要mov ax,foo將foo的地址放入ax,而不是存儲在該地址的值。

+0

確實如此,但有足夠的未使用(已執行)代碼來適應正在讀取的4個字節。所以,緩衝區的大小本身就不成問題。 – 2012-07-14 18:12:59

+0

如果他還像另一位評論者那樣將方括號放在句柄的旁邊,則表明它應該可以工作,假定該文件存在。 – Michael 2012-07-14 18:29:13