Почему Apple использует R8l для регистров байтов вместо R8b?

Я видел это в разделе Создание кода 64-битной очистки

╔═════════════════════╤══════════════════════════════════════════════════════╗
║ Register name       │ Description                                          ║
╠═════════════════════╪══════════════════════════════════════════════════════╣
║ R8                  │ A 64-bit register.                                   ║
╟─────────────────────┼──────────────────────────────────────────────────────╢
║ R8d                 │ A 32-bit register containing the bottom half of R8.  ║
╟─────────────────────┼──────────────────────────────────────────────────────╢
║ R8w                 │ A 16-bit register containing the bottom half of R8d. ║
╟─────────────────────┼──────────────────────────────────────────────────────╢
║ R8l (Lowercase “l”) │ An 8-bit register containing the bottom half of R8w. ║
╚═════════════════════╧══════════════════════════════════════════════════════╝

С l Суффикс я сначала подумал, что это long зарегистрироваться как в синтаксисе GAS.

Почему Apple использует имя, отличное от всех остальных?

1 ответ

Решение

Как следует из комментария Росса Риджа, это связано с различием в соглашениях об именах в AMD и Intel.

Из руководства по программированию архитектуры AMD64, том 1: программирование приложений

3.1.2 64-битные регистры

В 64-битном режиме восемь новых GPR добавляются к восьми устаревшим GPR, все 16 GPR имеют ширину 64 бита, и младшие байты всех регистров доступны. На рис. 3-3 на стр. 27 показаны GPR, регистр флагов и регистр указателя инструкций, доступные в 64-битном режиме. GPR включают в себя:

  • Шестнадцать 8-битных младших байтовых регистров (AL, BL, CL, DL, SIL, DIL, BPL, SPL, R8B, R9B, R10B, R11B, R12B, R13B, R14B, R15B).
  • Четыре 8-битных старших байта регистров (AH, BH, CH, DH), адресуемых только тогда, когда префикс REX не используется.
  • Шестнадцать 16-битных регистров (AX, BX, CX, DX, DI, SI, BP, SP, R8W, R9W, R10W, R11W, R12W, R13W, R14W, R15W).
  • Шестнадцать 32-битных регистров (EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D).
  • Шестнадцать 64-битных регистров (RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15).

По сравнению с архитектурами Intel® 64 и IA-32 - Руководство разработчика ПО, том 1: Базовая архитектура

3.7.2.1 Регистр операндов в 64-битном режиме

Регистр операндов в 64-битном режиме может быть любым из следующих:

  • 64-разрядные регистры общего назначения (RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP или R8-R15)
  • 32-разрядные регистры общего назначения (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP или R8D-R15D)
  • 16-разрядные регистры общего назначения (AX, BX, CX, DX, SI, DI, SP, BP или R8W-R15W)
  • 8-битные регистры общего назначения: AL, BL, CL, DL, SIL, DIL, SPL, BPL и R8L-R15L доступны с использованием префиксов REX; AL, BL, CL, DL, AH, BH, CH, DH доступны без использования префиксов REX.
Другие вопросы по тегам