我正在尝试使用 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
STR(Store Task Register)是指令助记符。您将其用作不带冒号的标签。str: db ...
会起作用的。
YASM 在这里给出了更有用的错误消息:string.asm:33: error: unexpected DB/DW/etc. after instruction
这是一个很好的做法总是使用一个:
在标签名称之后,无论您是标记代码还是数据。对于人类读者来说,它更清晰,并且针对未来的指令助记符或汇编程序指令更具前瞻性。
这也是一个好主意构建与-Worphan-labels所以如果你写类似的东西你会收到警告cqde
(not cqde:
)本身就在一条线上。如果没有该选项,它会在该行放置一个标签。使用该选项,您会收到警告并注意到您输入了错误cdqe
! (或任何其他无操作数 x86 指令。)
顺便说一句,别忘了使用cmp byte [edi],' '
使用带有立即数和内存操作数的指令时需要操作数大小修饰符,因为它不会使用不明确的操作数大小进行汇编。
另外,使用有意义的标签名称。喜欢.space_found
代替lab1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)