鱼C论坛

 找回密码
 立即注册
查看: 318|回复: 1

汇编文件创建默认地址在哪?

[复制链接]
发表于 2024-5-27 07:36:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 chenshiye 于 2024-5-27 07:40 编辑

1.
这个地址输入不对吗?换成第二种方式就可以 为什么这种不行 ?
DATAS SEGMENT
    ;此处输入数据段代码
   
    FILENAME1 DB 'E\AMYFILE1.TXT',00
   
    HANDLE1 DW ?
   
    BUFFER DB 3 DUP(?)
    LEN DW ?
   
    ERROR1 DB 'Can Not Open File!',0dh,0ah,'$'  
        ERROR2 DB 'Can Not Creat File!',0dh,0ah,'$'  
        ERROR3 DB 'Reading File Wrong',0dh,0ah,'$'  
        ERROR4 DB 'Wrinting File Wrong!',0dh,0ah,'$'  
       
DATAS ENDS

用汇编语言创建文件,这个串记录文件创建的地址,为什么说我创建失败呢?



2.
DATAS SEGMENT
    ;此处输入数据段代码
   
    FILENAME1 DB 'AMYFILE1.TXT',00
   
    HANDLE1 DW ?
   
    BUFFER DB 3 DUP(?)
    LEN DW ?
   
    ERROR1 DB 'Can Not Open File!',0dh,0ah,'$'  
        ERROR2 DB 'Can Not Creat File!',0dh,0ah,'$'  
        ERROR3 DB 'Reading File Wrong',0dh,0ah,'$'  
        ERROR4 DB 'Wrinting File Wrong!',0dh,0ah,'$'  
       
DATAS ENDS
这种情况创建的文件默认是创建在哪里了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-27 07:36:52 | 显示全部楼层
在汇编语言中,创建文件的地址并不是由字符串直接指定的,而是由操作系统(如Windows)提供的系统调用来实现的。

对于第一个串"D:\桌面\SQBR4OIIP4G~V21Y237D80W.png",如果你使用的是Windows操作系统的API进行文件创建,那么这个地址应该是一个有效的文件路径。如果你说创建失败,可能是因为路径不存在、权限不够等原因导致的。

对于第二个串"D:\桌面\1QS%5BXAOI{A4WS[BJGLN4KG9.png",这样的路径是非法的,因为它包含了非法字符(比如"%", "{", "["等)。在Windows操作系统中,文件路径是有一定规则的,只能包含字母、数字、下划线和点号,并且不能包含特殊字符。创建文件时,系统会根据你指定的路径来创建文件,但是不合法的路径会导致文件无法正常创建或保存,可能会出现错误提示。

要在汇编语言中创建文件,可以通过调用操作系统提供的系统调用来实现。具体步骤包括:

1. 调用`CreateFile`函数,指定文件路径、访问模式、共享方式等参数,以获取一个文件句柄。
2. 根据返回的文件句柄,调用`WriteFile`函数写入数据。
3. 最后,调用`CloseHandle`函数关闭文件句柄。

以下是一个示例代码,使用汇编语言(MASM)在Windows下创建一个文件:
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib

.data
filePath db "D:\桌面\myfile.txt", 0

.code
main PROC
    ; 准备参数
    invoke CreateFile, addr filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
    mov ebx, eax ; 保存返回的文件句柄

    ; 写入数据
    mov edx, offset dataToWrite
    mov ecx, sizeof dataToWrite
    invoke WriteFile, ebx, edx, ecx, NULL, NULL

    ; 关闭句柄
    invoke CloseHandle, ebx

    ; 退出程序
    invoke ExitProcess, 0

main ENDP

.data
dataToWrite db "Hello, World!", 0

end main

注意,以上代码只是一个示例,具体实现需要根据具体的汇编语言和操作系统进行调整。同时,操作系统和编程环境的不同可能会导致代码的差异。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表