User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: Сомнительная мнемоника

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Сомнительная мнемоника

    Понадобилась команда jp (hl). Оказалось, действие у нее не соответствует мнемонике, ИМХО. Я думал, переход по адресу, имеющемуся в памяти, адресуемой регистром HL. А оказалось - переход по адресу, значение которого в регистре HL. Дык тогда должно быть jp hl (без скобок). Аналогично с jp(ix) и jp(iy).
    Кто что думает?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,421
    Спасибо Благодарностей отдано 
    1,717
    Спасибо Благодарностей получено 
    2,246
    Поблагодарили
    883 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Понадобилась команда jp (hl). Оказалось, действие у нее не соответствует мнемонике, ИМХО. Я думал, переход по адресу, имеющемуся в памяти, адресуемой регистром HL. А оказалось - переход по адресу, значение которого в регистре HL. Дык тогда должно быть jp hl (без скобок). Аналогично с jp(ix) и jp(iy).
    Кто что думает?
    Так обозначается переходы во многих архитектурах. Пример в DEC-архитектуре (PDP-11): jmp (R0); или на 680x0 аналогично.

    Само взятие регистра в скобки означает, что исполнительный адрес - это ячейка памяти, адресуемая данным регистром. А уж что делать с исполнительным адресом, взять из него операнд или перейти по исполнительному адресу - это зависит от команды. Поэтому и получается, что jmp (hl) - это получить исполнительный адрес равный HL, и перейти по нему. А в команде LD (ix+00),a - получить исполнительный адрес равный ix+00, и занести в эту ячейку регистр а.
    Последний раз редактировалось Titus; 18.04.2011 в 15:15.

  4. #3

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Само взятие регистра в скобки означает, что исполнительный адрес - это ячейка памяти, адресуемая данным регистром.
    Вот-вот. Т.е., в HL должна содержаться ссылка на ячейку памяти, по которой должен происходить переход в команде jp (hl). А в реале переход происходит по самому значению в HL, а не по адресуемой им ячейке памяти.

  5. #4

    Регистрация
    19.08.2008
    Адрес
    Украина, Львов
    Сообщений
    116
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Вот-вот. Т.е., в HL должна содержаться ссылка на ячейку памяти, по которой должен происходить переход в команде jp (hl). А в реале переход происходит по самому значению в HL, а не по адресуемой им ячейке памяти.
    HL - это и есть адрес ячейки памяти ( эээ, во внутрях процессора ). Поэтому, если рассматривать HL именно как адрес, запись jp (hl) имеет смысл - перейти на адрес, который лежит в регистре HL. С той же точки зрения jp label имеет смысл, поскоку label по сути является циферкой для компилятора, а не названием места, где лежит это значение %)

  6. #5

    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,198
    Спасибо Благодарностей отдано 
    40
    Спасибо Благодарностей получено 
    128
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Открывем книгу Родионова-Ларченко на стр. 95 и читаем внизу страницы: Безусловный переход по адресу, содержащемуся в регистре ss. Не смотря на внешиний вид операнда.
    ----
    В книге Микропроцессорный комплект Z80. Книга 1. Центральный процессор Z80 CPU, в пояснении так и обозначено, что в РС заносится значение из регистровой пары HL.
    Последний раз редактировалось null_device; 18.04.2011 в 22:02.
    Когда есть, но не знаешь где - это все равно, что нету.

  7. #6

    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А в i8080 команда записывалась иначе. PCHL т.е. поместить в регистр PC содержимое HL (хотя по их же логике команда должна была иметь вид mov pc,hl). И написание Интела и Зайлога кривое. Скобки указывают на косвенную адресацию, и уж понятно, что если бы команда писалась как JP HL, то это _не_ означало бы запустить команду записанную в HL. Это бессмысленно. Т.е. JP HL означало бы переход на адрес который лежит в HL, а JP (HL) то, что

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Я думал, переход по адресу, имеющемуся в памяти, адресуемой регистром HL.
    Но есть так, как есть.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  8. #7

    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне запись мнемоники тоже очень не нравилась. Если бы писали JP (#8000) или JP (METKA1) - тогда другое дело.

    Но дело все в том, что во время установки мнемоники таких крутых команд, как перейти по адресу, хранящемуся в памяти, было не густо. А теперь мнемоника путает. Но это 100% PC<-HL .
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  9. #8

    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,885
    Спасибо Благодарностей отдано 
    136
    Спасибо Благодарностей получено 
    135
    Поблагодарили
    83 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    Red face

    Цитата Сообщение от TomCaT Посмотреть сообщение
    …мнемоника путает.
    Честно скажу, сколько пишу под Z80 (а это больше 20 лет) никогда не возникало путаницы, сразу запомнил что это безусловный переход на HL. А вот что действительно периодически заставляет заглядывать в «методичку», так это какие команды влияют на какие флаги

  10. #9

    Регистрация
    03.05.2007
    Адрес
    St. Petersburg
    Сообщений
    297
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Круглые скобки в синтаксисе инструкций z80 добавляют проблем и в случаях с непосредственными операндами. Причем, если в случае JP (HL) это только вопрос формы записи (поскольку нет такой же инструкции без скобок), то с непосредственными операндами это порождает неоднозначность там, где допускаются круглые скобки в их математическом значении. Например, запись LD A, (0) может быть понята (и пользователем, и ассемблером) либо как инструкция вида LD A, #nn либо как инструкция вида LD A, (#nnnn).
    Higgins ZX Spectrum Emulator 8.10 alpha 3 available
    Please write us to report a bug or request a feature.

  11. #10

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Higgins Посмотреть сообщение
    Круглые скобки в синтаксисе инструкций z80 добавляют проблем и в случаях с непосредственными операндами. Причем, если в случае JP (HL) это только вопрос формы записи (поскольку нет такой же инструкции без скобок), то с непосредственными операндами это порождает неоднозначность там, где допускаются круглые скобки в их математическом значении. Например, запись LD A, (0) может быть понята (и пользователем, и ассемблером) либо как инструкция вида LD A, #nn либо как инструкция вида LD A, (#nnnn).
    (mem) - это всегда чтение из памяти по адресу mem для мнемоник Z80.
    Соотвественно LD A,(0) - это чтение нулевой ячейки памяти и только оно.
    a JP (HL) - это действительно команда с несоотвествием общему формальному признаку, правильнее бы её действительно было назвать LD PC,HL (хотя бы судя по тому, что есть LD SP,HL). Предлагаю просто смириться с этим фактом :-) Или потребовать у разработчиков АСМов для Z80 поддержки эквивалентной записи LD PC,HL для тех, кого смущает JP (HL).

    ---------- Post added at 12:19 ---------- Previous post was at 12:14 ----------

    Цитата Сообщение от Destr Посмотреть сообщение
    Продолжаем флеймить.
    Вот этого не надо :-)

    Цитата Сообщение от Destr Посмотреть сообщение
    JP (HL) - это по сути LD PC,HL

    Но с регпарой PC нет мнемоник вот и отплевались на JP (HL).
    Не заморачиваясь особо на интерпритацию и т.д.

    Если бы-была ДОСТАТОЧНО БОЛЬШАЯ группа таких команд (ну скажем CALL HL, да еще с учитыванием флагов или например DJNZ HL) - это другое дело...)
    Есть куча инструкций с неявной записью в мнемонике регистра PC - это команды JP|JR которые можно трактовать как LD PC,.... для JP и ADD PC,... для JR, причём они могут изменять содержимое PC по условию, чего нет ни для одной другой команды.
    Переход по регистру - это только JP (HL,IX,IY), больше нет.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •