![]() |
|
|
![]()
|
|
| Dufeij |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.7.2010 Где: Донецк (Украина) Репутация: нет Всего: нет |
Только начал учить асм, взялся решить простую задачку и возникли проблемы. (Пользуюсь TASM`ом) В результате вычисления формулы должно получится -1 но получается 65535. Чтобы найти причину, после каждого действия результат заносил в y и в турбо дебаггере смотрел что получается. Оказалось что неправильно перемножаются 7*b*c, 7*b=21 все нормально, но 7*b*c = 65431. Почему так?
a=15 b=3 c=-5
Это сообщение отредактировал(а) Dufeij - 17.7.2010, 12:31 |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Как определили, что 65535, а не -1?
Для 16-битных чисел двоичное представление как 65535, так и -1 одинаково: 0FFFFh. И проводить различие между тем, знаковое это число (-1) или беззнаковое (65535) - задача программиста, а не процессора. -------------------- Что непонятно - спрашиваем |
|||
|
||||
| Dufeij |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.7.2010 Где: Донецк (Украина) Репутация: нет Всего: нет |
Немного разобрался, спасибо. А после уножения 7*b*c где хранится минус?
В результате 65431 -> 2 c.c. 111111111001011 -> 1101000 + 1 -> 10 c.c. 105 Где минус? |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
В знаковых числах старший бит определяет знак: 0 = "+", 1 = "-".
-------------------- Что непонятно - спрашиваем |
|||
|
||||
| izl3sa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 25.6.2010 Репутация: нет Всего: нет |
>> В знаковых числах старший бит определяет знак: 0 = "+", 1 = "-".
а то что число signed определяется операциями, которые над ним выполняют. Те в общем случае без контекста нельзя сказать какое число - знаковое или нет. Да и ещё, в x86 отрицательные числа получаются дополнением до двух -eax = (neg eax) + 1, те 0x00000001 -> 0xFFFFFFFE + 1 = 0xFFFFFFFF Немного дополнил теорию =) впрочем все это есть в учебниках по асму, или вы тоже пропускаете неинтересную с виду математику при первом прочтении? =)) |
|||
|
||||
| Dufeij |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.7.2010 Где: Донецк (Украина) Репутация: нет Всего: нет |
Каюсь. Пропускаю. Сам же от этого и страдаю.
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |