我在为我的大学班级做一个大项目。
我把一个字符串/数组放在.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(?)
型
1条答案
按热度按时间cbjzeqam1#
字符串
对于MASM来说,这一行在语法上是错误的。因此,通常被认为是标签的东西不能被识别出来,所以当你在 main 中的
push OFFSET stringread
行使用符号 stringread 时,它被报告为“undefined”。需要告诉
DUP
运算符您需要多少次重复。查看DUP(STRSIZE)
,您似乎错误地将重复计数放在括号之间。一个解决方案可能是:的数据
OFFSET stringread
是一个所谓的“立即数”,也就是一个数字。虽然你可以push
立即数,但你不能pop
立即数!您可以通过以下方式移除推送的值:
add esp, 4
pop edx