Assembly 什么';我的汇编代码有什么问题?

Assembly 什么';我的汇编代码有什么问题?,assembly,Assembly,我试着编写一个程序,询问用户的名字,并用他的名字问候用户。错误应为逗号、冒号或行尾。我怎样才能纠正这个问题?我不知道我要在哪里改正 %include "asm_io.inc" segment .data MES DB 10,13,'ENTER A STRING:$' BUF DB 255,256, DUP, (0) MES1 DB 10,13,'HELLO $' segment .text global _asm_main _asm_main: enter 0,0 pusha

我试着编写一个程序,询问用户的名字,并用他的名字问候用户。错误应为逗号、冒号或行尾。我怎样才能纠正这个问题?我不知道我要在哪里改正

%include "asm_io.inc"

segment .data
 MES DB 10,13,'ENTER A STRING:$'
 BUF DB 255,256, DUP, (0)
 MES1 DB 10,13,'HELLO  $'

segment .text
global _asm_main
_asm_main:

enter 0,0
pusha

       MOV AX,DATA
       MOV DS,AX                 
       MOV AH,09H                

       LEA DX,MES
       INT 21H

       MOV AH,0aH                
       LEA DX,BUF
       INT 21H

       MOV AH,09H                
       LEA DX,buf
       INT 21H

       LEA SI,BUF              

       MOV AX,0
       MOV AL,BYTE PTR [SI]
       ADD SI,AX
       MOV BYTE PTR [SI+1],'$' 


       MOV AH,09H
       LEA DX,BUF+2
       INT 21H

       MOV AX,4C00H
       INT 21H

       popa

mov ax, 0
leave
ret

字节PTR
是MASM/TASM语法。您发布的代码看起来(大部分)像是为NASM编写的,因此您应该删除
PTR
(即使用
MOV-AL、BYTE[SI]
等)

纠正什么?您尚未描述当前代码的问题所在。第34行和第36行中的错误为逗号、冒号或行尾。可能是
字节PTR[SI]
字节PTR[SI+1]
中的间接寻址语法有问题。你用的是什么汇编程序?我用的是nasm@zx485在这行中,你需要去掉最后两个逗号<代码>BUF DB 255256,DUP,(0)再次出现许多错误。我想不出正确的代码(好吧,像
LEA DX,BUF+2
这样的东西是无效的NASM语法。如果你打算使用NASM,不要使用面向TASM/MASM的教程。内存访问的大小已经用AL寄存器指定了,所以我们不需要使用“byte”或“byte ptr”。也就是说,使用
MOV AL[SI]
。但是对于使用立即操作数的内存访问,我们需要使用它。例如:
MOV BYTE[SI+1],“$”