User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 23

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

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

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

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    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.

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

  3. #2

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

    По умолчанию

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

  4. #3

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

    По умолчанию

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

    ---------- Post added at 15:08 ---------- Previous post was at 15:07 ----------

    В других же командах, если пишем (hl), подразумеваем ячейку памяти, адресуемой hl, а не само значение в hl.

  5. #4
    DimkaM
    Гость

    По умолчанию

    значит так.
    В случае работы с регистрами LD меняем на MOV "mov b,c".
    При работе с памятью используем LD и ST "LD a,0xABCD ST hl,c".
    И расширить набор регистров хотя бы до буквы "Q".(шутка)

    Я когда первый раз столкнулся с avr, ужаснулся, но потом понял что даже удобней.
    Последний раз редактировалось DimkaM; 25.05.2011 в 17:18.

  6. #5

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

    По умолчанию

    Цитата Сообщение от breeze Посмотреть сообщение
    Цитата Сообщение от TomCaT
    …мнемоника путает.
    Честно скажу, сколько пишу под Z80 (а это больше 20 лет) никогда не возникало путаницы, сразу запомнил что это безусловный переход на HL. А вот что действительно периодически заставляет заглядывать в «методичку», так это какие команды влияют на какие флаги
    Да я-то тоже без проблем воспринимаю запись, мнемоника может путать в принципе. Опять же, путает по большей части благодаря другим процессорам с более перегруженными командами, которые могут и адрес перехода брать из памяти по адресу, который уже в регистре (а то и по адресу, вычисляемому как целое уравнение с регистрами ).
    Типа JP [BX] на IBM-процессорах ведь будет переходить не к командам по адресу в BX, а к команадам по адресу, лежащему по адресу, который хранится в BX. Адрес в памяти. И соответсвенно, JP BX - дает переход на команды по адресу из BX.
    А раз, опять же, таких команд, которые берут адреса по адресу не было в принципе во время оно, то вопроса, как правильно, JP (HL) или JP HL - не возникало. Визуально запись (HL) была привычнее, вот и прижилась. Хотя тогда честнее было бы писать все команды JP со скобками, JP (#0000), JP (METKA1).
    А путаться негде, так как:
    JP (HL) не несет неоднозначности, т.к. нет таких возможностей одной командой пересылать два байта, адресуемые не прямо адресом, а содержимым регистра - (HL) во всех командах означает только один байт по адресу в HL.
    JP HL, если бы было так принято, тем более вряд ли бы смущало двойным смыслом, потому что переход все равно будет в память (хоть HL и без скобок), естественно по адресу из регистра, во всяком случае ассемблеры не любят меток HL, DE, BC... и спутать с меткой тоже не удастся.
    Помни. Только на компьютере можно семь раз 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
    [свернуть]


  7. #6
    HardWareMan
    Гость

    По умолчанию

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

    На i8080/Z80 нет же указателей, есть только адреса. Что касается:
    Цитата Сообщение от Andrew771 Посмотреть сообщение
    А оказалось - переход по адресу, значение которого в регистре HL. Дык тогда должно быть jp hl (без скобок). Аналогично с jp(ix) и jp(iy).
    Я согласен. Потому как 0E9h - это же implied, а не indirect...
    Цитата Сообщение от Antipod Посмотреть сообщение
    С той же точки зрения jp label имеет смысл, поскоку label по сути является циферкой для компилятора, а не названием места, где лежит это значение %)
    Неверно. jp label - это absolute (расширенная версия immediate, так как операнд в теле команды, но не сама команда, и является абсолютным адресом). Понимать надо.
    Последний раз редактировалось HardWareMan; 27.05.2011 в 13:39.

  8. #7

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Так обозначается переходы во многих архитектурах. Пример в DEC-архитектуре (PDP-11): jmp (R0); или на 680x0 аналогично.

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

    1) Когда в команде, скажем, LD (ix+00),a указывается в скобках выражение для получения исполнительного адреса, то на самом деле этот адрес играет вспомогательную роль при выполнении команды - содержимое регистра A помещается здесь по адресу, равному содержимому IX плюс 0. Но сам по себе регистр IX не изменяется, и по выполнении команды его содержимое не окажется ни в одном регистре, ни в ячейках памяти. Он ПОМОГАЕТ выполнению команды, его содержимое используется для определения операнда-приемника (ячейки памяти), но само содержимое IX не участвует в выполняемом действии копирования содержимого регистра в память.

    2) А вот в команде LD SP, HL содержимое регистра HL в итоге окажется в другом регистре SP. И тут все понятно, скобок нет.

    3) В команде JP <метка> операнд, который всегда пишется без скобок, прямо помещается в регистр PC, как если бы команда была записана в виде LD PC, <метка>.

    4) Поэтому, т.к. в результате команды JP (HL) операнд играет отнюдь НЕ вспомогательное значение - содержимое HL при выполнению команды так же прямо помещается в PC, как если бы использовалась мнемоника LD PC, HL, закономерность записи со скобками нарушается.

    Более того, "вспомогательное" употребление того, что записано в скобках, прослеживается во всех командах Z80. Кроме JP (HL), JP (IX), JP (IY). Вот поэтому и кажется странной запись со скобками.

    Естественно, как я уже говорил, запись мнемоники в указанных архитектурах не имела принципиального значения, когда сложных команд косвенной адресации 16-битного числа вообще не было в 8-битных процессорах. И те, кто ее использовал (и использует), просто привыкают к записи. А на тех процессорах, где такая адресация возможна, естественно, JMP [BX] никто не воспринимает, как LD PC, BX.

    К тому же, мнемоника для Z80 используется и описывается в таком виде повсеместно, поэтому не заменять же ее на JP HL .

    P.S.: Как вариант, может, просто поддерживать мнемонику JP HL/IX/IY в ассемблерах, наравне с действующей JP (HL/IX/IY) - для обозначения одного и того же кода. Может, приживется?.. Хотя, если еще подумать, тех, кто осваивает ассемблер Z80, такой ход запутает еще больше.

    Цитата Сообщение от GriV Посмотреть сообщение
    Предлагаю просто смириться с этим фактом :-) Или потребовать у разработчиков АСМов для Z80 поддержки эквивалентной записи LD PC,HL для тех, кого смущает JP (HL).
    ...хмм, на самом деле, параллельная поддержка команды LD PC,HL даже лучше, чем параллельная поддержка JP HL вместе с JP (HL) для кода #E9. Так путаницы не возникает. Я за, только подписей нужно еще очень много .
    Последний раз редактировалось TomCaT; 28.05.2011 в 22:29.
    Помни. Только на компьютере можно семь раз 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

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

    По умолчанию

    jmp $1234 - точка назначения - адрес $1234
    jmp hl - точка назначения - регистровая пара hl, уходим в нее и офигеваем
    jmp (hl) - точка назначения - адрес, находящийся в hl

  10. #9

    Регистрация
    17.05.2011
    Адрес
    Днепропетровск
    Сообщений
    520
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    jmp $1234 - точка назначения - адрес $1234
    jmp hl - точка назначения - регистровая пара hl, уходим в нее и офигеваем
    jmp (hl) - точка назначения - адрес, находящийся в hl
    ld hl, $1234
    jmp hl попадаем на $1234


    ld (hl),$1234
    jmp (hl) попадаем на $1234

    Судя по доке
    ld hl,$1234
    jmp (hl) попадаем на $1234 --- Обломс



    -- добавил пример, что бы понятнее было
    PHP код:
                         JP адрес.
       
    Как только  эта  команда  встретится  в  программе,  в  регистр
    счетчика команд PC микропроцессора запишется  значение  указанного
    адреса
    Таким образомследующей командойкоторую будет выполнять
    микропроцессор вслед за командой JP
    будет команда,  код  операции
    которой записан в ячейке с этим адресом
    .
       
    Безусловную  передачу  управления можно  произвести  также  при
    помощи команд
                    JP 
    (HL), JP (IX) , JP (IY),
    в результате выполнения которых происходит передача управления  по
    адресу
    хранящемуся соответственно в регистровой паре HL,  IX  или
    IY 

    МИНИСТЕРСТВО ВЫСШЕГО И СРЕДНЕГО СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ
    РСФСР
    Дальневосточный государственный университет
    И.И.Бочаров
    К.И.Фахрутдинов
    Программирование на языке ассемблера Z80
    Владивосток, 1990
    ОГЛАВЛЕНИЕ
    Последний раз редактировалось iceoflame; 02.06.2011 в 10:28.

  11. #10

    Регистрация
    20.02.2008
    Адрес
    Siauliai, Lithuania
    Сообщений
    367
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от iceoflame Посмотреть сообщение
    ld hl, $1234
    jmp hl попадаем на $1234
    Неверно, нет такой команды jmp hl

    Цитата Сообщение от iceoflame Посмотреть сообщение
    ld (hl),$1234
    jmp (hl) попадаем на $1234
    Неверно, нада сперва знать што содержать регистр HL, тогда будет и видно где пригает

    Цитата Сообщение от iceoflame Посмотреть сообщение
    Судя по доке
    ld hl,$1234
    jmp (hl) попадаем на $1234 --- Обломс
    Верно. jmp (hl) это как "делать" ld pc,hl

    Доки иногда врут. Читай http://www.z80.info/zip/z80cpu_um.pdf
    Последний раз редактировалось Protom; 02.06.2011 в 11:26. Причина: Доки иногда врут

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

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

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

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

Ваши права

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