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

User Tag List

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

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

  1. #11
    Member Аватар для Antipod
    Регистрация
    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 по сути является циферкой для компилятора, а не названием места, где лежит это значение %)

  2. #12
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,692
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    30 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Red face

    Цитата Сообщение от TomCaT Посмотреть сообщение
    …мнемоника путает.
    Честно скажу, сколько пишу под Z80 (а это больше 20 лет) никогда не возникало путаницы, сразу запомнил что это безусловный переход на HL. А вот что действительно периодически заставляет заглядывать в «методичку», так это какие команды влияют на какие флаги
    (๑•̀ㅂ•́)و✧ Doors UI → https://t.me/doorsui | https://t.me/atari_xl_xe ← Atari XL/XE (●´ω`●)ゞ

  3. #13
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    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.

  4. #14
    DimkaM
    Гость

    По умолчанию

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

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

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


  6. #16
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,404
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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.

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

  8. #17
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,795
    Спасибо Благодарностей отдано 
    54
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    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. #18
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    jmp (hl) - точка назначения - адрес, находящийся в hl
    ага, или адрес находящийся в (hl) ?

  11. #20
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    279
    Поблагодарили
    207 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    хватит уже сопли жевать чо вы эту тему то апаете?
    С уважением,
    Jerri / Red Triangle.

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

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

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

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

Ваши права

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