Важная информация

User Tag List

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

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

  1. #1
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

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

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

  3. #2
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,554
    Спасибо Благодарностей отдано 
    1,218
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 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
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,094
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #5
    Guru Аватар для Vadim
    Регистрация
    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
    [свернуть]

  7. #6
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,794
    Спасибо Благодарностей отдано 
    54
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    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
    [свернуть]


  8. #7
    Activist Аватар для Higgins
    Регистрация
    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.

  9. #8
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Продолжаем флеймить.

    JP (HL) - это по сути LD PC,HL

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

    Если бы-была ДОСТАТОЧНО БОЛЬШАЯ группа таких команд (ну скажем CALL HL, да еще с учитыванием флагов или например DJNZ HL) - это другое дело...)

    А так - чего спорить?
    Ну есть одна команда которая не слишком по правилам в мнемонический ряд попадает...
    Но она однозначна.
    И она работает.

    Чего еще?
    Последний раз редактировалось Destr; 20.04.2011 в 02:45.

  10. #9
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хотя, если посмотреть с другой стороны, то получается переход на ячейку памяти, указанной в hl. И тогда вроде логичное обозначение jp (hl). Но тогда бы по логике и с простыми адресами нужно было писать не jp metka, а jp (metka).
    Скорее всего, тут психология: когда мы видим hl в скобках, то мысленно связываем с тем, что лежит в ячейке по адресу hl, т.е. с данными, а не с кодом, на который можно перейти.

  11. #10
    Veteran Аватар для GriV
    Регистрация
    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)

Ваши права

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