“未定义符号:stringread”是什么意思?

问题描述 投票:0回答:1

我正在为我的大学班级做一个大项目。

我在 .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(?)
string assembly x86 masm undefined-symbol
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.