Автор Тема: Арифметика для чайников  (Прочитано 1587 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zap

  • Коллежский регистратор
  • *
  • Сообщений: 7
  • Репутация: 0
Арифметика для чайников
« : ёоЭм 14, 2009, 09:30:06 am »
Помогите разобраться!
при сложении байтов и переполнении выход такой:
a   db   254
---
mov al,a   
add al,3
jc M1             

M1:
adc ah,0           ;результат в AX
---
Проблема вот в чем:
1.  a   word    65534
---
mov ax,a   
add ax,2
jc M1             

M1:
?               ;результат в EAX?   
---
2.  a   dword    fffffffeh
---
mov eax,a   
add eax,2
jc M1             

M1:
?               ;где результат и как его взять?   

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

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: Арифметика для чайников
« Ответ #1 : ёоЭм 14, 2009, 11:34:55 am »
1)Оформляйте код пжл в теги code
2)Раз работаете с регистром ax/eax следовательно и результат остается там же.
Результат после операции как правило остается на месте первого операнда
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/

Оффлайн Zap

  • Коллежский регистратор
  • *
  • Сообщений: 7
  • Репутация: 0
Re: Арифметика для чайников
« Ответ #2 : ёоЭм 14, 2009, 07:52:52 pm »
А если результат не помещается в EAX?

Оффлайн Alexiski

  • Любитель давать советы
  • Надворный советник
  • *****
  • Сообщений: 307
  • Репутация: 15
  • Пол: Мужской
Re: Арифметика для чайников
« Ответ #3 : ёоЭм 15, 2009, 09:14:06 am »
Непоместившиеся биты будут просто отброшены. Сверху (по модулю 2^32). В регистре останутся 32 младших бита результата.

С другой стороны, при операциях сложения/вычитания переполнение не может превышать одного бита. Так что комбинируя результат в регистре со значением бита jc, можно восстановить точное значение.