我正在为我的大学班级做一个大项目。
我在 .data 部分中放置了一个字符串/数组,如下所示:
stringread BYTE DUP(STRSIZE)
我主要有:
push OFFSET stringread
push esi
call ReadFileLine
pop esi
pop OFFSET stringread
但我收到此错误:
undefined symbol: stringread
我认为我的问题是我没有正确声明字符串。
起初我想也许我不被允许像这样直接将字符串压入堆栈,但我查看了教授的示例代码,他有类似的东西:
array DWORD 1,2,3,4,5
push OFFSET array
编辑:我用这个替换了声明,这似乎已经修复了它:
stringread BYTE STRSIZE DUP(?)
stringread BYTE DUP(STRSIZE)
对于 MASM 来说,这一行在语法上是错误的。因此,通常被认为是标签的东西并没有以这种方式被识别,因此一旦您在 main 中的
push OFFSET stringread
行上使用符号 stringread ,它就会被报告为“未定义”。DUP
运算符您需要多少个重复项。查看DUP(STRSIZE)
,您似乎错误地将重复计数放在括号之间。一种解决方案可能是:
stringread BYTE STRSIZE DUP(0)
push OFFSET stringread push esi call ReadFileLine pop esi pop OFFSET stringread
OFFSET stringread
是所谓的“立即”,又名只是一个数字。虽然您可以 push
立即,但您不能 pop
立即!add esp, 4
pop edx