为什么AL寄存器周围没有括号?

问题描述 投票:0回答:1

根据我的理解,%eax表示eax包含的值,而(%eax)表示转到eax保留的地址

seta20.1:
inb $0x64, %al        # Wait for not busy
testb $0x2, %al
jnz seta20.1
movb $0xd1,%al        # 0xd1 −> port 0x64
outb %al, $0x64

然后,为什么在%al周围没有括号?因为如果我想通过使用寄存器将val移到地址,我应该这样做:

mov %ebx, (%eax)

右?

assembly x86 att
1个回答
1
投票

inb基本上是从IO空间到%al的负载。因此比喻为mov (%edx), %al

[%al是源或目标寄存器,而不是指针,因此,%al周围绝对不会有括号。

如果要在任何地方设置parens,它将位于IO空间地址附近,例如(%dx)。或0x64()

但是inb / outb不使用普通的寻址模式,它们使用IO空间地址的立即数或%dx。因此,AT&T语法在outb目标或inb源中对其使用立即或注册语法。 IO空间是特殊的,不能以与内存相同的方式进行寻址。

© www.soinside.com 2019 - 2024. All rights reserved.