调用元神操作系统的API写U盘文件

1. 背景

本文介绍了在元神操作系统中向U盘写文件的方法,示例所指的U盘是单一分区的、FAT32文件系统的盘。

2. 方法

(1)本例通过调用元神操作系统的API来向U盘写文件,写入U盘根目录下的文件“test.txt”的内容为预先存放在内存中的字符串“123456789”,该字符串有9个数字字符,代码如下所示:

use32

START:
	pusha

	call demo_write_usb_file
	
	popa
	iret

include 'api_def.inc'

OS_API equ 0x00030C16
API_PARAM equ 0x03000000
SEG_BASE equ 0x00040000

file_name_usb db 'u1:\test.txt',0
data_buf db '123456789'
demo_write_usb_file:
	pusha
	mov edi, API_PARAM
	mov dword [fs:edi], API_WRITE_USB_FILE
	mov dword [fs:edi+4], 3		;3 parameters
	xor eax, eax
	mov ax, ds
	add eax, SEG_BASE
	mov bh,byte [fs:eax+7]
    mov bl,byte [fs:eax+4]
    shl ebx,16
    mov bx,word [fs:eax+2]
    mov eax, ebx
	add ebx, file_name_usb
	add eax, data_buf
	mov dword [fs:edi+8], ebx	;parameter_1: file name
	mov dword [fs:edi+12], eax	;parameter_2: start address of buffer to store result
	mov dword [fs:edi+16], 9	;parameter_3: file size in bytes

	call pword [fs:OS_API]
	
	popa
	ret

代码中先对系统调用参数进行设置:第一个参数的API类型设置为API_WRITE_USB_FILE,表示写U盘文件;第二个参数设置为3,表示该API需要3个输入参数;第三个参数为要写的文件名称,传入的是绝对文件路径的起始地址;第四个参数为内存地址,存放要写入文件的内容,本例使用预定义的变量data_buf,存放要写入文件的内容“123456789”;第五个参数为文件内容的长度,以字节为单位,本例中设置为9,表示文件内容的长度为9个字节。

这里需要说明的是第三个参数,即文件名称。该名称为文件的绝对路径,路径中出现的子目录可以是已经存在的子目录,也可以是不存在的子目录,此时会自动创建子目录,换句话说,该API调用会自动创建路径中不存在的所有子目录,不需要保证路径中的所有子目录都事先建立好。另外,第四个参数可以为预定义的变量,也可以为动态申请的内存,但其中的内容都是以二进制表示的,不存在文本模式和二进制模式的区别。

设置好调用参数后通过call指令进行调用,将内容写入U盘文件。

本例中的API类型定义如下:

API_WRITE_USB_FILE	equ	0x00000009

(2)运行程序

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

程序运行前,先用CK命令查看U盘根目录下的文件,如图所示,U盘根目录下有3个文件,一个系统隐藏文件,一个元神操作系统文件hos.bin,一个应用软件文件demo.bin。

通过ZX命令执行上述示例程序后,再用CK命令查看U盘根目录,发现多了一个文件test.txt,该文件就是示例代码创建的。

再用DK命令打开该文件,发现该文件的内容为“123456789”,刚好是示例程序写入该文件的内容。至此,说明示例程序成功执行完成。

3. 总结

本文示例程序通过调用元神操作系统的API来向U盘写文件。文件名称以绝对路径的形式提供,包含着完整的路径,而且不要求路径中的所有子目录都是已经创建好的,对于不存在的子目录,该调用会自动创建。同样的,该调用所写的目标文件可以是已经存在的,也可以是事先不存在的,换句话说,该API调用可以用于修改文件,也可以用于新建文件。至于文件数据,则是以二进制形式存在和操作的,即二进制模式,没有文本模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

De-Chang Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值