以下汇编代码读取文件有什么问题?

问题描述:

;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

您的缓冲区看起来是单个字节。如果你真正想要的是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