Названия регистров :)

Тема в разделе "WASM.HEAP", создана пользователем ioctl_method, 28 дек 2009.

  1. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    http://ax.totallyexplained.com/
    И все-таки eXtended Подразумавалось, что A - простой сумматор(8 бит), а AX - расширенный(16 бит).
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Надо было потом делать так : AXX - 32 бита и AXXX - 64 :)
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    valterg
    тогда уж так A - простой сумматор(8 бит), AX - расширенный(16 бит), AXXX - 32 бита и AXXXXXXX - 64 :)
     
  4. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Mikl___
    почему А, а не AL/AH? =) вроде АХ расширенный по отношению к этим двум....
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    NeuronViking
    Ну я так понимаю, что когда был 8 битный процессор еще не предполагалось, наверное, что эти регистры станут частями 16битных в будущем.
     
  6. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    нет здесь никакой закономерности в названиях.
    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 ... (фантазии не хватило)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    maksim_
    кстати, регистры во большинстве отладчиков (а так же в порядке,засовываем в стек по pusha) идут в последовательности eax-ecx-edx-ebx, а вовсе не по алфавиту.
    полагаю, что как-то связано с
    UPD: Возможно, в 8080 регистры назвали тупо по алфавиту, а потом придали первым четырем осмысленную расшифровку. хотя почему последние два H и L не знаю
    UPD2: загуглил интересную вещь
    Код (Text):
    1. The 8086 took these 8080 registers and mapped them sort of like this:
    2.     * A -> AL
    3.     * H -> BH, L -> BL; HL -> BX; M -> [BX]
    4.     * B -> CH, C -> CL; BC -> CX
    5.     * D -> DH, E -> DL; DE -> DX
    8086 объеденил регистровые пары 8080 в 16битные регистры.
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Great
    В Z80 насколько я помню через пару регистров HL можно было выполнять обращения к памяти, видимо их назвали от слов High и Low.
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Господа... стыдно такое не знать )
    Вы хотя бы откройте Intel Manuals, Volume 1: Basic Architecture . Раздел 3.4. И до конца его почитайте так..
    Там есть про все и про High bites , Low bites, и про назначения регистров и многое другое.
    Эх...
     
  10. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    Great дело не в алфавите, а в удобстве программирования.

    я вообще не понимаю толка от всех этих названий. только путаницу вводят, особенно на x64. имхо, нужно было изначально придумывать обычные мнемоники r0, r1... как сделано на всех _нормальных_ архитектурах. хоть код получается более читаемым.
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    IA-32 вообще один сплошной костыль (про 64 бита не в курсе - не кодил), чего тут удивляться)
     
  12. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Ну дык, это было сделано потому что не все регистры x86 взаимозаменяемы! Например порты и умножение/деление очень любят аккумулятор EAX как единственно допустимый регистр. А LOOP любит регистр ECX как единственно допустимый... А если просто нумеровать регистры то это приведет к технологии VLIW (очень длинная инструкция). А благодаря специализации и именам регистров возможны очень короткие опкоды типа 40 или 90

    С другой стороны, когда смотришь как компилят языки высокого уровня (Дельфи =))) ) то такое чувство что они напрочь забывают о специализации регистров и юзают их просто по номерам. Кста, природные порядок регистров неалфавитный и опрелеяется номером mod 8

    С интересом читал сегодня старинные эзотерические опусы Акилы про опкоды. А кода один чувак недавно поднял здесь эту тему то его осмеяли... =)))
     
  13. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    persicum
    наверное я тебя удивлю, но у авр'а тоже не все регистры взаимозаменяемы, тем не менее, они называются r0..r31. да и прогать под него на асме ничуть не сложнее, чем под х86.

    что касается компиляторов - тут вопрос спорный почему они так делают. с одной стороны оптимизация по скорости, с другой по размеру, с третьей сложность реализации. вот и получается: заюзать loop или dec ecx ; jnz или add ecx, -1 ; jnz или... первой короче, но медленней и компилятор должен знать что такое loop и уметь его использовать. вобщем тут не всё так просто. команд море, а как они работают, что быстрее, в каких случаях - наверное, даже разработчики всего не знают :)))
     
  14. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Однакож для тех пар регистров, которые умеют объединяться в 16 битные слова введены мнемоники X Y Z, чтобы совсем не офигеть при проганьи...
     
  15. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А там не только в спаривании отсутствует взаимозаменяемость. Результат умножения всегда попадает в R1:R0; непосредственные операнды для загрузки и логических операций могут быть только у R16-R31... Это что сходу вспомнил.
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Great
    А 64-битное расширение -- ещё хуже :)

    Насколько помню, это связано с кодировкой регистров в командах: (E)AX - 0, (E)CX - 1, E(DX) - 2, E(BX) - 3 и т.д.
     
  17. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    с MMX тоже масло масленное получилось, мультимедиа расширение, а XMM это значится расширение над расширением =))) однако с номерами и взаимозаменяемостью там полный хоккей. Так приятно xmm0, xmm1 и так далее
     
  18. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    persicum
    только если бы они назывались m0..m7 и x0..x7 было бы еще лучше
     
  19. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Код (Text):
    1. m0      equ xmm0
    :))
     
  20. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    cupuyc
    Ясное дело, что можно и регистры и команды переименовать, только в этом случае программу потом целиком читать придётся, или надеяться на интуицию и верить, что в команде movq m0,m1 действительно регистры, а не регистр и метка.