· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Отрицательные числа

Посл.отвђт Сообщенiе


Дата: Июл 3, 2003 09:51:16

У меня к вам такой вопрос. Для представления отрицательного числа в бинарной форме нужно провести инверсию нулевых и единичных битов и прибавить один, и получившиеся число будет отрицательным, но в тоже время и положительным. Например -1 (11111110) это в тоже время и 254 (11111110) так как комп всетаки поймет что это всетаки -1 а не 254.


Дата: Июл 3, 2003 10:05:14

1. Для сравнения машина использует вычитание из счетчика без переполнения. После этого анализируются различные флаги (ZF,SF...);

2. Комп ничего не понимает в отрицательных числах, просто команды типа jle, jge ... позволют тебе реализовать некое представление отрицательных чисел.


Дата: Июл 3, 2003 11:01:53

Спасибо.


Дата: Июл 6, 2003 00:24:16

Странно, но мне всегда казалось, что -1 = 0FFh

:)


Дата: Июл 7, 2003 03:08:05

-1 это такое число из x bit к которому если
прибавить 1 то получится 1(x нулей).
Поэтому 8 битный -1 =
11111111 (FF) (+1=1 0000 0000)
16 битный
11111111 11111111 (0FFFF)
(+1 = 1 0000 0000 0000 0000)
и т.д.
Если непонятно то - 2 это такое число из x бит
к которому если прибавить 2 (10b) то получится
число 1(x нулей)т.е. минимальное число на разряд большее чем операнд.
Т.е. FE для 8и битного, FFFE для 16 битного.
FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE для 128 битного.
Называется дополнительный код, дополняем до нуля. Помним, что в компьютере число обладает
2мя числовыми характеристиками - колличеством
бит которое он занимает и собственно состоянием этих бит.
Процессору знать ничего не надо - он складывает
всё одинаково.
А вот программист, смотря от того будет считать он число знаковым или безнаковым, может реагировать в программе на "переполнение" разрядной сетки. Если 8 битное FF у него знаковое, то реагировать он будет не на CF а на
OF - т.е. когда перенос в знаковый и из знакового разряда не совпадают.
И напишет в программе обработку такого случая.
В случае же переполнения по CF
например FF+02= 01 (результат) CF=1 перенос старшего разряда в CF, он уже реагировать не будет - это то что он и хочет (-1+2=1).
А если оно безнаковое то реагировать от будет если при сложении получился CF. В этом случае действительно настоящее переполнение разрядной сетки.

The Svin.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080