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

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 46

Тема: Проясните по поводу регистра флагов Z80

  1. #1

    По умолчанию Проясните по поводу регистра флагов Z80

    Память моя дырявая, и мозги уже не те. Посмотрите, правильно я понимаю действие флагов, и поясните насчёт Half Carry, Parity/Overflow

    bit 7 - Sign - знак, копия bit 7 аккамулятора
    bit 6 - Zero - устанавливается, если A=0
    bit 5 - undoc - копия пятого бита аккамулятора
    bit 4 - Half Carry - полуперенос (?)
    bit 3 - undoc - копия третьего бита аккамулятора
    bit 2 - Parity/Overflow - устанавливается, если установлено чётное кол-во бит в аккамуляторе (?)
    bit 1 - Negative (Substract) - устанавливается, если последняя операция была вычитанием
    bit 0 - Carry - устанавливается, если результат операции превысил разрядность аккамулятора (если в результате операции изменился bit 7 аккамулятора)

    Half Carry - правильно-ли я понимаю, что он устанавливается, если в процессе операции изменился bit 3 аккамулятора? Зачем вообще используется этот флаг?

    Насчёт P/O что-то я совсем запутался, зачем и как он работает.

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

  3. #2
    Member Аватар для dwt
    Регистрация
    16.01.2005
    Адрес
    ЕнакиеВО!
    Сообщений
    129
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow ...

    Не совсем верно...
    Бит 0 - флаг переноса C (устанавливается или сбрасывается в зависимости от результатов сравнения (означает больше/меньше);
    Бит 1 - флаг сложения/вычитания N (он редко используется);
    Бит 2 - флаг переполнения
    Бит 3 - не используется;
    Бит 4 - флаг полупереноса H (тоже редко используется);
    Бит 5 - не используется;
    Бит 6 - флаг "нуля" Z (установлен, если в результате сравнения - "совпадение"; или в результате какой-либо логической операции в аккумуляторе (р-р А) - 0);
    Бит 7 - флаг знака S (честно говоря, не помню для чего он).

  4. #3

    По умолчанию

    Ну, 'редко используется' - это, конечно, хорошо (именно поэтому я и не знаю в деталях действие этих флагов, собственно), но в эмуляторе-же не напишешь - 'Извините, эта программа не пойдёт, потому-что флаг редко используется' Хотелось-бы более точной информации. Мне не очень понятна логика установки всех этих флагов после различных операций (особенно Half-Carry).

  5. #4
    Member Аватар для dwt
    Регистрация
    16.01.2005
    Адрес
    ЕнакиеВО!
    Сообщений
    129
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow ...

    Ну извини, написал что знал... Попробуй поискать мануалы по Z80... Я сегодня еще дома в книжках посмотрю, может найду по-подробнее.

  6. #5

    По умолчанию

    Цитата Сообщение от dwt
    Ну извини, написал что знал...
    Да это я понимаю, за это спасибо
    Цитата Сообщение от dwt
    Попробуй поискать мануалы по Z80...
    Их есть у меня. Но они довольно мутные, в некоторых на эту тему противоречия. Поэтому и спрашиваю - думаю, те, кто писал на ZX плотно, лучше знают, что и как. Я хоть и писал, но кроме C,Z флагов никогда другими не интересовался/пользовался, хватало как-то...

  7. #6
    Master
    Регистрация
    18.01.2005
    Адрес
    Ростов-на-Дону
    Сообщений
    577
    Благодарностей: 202
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет Carry и HalfCarry
    они устанавливаются при изменении 8(а не 7-го, те бита за пределами 8 битного регистра) и 4 битов (то есть когда происходит перенос или заем байта или полубайта)
    Для примера:
    0100'0100+0100'0100=1000'1000 => CF=0,HC=0, но P/O=1
    1000'0000+1000'0000=1'0000'0000 => CF=1,HC=0, P/O=1
    0000'0000-0000'0001=1'1111'1111 => CF=1, HC=1,P/O=1
    HC используется для коррекции после сложения и вычитания двоично-десятичных чисел

  8. #7
    Member Аватар для dwt
    Регистрация
    16.01.2005
    Адрес
    ЕнакиеВО!
    Сообщений
    129
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow ...

    Цитата Сообщение от Shiru
    Я хоть и писал, но кроме C,Z флагов никогда другими не интересовался/пользовался, хватало как-то...
    Да я сам тоже использую в основном C, Z и как-то раз использовал PO/PE (переполнение). Но специфику использования последнего уже не помню (справочник память освежит ).

  9. #8

    По умолчанию

    Цитата Сообщение от Lion17
    Насчет Carry и HalfCarry
    Спасибо! Меня сбила с толку такая фраза из книжки (ZXASMDOC.ZIP, лежит на VT в books):
    Флаг переполнения: этот флаг будет установлен (=1), если содержимое бита 7 8-битового числа изменяется во время операции
    А насчёт bit 5 и bit 3, P/O - моя информация верна?

  10. #9
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Благодарностей: 4
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Несколько дополнительных замечаний.
    Цитата Сообщение от Shiru
    bit 6 - Zero - устанавливается, если A=0
    Установка может быть связана не только с аккумулятором. INC\DEC любого регистра также устанавливает этот флаг. Однако, INC\DEC регистровой пары не работает с этим флагом (поэтому в стародавние времена регистры пары OR для этого).
    Цитата Сообщение от Shiru
    bit 4 - Half Carry - полуперенос (?)
    bit 2 - Parity/Overflow - устанавливается, если установлено чётное кол-во бит в аккамуляторе (?)
    bit 0 - Carry - устанавливается, если результат операции превысил разрядность аккамулятора (если в результате операции изменился bit 7 аккамулятора)
    Машинная арифметика - выполняется по модулю в кольце целых чисел. Диапазон беззнакового байта [0..255], знакового байта [-128..127]. Когда результат выходит за эти границы, это называется wraparound. И тогда
    bit 0 - Carry - Беззнаковый wraparound
    bit 2 - Parity/Overflow - знаковый wraparound
    bit 4 - Half Carry - wraparound младших 4 бит.

    Самое разнообразное применение имеет флаг Parity/Overflow
    -- в арифметических операциях (ADD\ADC\SUB\SBC\CP) - это знаковый wraparound
    -- в логических операциях (AND\OR\XOR..) - это чётность количества бит результата
    -- в блочных операциях без автоматического повторения (LDI и т. п.) - признак того, что BC обнулился (блок закончился)
    -- команды LD c аккумулятором и регистром I\R - копируют триггер прерываний во флаг P\O.

  11. Этот пользователь поблагодарил captain cobalt за это полезное сообщение:
    shurik-ua (08.02.2013)

  12. #10
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,147
    Благодарностей: 5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Не все так просто

    где то была инфа что неиспользуемые биты копируются из регистра адреса (вроде PC). поэтому sts глючил так как выполняет команды из резидента, не оттуда где они находятся. короче авторы эмуляторов лучше всех должны это знать или Иван Рощин =)

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

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

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

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

Похожие темы

  1. Ответов: 30
    Последнее: 25.02.2006, 17:35
  2. По поводу аттачей
    от Shadow Maker в разделе Форум
    Ответов: 11
    Последнее: 09.08.2005, 08:56
  3. По поводу скинов форума
    от CityAceE в разделе Форум
    Ответов: 1
    Последнее: 03.04.2005, 03:13

Ваши права

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