这是我一直在尝试弄清楚的事情。我想做一个MASM程序,它有一个自定义结构体和一个这些结构体的数组,然后将其保存到一个文件中。我找不到任何关于应该/可以如何完成的好信息。我认为resb半指令可能会有帮助。无论如何,这是我到目前为止所做的。但显然有麻烦。基本上长期我想做一个简单的DB一样的MASM程序,但这是一个出路,仍然在学习阶段。
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
.data?
MyStruct STRUCT
string db 4 dup(0)
dw1 DWORD ?
dw2 DWORD ?
dw3 DWORD ?
MyStruct ENDS
;MyArray MyStruct 20 dup(?)
MyArray resb 10*sizeof MyStruct ; not sure of how to go about creating an array of structs
.data
fileName db "myfile.dat"
properNouns db "John", "Mike", "Emily", "Mary", "David",0
.code
; open the file for writing
invoke CreateFile,fileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
mov handle,eax
; write the array to the file
invoke WriteFile,handle,MyArray,sizeof MyArray,written,NULL
; close the file
invoke CloseHandle,handle
1条答案
按热度按时间pgky5nke1#
您需要在
MyStruct
中将dup(0)
更改为未初始化的dup(?)
。在未初始化的
.data?
段中,可以用途:这将为20个
MyStruct
结构的数组创建空间。注解
resb
不起作用,因为它是NASM指令,而不是MASM指令。.data?
(BSS)段将由Windows程序加载程序清零。.Data?
(BSS)段必须在程序启动后由程序员设置为零。如果您没有将.data?
内存清零,则未初始化的数据可能包含垃圾,这些垃圾可能包含零,也可能不包含零。