assembly undefined symbol:stringread是什么意思

ndasle7k  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我在为我的大学班级做一个大项目。
我把一个字符串/数组放在.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(?)

cbjzeqam

cbjzeqam1#

stringread BYTE DUP(STRSIZE)

字符串
对于MASM来说,这一行在语法上是错误的。因此,通常被认为是标签的东西不能被识别出来,所以当你在 main 中的push OFFSET stringread行使用符号 stringread 时,它被报告为“undefined”。
需要告诉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

相关问题