http://ax.totallyexplained.com/ И все-таки eXtended Подразумавалось, что A - простой сумматор(8 бит), а AX - расширенный(16 бит).
valterg тогда уж так A - простой сумматор(8 бит), AX - расширенный(16 бит), AXXX - 32 бита и AXXXXXXX - 64
NeuronViking Ну я так понимаю, что когда был 8 битный процессор еще не предполагалось, наверное, что эти регистры станут частями 16битных в будущем.
нет здесь никакой закономерности в названиях. ax bx cx dx si di bp sp eax ebx ecx edx esi edi ebp esp rax rbx rcx rdx rsi rdi rsp rbp r8 r9 ... (фантазии не хватило)
maksim_ кстати, регистры во большинстве отладчиков (а так же в порядке,засовываем в стек по pusha) идут в последовательности eax-ecx-edx-ebx, а вовсе не по алфавиту. полагаю, что как-то связано с UPD: Возможно, в 8080 регистры назвали тупо по алфавиту, а потом придали первым четырем осмысленную расшифровку. хотя почему последние два H и L не знаю UPD2: загуглил интересную вещь Код (Text): The 8086 took these 8080 registers and mapped them sort of like this: * A -> AL * H -> BH, L -> BL; HL -> BX; M -> [BX] * B -> CH, C -> CL; BC -> CX * D -> DH, E -> DL; DE -> DX 8086 объеденил регистровые пары 8080 в 16битные регистры.
Great В Z80 насколько я помню через пару регистров HL можно было выполнять обращения к памяти, видимо их назвали от слов High и Low.
Господа... стыдно такое не знать ) Вы хотя бы откройте Intel Manuals, Volume 1: Basic Architecture . Раздел 3.4. И до конца его почитайте так.. Там есть про все и про High bites , Low bites, и про назначения регистров и многое другое. Эх...
Great дело не в алфавите, а в удобстве программирования. я вообще не понимаю толка от всех этих названий. только путаницу вводят, особенно на x64. имхо, нужно было изначально придумывать обычные мнемоники r0, r1... как сделано на всех _нормальных_ архитектурах. хоть код получается более читаемым.
Ну дык, это было сделано потому что не все регистры x86 взаимозаменяемы! Например порты и умножение/деление очень любят аккумулятор EAX как единственно допустимый регистр. А LOOP любит регистр ECX как единственно допустимый... А если просто нумеровать регистры то это приведет к технологии VLIW (очень длинная инструкция). А благодаря специализации и именам регистров возможны очень короткие опкоды типа 40 или 90 С другой стороны, когда смотришь как компилят языки высокого уровня (Дельфи =))) ) то такое чувство что они напрочь забывают о специализации регистров и юзают их просто по номерам. Кста, природные порядок регистров неалфавитный и опрелеяется номером mod 8 С интересом читал сегодня старинные эзотерические опусы Акилы про опкоды. А кода один чувак недавно поднял здесь эту тему то его осмеяли... =)))
persicum наверное я тебя удивлю, но у авр'а тоже не все регистры взаимозаменяемы, тем не менее, они называются r0..r31. да и прогать под него на асме ничуть не сложнее, чем под х86. что касается компиляторов - тут вопрос спорный почему они так делают. с одной стороны оптимизация по скорости, с другой по размеру, с третьей сложность реализации. вот и получается: заюзать loop или dec ecx ; jnz или add ecx, -1 ; jnz или... первой короче, но медленней и компилятор должен знать что такое loop и уметь его использовать. вобщем тут не всё так просто. команд море, а как они работают, что быстрее, в каких случаях - наверное, даже разработчики всего не знают ))
Однакож для тех пар регистров, которые умеют объединяться в 16 битные слова введены мнемоники X Y Z, чтобы совсем не офигеть при проганьи...
А там не только в спаривании отсутствует взаимозаменяемость. Результат умножения всегда попадает в R1:R0; непосредственные операнды для загрузки и логических операций могут быть только у R16-R31... Это что сходу вспомнил.
Great А 64-битное расширение -- ещё хуже Насколько помню, это связано с кодировкой регистров в командах: (E)AX - 0, (E)CX - 1, E(DX) - 2, E(BX) - 3 и т.д.
с MMX тоже масло масленное получилось, мультимедиа расширение, а XMM это значится расширение над расширением =))) однако с номерами и взаимозаменяемостью там полный хоккей. Так приятно xmm0, xmm1 и так далее
cupuyc Ясное дело, что можно и регистры и команды переименовать, только в этом случае программу потом целиком читать придётся, или надеяться на интуицию и верить, что в команде movq m0,m1 действительно регистры, а не регистр и метка.