以下汇编代码读取文件有什么问题?
问题描述:
;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
答
您的缓冲区看起来是单个字节。如果你真正想要的是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
代码正在打印垃圾。我认为问题是在mov mov handle,ax ....中,但我无法弄清楚。 – divanshu 2012-07-14 16:31:41
用'mov [handle],ax'可能会更好。然后'mov BX,[处理]'。我们必须得到一个内存地址或存储在地址上的值。 – 2012-07-14 16:42:08
单步执行代码。是否将正确的数据读入缓冲区? – 2012-07-14 16:52:30