| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Проблемы с imul |
| Автор: Dufeij 17.7.2010, 12:10 | ||
| Только начал учить асм, взялся решить простую задачку и возникли проблемы. (Пользуюсь TASM`ом) В результате вычисления формулы должно получится -1 но получается 65535. Чтобы найти причину, после каждого действия результат заносил в y и в турбо дебаггере смотрел что получается. Оказалось что неправильно перемножаются 7*b*c, 7*b=21 все нормально, но 7*b*c = 65431. Почему так? a=15 b=3 c=-5
|
| Автор: JAPH 17.7.2010, 13:37 |
| Как определили, что 65535, а не -1? Для 16-битных чисел двоичное представление как 65535, так и -1 одинаково: 0FFFFh. И проводить различие между тем, знаковое это число (-1) или беззнаковое (65535) - задача программиста, а не процессора. |
| Автор: Dufeij 17.7.2010, 14:16 |
| Немного разобрался, спасибо. А после уножения 7*b*c где хранится минус? В результате 65431 -> 2 c.c. 111111111001011 -> 1101000 + 1 -> 10 c.c. 105 Где минус? |
| Автор: JAPH 17.7.2010, 14:50 |
| В знаковых числах старший бит определяет знак: 0 = "+", 1 = "-". |
| Автор: izl3sa 19.7.2010, 07:04 |
| >> В знаковых числах старший бит определяет знак: 0 = "+", 1 = "-". а то что число signed определяется операциями, которые над ним выполняют. Те в общем случае без контекста нельзя сказать какое число - знаковое или нет. Да и ещё, в x86 отрицательные числа получаются дополнением до двух -eax = (neg eax) + 1, те 0x00000001 -> 0xFFFFFFFE + 1 = 0xFFFFFFFF Немного дополнил теорию =) впрочем все это есть в учебниках по асму, или вы тоже пропускаете неинтересную с виду математику при первом прочтении? =)) |
| Автор: Dufeij 20.7.2010, 02:08 |
| Каюсь. Пропускаю. Сам же от этого и страдаю. |