|
RIP
#04
13 декабря 1997 |
|
Школа хаккера - Цикл "БАЗА -1": Обозначения, Арифметика.

┌────────────────────────────────┐
│ БАЗА-1 │
│ Семинар Первый. Основание. │
│ (Окончание. Начало в RIP#1-#3) │
└────────────────────────────────┘
B1:6 Обозначения.
=================
Hа самом деле, такую глобальную роль шестнадцатеричная и
восьмеричная системы счисления играют исключительно благодаря
алгоритмам Ручного Дракона. Внутри машина считает исключительно
"по двоичному". Шестнадцатеричная (или восьмеричная, на
DEC'овских машинах) система счисления позволяет вместо длинных
цепочек ноликов и единиц писать короткие числа, делает хэкерскую
жизнь более разнообразной. Эти системы - промежуточное звено
между машиной и человеком, между двоичной и десятичной системами
счисления.
Роль систем счисления огромная. К примеру, права доступа к
файлу в системе UNIX изменяются из shell'а командой chmod. И эта
команда требует задания аргумента (прав доступа) в восьмеричной
системе счисления! Так команда
chmod 666 /etc/passwd
открывает полный доступ всем пользователям к файлу паролей в
системе UNIX. Вы видите теперь, что даже самые тупые системные
администраторы должны разбираться в восьмеричной системе
счисления. Так чего же говорить о хэкерах!
В различных языках программирования числа в этих системах
обозначаются по-разному. Вот сводная таблица для основных
языков:
+-------------+-------+--------+--------+----------------+
| | C/C++ | Pascal | BASIC | Assembler |
+-------------+-------+--------+--------+--------+-------+
| DECimal | 12 | 12 | 12 | 12,12d | 12T |
| HEXadecimal | 0xC | $C | &hC | 0Ch | |
| OCTal | 014 | нет | &o14 | 14o | 14Q |
| BINary | нет | нет | &b1100 | 1100b | 1100Y |
+-------------+-------+--------+--------+--------+-------+
В B1:1 мы отметили, что нули в начале числа не влияют на его
значение. Создатели языка C решили по другому. Поскольку никто в
здравом уме не начинает числа с нуля - кому охота набивать
лишнии нулики, ноль в начале они используют для обозначения
восьмеричного числа.
При всех способах записи регистр букв неважен. Даже строгий
на регистры C позволяет начинать шестнадцатеричные числа как с
0x, так и с 0X. Кстати, гуру Киевского Центра нашей Школы,
Сергей Головко (2:463/140), сообщил, что в ранних версиях
компиляторов C различных фирм шестнадцатеричные числа надо было
начинать с 0x0, иначе они глюкали.
При программировании на ассемблере если шестнадцатеричное
число начинается с буквы, перед ним обязательно должен ставится
ноль. Иначе ассемблер подумает, что вы имели в виду переменную
Ch, а не число C_16. Ряд людей с низким уровнем интеллекта, не
способным вместить это правило, ставят ноль впереди всех
шестнадцатеричных чисел. Хуже всего, когда такие люди начинают
писать учебники...
[IBM PC teaching on]
Суффиксы T, Q и Y введены в ассемблер MASM сравнительно
недавно. Дело в том, что с помощью директивы .RADIX ассемблер
позволяет менять систему счисления, действующую по умолчанию.
Раньше, когда систему счисления изменяли на шестнадцатеричную,
числа вроде 12D, которые с первого взгляда являются обычными
шестнадцатеричными, интерпретировались как 12_10. Это порождало
сеть мелких незаметных психоделических ошибок, мешавших чайникам
использовать .RADIX 16.
[IBM PC teaching off]
Мы будем использовать все способы записи чисел, используя
ассемблерный способ как основной. Вы должны хорошо владеть всеми
способами, потому что в технических дискуссиях по сетям они все
активно используются.
>>>
Для перевода чисел в BASIC'е из десятичной системы счисления
в шестнадцатеричную, двоичную и восьмеричную используются
функции HEX$, BIN$ и OCT$.
Для перевода чисел из этих систем в десятичную надо
воспользоваться хитростью.
?VAL("&hFC")
<<<
В1:7 Арифметика.
================
В любой их систем счисления можно по прежнему складывать,
вычитать, делить и умножать.
12A3h 10011b 220_3
- 134h +10101b + 11_3
---- ------ ----
16Fh 101000b 1001_3
Попробуйте самостоятельно решить кучу примеров на сложение и
вычитание в "компьютерных" системах счисления и не только.
14A3h 1701o | 11o 1101
* 21h -11 +----- *1011
----- -- | 152o ----
14A3 60 1101
+2946 -55 + 1101
----- -- 0000
2A903h 31 1101
-22 --------
-- 10001111
7
Попробуйте делить и умножать в этих системах счисления.
Производите побольше дейтвий в уме, развивайте свои способности
быстро считать, запоминать информацию. Все это очень важно для
аттестаций.
[IBM PC teaching on ]
Программа hiew позволяет вывести на экран дамп файла.
Программа debug.exe имеет команду d, выводящую на экран дамп
(dump) памяти. Даже Norton Commander позволяет по F4 выводить
содержимое файла в шестнадцатеричном виде.
Теперь вы должны очень хорошо представлять себе и
чувствовать шестнадцатеричную и другие системы. Hаконец-то вы
сможете разобраться в дампе.
[IBM PC teaching off]
Существуют специальные шестнадцатеричные калькуляторы,
позволяющие считать в этих широкораспространенных системах
счисления. Я рекомендую вам CITIZEN SRP-75 и его аналоги. Он
недорогой и без графики, но, помимо шестнадцатеричной арифметики
и логики, он еще и программируемый! 128 шагов!
Удачи!
Аpви Хаккеp
(AtH//HPG)
Ars: На этом мы прерываем публикацию Школы. Как бы кто к ней не
относился, но определенные знания, согласитесь,почерпнуть из нее
можно было. Во всяком случае, все, кто желали, это сделали...
Другие статьи номера:
Похожие статьи:
В этот день... 30 октября