Assembly 检查字符串中的行中是否有3个相同的字符

Assembly 检查字符串中的行中是否有3个相同的字符,assembly,nasm,Assembly,Nasm,我的代码不起作用。 问题在于lea(第6行)。NetBeansIDE说“操作码和操作数的组合无效”。 有什么办法可以让它工作吗? 任何帮助都将不胜感激 global _main section .data text: db "fdkvemDFderft", 0 section .text _main: lea si, text no: lodsb or al,al jz exit cmp al,[si] jnz no cmp al,[si

我的代码不起作用。 问题在于lea(第6行)。NetBeansIDE说“操作码和操作数的组合无效”。 有什么办法可以让它工作吗? 任何帮助都将不胜感激

global _main
section .data
text: db "fdkvemDFderft", 0

section .text
_main:
    lea si, text
no:
    lodsb
    or al,al
    jz exit
    cmp al,[si]
    jnz no
    cmp al,[si+1]
    jnz no
    ;code
exit: 
    ;code

    mov eax, 4C00h
    ret

尝试:

lea加载寻址模式地址计算产生的地址。因此,我们将标签表示为地址

很多人可能只是

mov si, text

谢谢然而,它仍然不起作用。尽管现在它编译起来没有问题。当我写‘mov-si,text’时,它会告诉我“coff格式不支持非32位重定位”,这是另一个问题。不要生成COFF格式——这没有什么意义,因为您使用MS/DOS函数调用终止程序(顺便说一句,应该将4c00H加载到AX中)。您可能想要生成一个COM文件,它是一个组织为0100H的普通二进制图像。COFF主要用于Unix,在ELF或多或少地取代它之前。实际上,您不需要终止—您只需要开始设置终止,但没有完成它。虽然AX中的4c00可能也是终止windows程序的一种方式,但我对windows一无所知。
lea si, [text]
mov si, text