【发布时间】:2016-11-12 04:00:06
【问题描述】:
我正在尝试使用 NASM 制作汇编代码程序,但由于某种原因,它一直给我一个错误。它说在我声明一个字符串后它需要一个逗号、冒号、装饰符或行尾,但我不明白这怎么可能是一个问题请告知。
section .text
global main
main:
mov edi,str
lab3:
cmp [edi],' '
je lab1
cmp [edi],0x0
je lab2
mov eax,4
mov ebx,1
mov ecx,edi
mov edx,1
int 0x80
inc edi
jmp lab3
lab1:
inc edi
mov eax,4
mov ebx,1
mov ecx,nwln
mov edx,1
int 0x80
jmp lab3
lab2:
mov eax,1
int 0x80
section .data
str db 'this is a test',0x0 ;this is the line giving the error
nwln db 0xa
【问题讨论】:
-
nasm 要求标签后有冒号,即
str: db 'this is a test',0x0 -
@Jester:不,它没有,只有当它们也是有效的助记符时:P 这就是
-Worphan-labels选项存在的原因。将str更改为str1时,OP 的程序会组装。 (当然,cmp mem, immediate指令中缺少的操作数大小除外) -
最好一直使用它,少一个头痛。另外,如果明年 intel 引入与您的标签名称冲突的新指令会发生什么......
-
@Jester:完全同意它解决了问题并且是风格/面向未来的好主意,只是不是从语言规则的角度来看。将更新我的答案以提出建议。