На самом деле логика везде есть... я сейчас готовлю электронную брошюрку, в которой описано все, что мне известно. Скоро выложу. Буду очень рад, если community дополнит ее![]()
На самом деле логика везде есть... я сейчас готовлю электронную брошюрку, в которой описано все, что мне известно. Скоро выложу. Буду очень рад, если community дополнит ее![]()
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Насчет 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 используется для коррекции после сложения и вычитания двоично-десятичных чисел
Спасибо! Меня сбила с толку такая фраза из книжки (ZXASMDOC.ZIP, лежит на VT в books):Сообщение от Lion17
А насчёт bit 5 и bit 3, P/O - моя информация верна?Флаг переполнения: этот флаг будет установлен (=1), если содержимое бита 7 8-битового числа изменяется во время операции
ну да насколько я в курсе. но андок он и в африке андок...Сообщение от Shiru
Сообщение от Shiru
вообще-то под мануалом понимается обычно дока от Zilog.comСообщение от Shiru
итак, S,Z,C - самые популярные и пояснять не надо.
N - последнее сложение(0)/вычитание(1), используется для DAA (BCD коррекция)
H - заем/перенос в 4 бит, все верно, только к BCD прямого отношения не имеет. разве что для 4-битной арифметики коей BCD тоже является (перенос между разрядами)
P/V (у Zilog именно так пишется) - это в принципе как бы два флага. ну т.е. один флаг который занимается двумя разными вещами (смотря какая операция), точнее даже четырьмя, сохраняя еще и статус триггера прерываний IFF при обращении к R, и в блочных операциях (ldi/ldir...) его напрягают.
P - ну да, когда он P - то =1 при четном количестве едениц в аккумуляторе.
V - арифметическое переполнение - это насколько я понимаю такая хрень которую придумали для работы в дополнительном двоичном коде (о, воспоем оду троичной симметричной системе), ну т.е. когда ты к 0111111 (+127) прибавишь 1 получится 1000000 (-1) что есть переполнение (ну и с вычитанием таже фигня) - вот для его отслеживание и есть флаг V.
Есть и такое, конечноСообщение от Ronin
![]()
Несколько дополнительных замечаний.
Установка может быть связана не только с аккумулятором. INC\DEC любого регистра также устанавливает этот флаг. Однако, INC\DEC регистровой пары не работает с этим флагом (поэтому в стародавние времена регистры пары OR для этого).Сообщение от Shiru
Машинная арифметика - выполняется по модулю в кольце целых чисел. Диапазон беззнакового байта [0..255], знакового байта [-128..127]. Когда результат выходит за эти границы, это называется wraparound. И тогдаСообщение от Shiru
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.
где то была инфа что неиспользуемые биты копируются из регистра адреса (вроде PC). поэтому sts глючил так как выполняет команды из резидента, не оттуда где они находятся. короче авторы эмуляторов лучше всех должны это знать или Иван Рощин =)
Я вот вычитал, что из регистра A. Либо из регистра операнда (опять расхождение).Сообщение от jtn
так и есть. загрузи STS и убедись лично.Сообщение от Shiru
У меня реала нет, а насчёт эмулей я не могу быть 100% уверен (автором эмулей просьба не обижаться, просто я параноик). Так - это как, только из A или из операнда?Сообщение от Ronin
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)