汇编语言写文件读文件代码分析(18)

内容来自于《Intel汇编语言程序设计》(第四版)第11章--------32位Windows编程。

 

我们的整个顺序应该是,首先将内容写入文件(如果没有文件,将会创建新文件),然后将内容从文件中读出。

 

首先来看一下将数据写入文件:

 

 

TITLE Using WriteFile                  ( WriteFile.asm )

 

INCLUDE Irvine32.inc

 

.data

buffer BYTE "This text is written to an output file.",0dh,0ah

bufSize = ( $ - buffer)

errMsg BYTE "Cannot create file",0dh,0ah,0

filename BYTE "output.txt",0

fileHandle DWORD ?                      ; handle to output file

bytesWritten DWORD ?                 ; number of bytes written

 

.code

main PROC

         INVOKE CreateFile,

         ADDR filename , GENERIC_WRITE , DO_NOT_SHARE , NULL ,

         CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , 0

         mov fileHandle , e

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言中,可以通过系统调用来实现文件操作。下面是一个简单的示例,演示如何在汇编语言中边文件: 1. 打开文件: 使用系统调用`open`来打开文件,并将返回的文件描述符保存在寄存器中。例如,可以使用`eax`寄存器来保存文件描述符。 2. 文件: 使用系统调用`read`来从文件取数据,并将取的数据保存在指定的内存位置。需要指定文件描述符、取数据的内存地址和取的字节数。 3. 文件: 使用系统调用`write`来将数据文件。需要指定文件描述符、要入的数据的内存地址和要入的字节数。 4. 关闭文件: 使用系统调用`close`来关闭文件。需要指定要关闭的文件描述符。 下面是一个简单的汇编语言程序示例,实现了边文件的功能: ```assembly section .data filename db "input.txt", 0 buffer db 100 buffer_size equ $ - buffer section .text global _start _start: ; 打开文件 mov eax, 5 ; 系统调用号:open mov ebx, filename ; 文件名 mov ecx, 0 ; 标志位:O_RDONLY(只) int 0x80 ; 调用系统调用 ; 检查是否成功打开文件 cmp eax, -1 je error ; 如果返回值为-1,表示打开文件失败 ; 文件 mov ebx, eax ; 文件描述符 mov eax, 3 ; 系统调用号:read mov ecx, buffer ; 缓冲区地址 mov edx, buffer_size ; 取的字节数 int 0x80 ; 调用系统调用 ; 检查是否成功文件 cmp eax, -1 je error ; 如果返回值为-1,表示文件失败 ; 文件 mov eax, 4 ; 系统调用号:write mov ebx, 1 ; 文件描述符:标准输出 mov ecx, buffer ; 缓冲区地址 mov edx, eax ; 入的字节数(使用之前取的返回值) int 0x80 ; 调用系统调用 ; 关闭文件 mov eax, 6 ; 系统调用号:close mov ebx, ebx ; 文件描述符 int 0x80 ; 调用系统调用 ; 退出程序 mov eax, 1 ; 系统调用号:exit xor ebx, ebx ; 返回值:0 int 0x80 ; 调用系统调用 error: ; 错误处理代码 ; ... ``` 请注意,上述示例仅为演示目的,实际使用时需要进行错误处理和适当的优化。另外,具体的系统调用号和参数传递方式可能因操作系统而异,请根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值