NASM“忽略寄存器大小规格”

Isa*_*hen 5 nasm

我试图用NASM汇编文件,但它指向文件中的这一行:

mov al, byte ptr es:[bx]
Run Code Online (Sandbox Code Playgroud)

说:

error: comma, colon or end of line expected
Run Code Online (Sandbox Code Playgroud)

在该网站上发现了一个页面,上面写着NASM不喜欢“ ptr”一词,如果我这样写,会很高兴的:

mov al, byte es:[bx]
Run Code Online (Sandbox Code Playgroud)

代替。所以我拿出“ ptr”一词,NASM仍然不高兴。当我省略“ ptr”一词时,这是NASM给我的:

warning: register size specification ignored
Run Code Online (Sandbox Code Playgroud)

和:

error: invalid combination of opcode and operands
Run Code Online (Sandbox Code Playgroud)

这是一个陷阱22!不管我是否输入“ ptr”一词,NASM都很生气。有人可以帮我吗?

Isa*_*hen 5

我知道了!如果我这样写,NASM 会很高兴:

mov al,byte [es:bx]
Run Code Online (Sandbox Code Playgroud)

就像盖伊·瑟顿说的那样。如果我从指令中省略“字节”这个词,这就是会发生的情况。如果指令是这样的:

mov al, [es:bx]
Run Code Online (Sandbox Code Playgroud)

NASM 可以看到我想移动一个字节,因为我将它存储在 al 中,它不会抱怨。但是,如果指令是这样的:

mov [es:bx],0xff
Run Code Online (Sandbox Code Playgroud)

在 NASM 看不到我想要存储多少内存 0xff 的地方,它会给你这样一个错误:

error: operation size not specified
Run Code Online (Sandbox Code Playgroud)

重要的是要知道,尤其是在您使用教程时,NASM 不会以常规方式使用。