Почему 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.