Почему нет скобок, окружающих регистр AL? - PullRequest
0 голосов
/ 28 сентября 2019

Насколько я понимаю,% 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)

правильно?

1 Ответ

1 голос
/ 29 сентября 2019

inb - это, в основном, нагрузка из пространства ввода-вывода в %al.Таким образом, аналогия выглядит так: mov (%edx), %al.

%al - это регистр источника или назначения, а не указатель, поэтому, конечно, никогда не бывает парней вокруг %al.

Если бы происходилочтобы быть где-то паренами, это должно быть вокруг адреса пространства ввода-вывода, например (%dx).Или 0x64().

Но inb / outb не используют нормальные режимы адресации, они используют немедленный или %dx для адреса пространства ввода-вывода.Таким образом, синтаксис AT & T использует немедленный или зарегистрированный синтаксис для них в месте назначения outb или в источнике inb.Пространство ввода-вывода является особенным и не может быть адресовано так же, как память.

...