当前位置: 首页 > news >正文

基于元神操作系统实现文件复制

1. 背景

本文介绍了在元神操作系统中通过API调用实现文件复制的方法,示例将硬盘里的JPG文件复制到U盘根目录下。

2. 方法

(1)编写程序

本例通过调用元神操作系统的API来实现文件复制,分三个步骤:首先,申请动态内存,用于存放文件的内容;其次,从硬盘中读取文件,将文件内容存储在所申请的内存区域;最后,将所读取的数据写入U盘文件。代码如下所示:

use32START:pushacall demo_copy_filepopairetinclude 'api_def.inc'OS_API equ 0x00030C16
API_PARAM equ 0x03000000
SEG_BASE equ 0x00040000input_file_name db 'd1:\sunset.jpg',0
output_file_name db 'u1:\sunset.jpg',0
demo_copy_file:pusha;memory allocationmov edi, API_PARAMmov dword [fs:edi], API_ALLOC_MEMORYmov dword [fs:edi+4], 0	    ;0 parametercall pword [fs:OS_API]      ;memory allocation: address in [edi+8], size in [edi+12]mov edx, [fs:edi+8]		;start address of memory allocated;read disk filemov dword [fs:edi], API_READ_DISK_FILEmov dword [fs:edi+4], 2		;2 parametersxor eax, eaxmov ax, dsadd eax, SEG_BASEmov bh,byte [fs:eax+7]mov bl,byte [fs:eax+4]shl ebx,16mov bx,word [fs:eax+2]mov eax, ebxadd ebx, input_file_namemov dword [fs:edi+8], ebx	;parameter_1: file namemov dword [fs:edi+12], edx	;parameter_2: start address of buffer to store resultcall pword [fs:OS_API]mov ecx, [fs:edi+8]		;file size in bytes;write usb filemov dword [fs:edi], API_WRITE_USB_FILEmov dword [fs:edi+4], 3		;3 parametersadd eax, output_file_namemov dword [fs:edi+8], eax	;parameter_1: file namemov dword [fs:edi+12], edx	;parameter_2: start address of buffer to store resultmov dword [fs:edi+16], ecx	;parameter_3: file size in bytescall pword [fs:OS_API]poparet

代码中先通过API_ALLOC_MEMORY来申请动态内存,所获取的内存地址将作为参数传给后续的读硬盘文件操作和写U盘文件操作。具体的操作和参数说明可以参考以前的博客。

之后通过API_READ_DISK_FILE来读取硬盘文件。本例读取的是“d1:\sunset.jpg”,即读取的是硬盘第一个分区的根目录下的图片文件sunset.jpg。将该文件的内容读取到上一步申请的内存区域,同时还获得了文件的大小,以字节为单位。具体的操作和参数说明可以参考以前的博客。

最后通过API_WRITE_USB_FILE来写U盘文件。本例将读取的内容写入“u1:\sunset.jpg”,即写入U盘第一个分区的根目录下的sunset.jpg文件,即写入元神操作系统所在U盘的根目录下。具体的操作和参数说明可以参考以前的博客。

(2)运行程序

将上述代码保存为demo.asm文件,用FASM编译该文件生成二进制文件demo.bin,并将文件复制到装有元神操作系统的U盘的根目录下,用该U盘启动进入元神操作系统,通过命令ZX执行该二进制文件,结果如下图所示:

执行示例代码之前,先通过CK命令查看U盘根目录下的文件,如图所示,U盘根目录下有4个文件,一个系统文件,两个bin文件,一个txt文件。

之后通过ZX命令执行示例代码,执行完成后再用CK命令查看U盘根目录,发现U盘根目录下多了一个文件sunset.jpg,该文件就是示例代码从硬盘中复制来的文件。

将该U盘插入另一台电脑,打开该JPG文件,如下图所示:

由上图可见,JPG文件已经成功复制。

3. 总结

本文示例程序通过元神操作系统的API调用来实现文件复制,是三个API调用组合的程序。示例从硬盘第一个分区的根目录读取JPG图像文件,并将读取的文件内容写入U盘根目录下的文件。此处的硬盘具有两个分区,使用NTFS文件系统;而U盘只有一个分区,使用FAT32文件系统。


http://www.mrgr.cn/news/25332.html

相关文章:

  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • 2024.9.12(k8s环境搭建2)
  • 一文搞懂Flink重要源码持续更新(目录)
  • LeeCode打卡第二十三天
  • 【算法】冒泡排序
  • ETC SLAVE状态解释
  • java的ReentrantLock原理
  • ffmpeg面向对象-rtsp拉流相关对象
  • Hash算法与Hash冲突
  • 【EI会议末轮截稿通知】第三届电子信息技术国际学术会议(EIT 2024)
  • 从制造业单项冠军到领航企业群,深圳要如何发力?
  • R语言论文插图模板第10期—正负柱状图
  • 攻防世界 CTF Pwn(一)
  • 提升开发效率的神器:编程工具盘点与应用体验
  • 再次进阶 舞台王者 第八季完美童模全球赛荣耀大使【梁悦源】赛场秀场超燃合集!
  • NoSQL之Redis配置与优化(2)
  • vue-router + el-menu
  • PMP证书速成秘籍:小白3月变身项目管理达人!
  • CLIP:Learning Transferable Visual Models From Natural Language Supervision
  • RK3568 初识