вот сейчас проверил для 16 бит т.е предел для беззнака: 0-65535 для знака: -32768-32767 —————— mov ax,30000 mov bx,2000 add ax, bx OF=0 потому что в знаковой области предел не нарушен СF=0 потому что в без знаковой области предел не нарушен —————— mov ax,30000 mov bx,3000 add ax, bx СF=0 потому что в без знаковой области предел не нарушен (33000 в пределе между 0-65535) OF=1 потому что в знаковой области предел нарушен! более 32767 (хотя работаем с беззнаком но имеем старший бит единицу т.к 33000 в bin это 1000000011101000) единица в старшем бите получается аккурат после 32767 и все что больше вплоть до 65535 соответственно уже попадает под OF для 16 бит —————— mov ax,65535 mov bx,2 add ax, bx СF=1 потому, что в без знаковой области предел нарушен! cpu это видит и до того как закольцует значение выставив его по новому кругу в единицу выставляет флаг, что предел нарушен и он это увидел. OF=0 потому, что в знаковой области предел не нарушен т.к получившаяся в результате беззнакового переполнения единица, лежит в пределе -32768-32767 вот такая интересная петрушка, главное понять принцип еще выставляется SF=1 потому что из за единицы в старшем разряде cpu считает, что возможно имеет дело с отрицательным числом.
Обсуждают сегодня