Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么';下面的程序集代码读取文件有什么问题?_Assembly_Dos_Nasm - Fatal编程技术网

Assembly 什么';下面的程序集代码读取文件有什么问题?

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]。我们必须获得一个内存地址或存储在该地址

您的缓冲区似乎是一个字节。如果您真正想要的是255字节的数组,那么您应该使用(假设这是针对NASM的):

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