【发布时间】:2014-02-17 00:08:41
【问题描述】:
我试图用 NASM 组装一个文件,但它指向了文件中的这一行:
mov al, byte ptr es:[bx]
说:
error: comma, colon or end of line expected
我发现一个page on this site 说 NASM 不喜欢“ptr”这个词,如果我写的话会很高兴:
mov al, byte es:[bx]
相反。所以我把“ptr”这个词拿出来,NASM还是不高兴。当我省略“ptr”这个词时,这是 NASM 给我的:
warning: register size specification ignored
和:
error: invalid combination of opcode and operands
这是第 22 条陷阱!无论我是否输入“ptr”这个词,NASM 都很生气。有人可以帮我解决这个问题吗?
【问题讨论】:
-
我不使用 NASM 但尝试:
mov al, [es:bx]或mov al, byte [es:bx]... 也有一段时间了,但 es:bx 可能不是有效的 x86 地址,尝试使用 di,@ 987654329@ 或[es:di]... -
为什么 es:bx 不是有效地址而 es:di 是?我可以将 bx 设置为我想要的任何值,我可以将 di 设置为我想要的任何值。
-
这不是关于你可以设置什么——而是关于处理器可以执行什么......我认为它是有效的,尝试我建议的替代语法,看看是否有效。
-
es:bx应该是一个有效的组合,但正如@GuySirton 提到的,段覆盖应该放在括号内(即mov al, byte [es:bx]) -
cx不是 16 位代码寻址的有效基址/索引。请参阅英特尔软件开发人员手册第 2 卷第 2.1.5 节中的表 2.1。
标签: nasm