Assembly 什么';下面的程序集代码读取文件有什么问题?
您的缓冲区似乎是一个字节。如果您真正想要的是255字节的数组,那么您应该使用(假设这是针对NASM的):Assembly 什么';下面的程序集代码读取文件有什么问题?,assembly,dos,nasm,Assembly,Dos,Nasm,您的缓冲区似乎是一个字节。如果您真正想要的是255字节的数组,那么您应该使用(假设这是针对NASM的): buffer:times 255 dup 0 此外,如前所述,您应该在NASM代码中使用括号来访问地址指向的值。只需mov ax,foo将foo的地址放入ax中,而不是存储在该地址的值。代码是打印垃圾。我想问题出在指令mov handle,ax。。。。但是我没办法弄明白。使用mov[handle],ax可能会更好。然后稍后mov BX,[handle]。我们必须获得一个内存地址或存储在该地址
buffer:times 255 dup 0
此外,如前所述,您应该在NASM代码中使用括号来访问地址指向的值。只需
mov ax,foo
将foo的地址放入ax中,而不是存储在该地址的值。代码是打印垃圾。我想问题出在指令mov handle,ax。。。。但是我没办法弄明白。使用mov[handle],ax
可能会更好。然后稍后mov BX,[handle]
。我们必须获得一个内存地址或存储在该地址的值。是否将正确的数据读入缓冲区?DOS程序只能使用8.3文件名<代码>示例。文件扩展名最多超过3个字符。你确定你的代码没有因此而无法打开文件吗?open函数是否返回failure?是,但有足够的未使用(已执行)代码来容纳正在读取的4个字节。所以,缓冲区大小本身不可能是问题。如果他也像另一位评论员建议的那样在句柄周围放上方括号,那么它应该可以工作,假设文件存在。
;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