2013-05-20 4 views
0

У меня есть этот коддобавляющие 16 бит регистров

addInt: 
     add cx, bx 
     cmp cx, 0FFFFh 
     JBE convert 

Я пытаюсь добавить Cx и BX регистров, каждый из которых имеет одинаковое значение FFFF, вместо того, чтобы 1FFFE, я получаю только FFFE, и когда я попробуйте использовать JBE, чтобы перейти к конвертированию цикла, JBE istruction ничего не делает, потому что ecx теперь зарегистрирован только FFFE, но не 1FFF, так как я могу исправить этот код, чтобы сделать ecx, содержит 1FFFE и как сравнить его, если он еще 16 бит или нет. Я не могу использовать какие-либо 32 битых регистры, которые делают вещи более сложными

Спасибо заранее

+2

максимальное значение 16-битный регистр может содержать это 'FFFF' .. – Blorgbeard

+1

Почему вы не можете использовать 32-разрядные регистры? (Это было бы намного проще, если бы вы использовали 'ecx'.) – michaelb958

+0

Возможно, это поможет, если вы проверите' OF' (флаг переполнения) в 'FLAGS' после команды' add'. –

ответ

1
addInt: 

    clc   ;clear carry flag 

    add cx,bx 

    jnc convert ;jump no carry 

    cmp cx,FFFEh ;This now needs to be true, only FFFF+FFFF will succeed 

        because it generates a carry AND matches the cmp 

    Jnz convert ;will let it through 

Это будет работать, но это очень ограничено и упрощенно

Чтобы «рассчитывать» на кэрри использования АКА де, 0 вставляется после JNC преобразования

флаг переноса устанавливается, если регистр идет круглосуточно, поэтому он действует как один бит

ADD FFFF + 2 будет установить его, давая вам анолита нести флаг и 0001 в регистре

Вы можете хранить рассчитывать, что флаг в отдельном регистре с АЦП [другой регистр], 0

используя флаг переноса позволяет хлопнуть ваш регистры вместе подсчитать что-то вроде

1,208,741,363,432,547,555,475,424 с 4x16 бит регистров

что довольно много и мили лучше, чем 65534

+0

, тогда, если я хочу сравнить любую сумму, большую, чем значение 16 бит, как я должен это делать? – bluebk

+0

Первая часть делает это, jnc – ady

+0

Если вы хотите сравнить два отдельных номера, размер которых превышает 16 бит в 16-битной среде, тогда вам нужно будет узнать, как использовать несколько регистров – ady

Смежные вопросы