Здравствуйте! Мы продолжаем цикл ста-
тей, посвященных обучению программирова-
нию на АССЕМБЛЕРЕ. И сегодня мы поговорим
о такой вещи, как:
ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ
В ПРОЦЕССОРЕ Z-80
_________________________________________
1.Числовые системы.
Для того , чтобы освоить программиро-
вание в машинных кодах и на языке Ас-
семблера необходимо знать, как органозо-
вано хранение информации в ячейках памяти
и в регистрах процессора . Основной еди-
ницей хранения информации является байт ,
который в свою очередь состоит из восьми
битов . Бит может быть включен (равен 1)
или выключен (равен 0) , т.е. может при-
нимать только два значения , а байт соот-
ветственно , может принимать 256 (два в
восьмой степени) значений и имеет диапа-
зон от 0 до 255 .
Те числа , с которыми мы имеем дело в
повседневной практике , называются деся-
теричными. Они строятся из разрядов (еди-
ницы , десятки , сотни и т.д.), каждый из
которых может быть выражен степенью числа
10. Так 567=5*10Е2+6*10Е1+7*10Е0. Компью-
теру работать в десятеричной системе
очень не удобно . Поскольку информация в
нем представленна электрическими зарядами
и можно выделить только два устойчивых
состояния - есть заряд / нет заряда , то
самое удобное - это хранить числа в
компьютере в двоичной системе . Например
обычное десятеричное число 156 может быть
записано в двоичной форме как 10011100В.
Здесь буква В на конце означает , что
число записано в двоичной (ВINАRY) систе-
ме. Преобразовать его в десятеричную фор-
му можно разложением по степени числа 2
так, как мы это делали для числа 567 вы-
ше, раскладывая его по степеням числа 10.
10011100 = 1*2Е7+0*2Е6+0*2Е5+1*2Е4+1*2Е3+
+1*2Е2+0*2Е1+0*2Е0 = 128+0*64+0*32+16+8+
+4+0*2+0*1 = 128+16+8+4= 156
Вы видите очевидные недстатки двоичной
формы записи. Во-первых это очень
громозкая запись, а потому и очень утоми-
тельная. Во-вторых она с трудом перево-
дится в привычную нам десятеричную форму.
Все это вызывало бы массу ошибок, если бы
программисты, разрабатывая программу,
применяли двоичное представление чисел .
Гораздо удобнее в работе шестнадцатерич-
ная система. Она имеет в качестве основа-
ния число 16, поэтому уже двумя разрядами
можно выразить 256 целых чисел от 0 до
255 (т.к.16Е2 = 256). Поскольку для
шестнадцатеричной системы не хватает
арабских цифр, то для выражения шестнад-
цатеричных цифр 10...15 приходится прибе-
гать к буквенным обозначениям :
10-А
11-В
12-С
13-D
14-Е
15-F
То же самое число 156 в шестнадцате-
ричной форме запишется как 9Сh. Здесь
буква h в конце числа говорит о том , что
она записана в шестнадцатеричной
(НЕXDЕСIМАL) системе.
9С = 9*16Е1+12*16Е0 = 144+12 = 156
Перед начинающим программистом встает
вопрос: в какой системе работать - деся-
теричной или шестнадцатеричной ? За деся-
теричную есть только один довод - много-
летняя практика . Шестнадцатеричная сис-
тема удобна той простотой , с которой
в нее переводится двоичная форма, а ведь
двоичная форма отражает физическую суть
операций , что делает шестнадцатеричную
систему основной для программистов .
Простота перевода из двоичной системы в
шестнадцатеричную и наоборот обеспечива-
ется вследствие того, что число шестнад-
цать может быть выражено четвертой сте-
пенью числа два : 2Е4=16 . Поэтому , что-
бы перевести числа из двоичной формы в
шестнадцатеричную можно перевод выполнять
по каждому полубайту (по каждым четырем
битам отдельно). Выбирая в какой системе
Вам в дальнейшем работать , надо также
учесть , что большинство прикладных прог-
рамм, поддерживающих программирование в
машинных кодах работают в шестнадцатерич-
ной системе. Как утверждает МАXWЕLL 'Пос-
ле перехода в шестнадцатетичную систему я
начал спокойно спать: не нужно сотни раз
пересчитывать адреса экрана - числа сами
выстраиваются так, как я захочу'.
Ниже приведена таблица для связи между
системами :
DЕС ВIN НЕX DЕС ВIN НЕX
0 0000 0 1 0001 1
2 0010 2 3 0011 3
4 0100 4 5 0101 5
6 0110 6 7 0111 7
8 1000 8 9 1001 9
10 1010 А 11 1011 В
12 1100 С 13 1101 D
14 1110 Е 15 1111 F
2.Двоичная дополнительная форма записи.
Приведенная выше двоичная форма позво-
ляет работать с целыми положительными
числами от 0 до 255 . Такая двоичная фор-
ма называется абсолютной , а операции с
такими числами - абсолютной двоичной
арифметикой .
В то же время есть операции, в которых
необходимо наличие целых отрицательных
чисел. Например, это операции перехода
(аналог GО ТО). Переход может быть осу-
ществлен как вперед на N шагов так и на-
зад .
Когда процессор встречает такую команду
он воспринимает следующий за кодом
операции операнд N не как записанный в
абсолютно двоичной форме , а как записан-
ный в дополнительной двоичной форме . В
этой форме могут записываться целые числа
от 0 до 127 и от -128 до -1. Таким обра-
зом, она может служить для записи целых
чисел со знаком. Расмотрим пример с пос-
тепенным наращиванием аккумулятора для
дополнительной двоичной арифметики .
Флаг С регистра F Регистр А НЕX DЕС
0 0000 0000 00 00
0 0000 0001 01 01
.......................
0 0111 1111 7F 127
0 1000 0000 80 -128
0 1000 0001 81 -127
.......................
0 1111 1111 FF -1
1 0000 0000 00 0
..........ит.д.........
Запомните простое правило двоичной до-
полнительной арифметики: чтобы поменять
знак числа, надо все его еденицы заменить
на нули, а все нули - на еденицы и к ре-
зультату прибавить 1 .
+5 - это 0000 0101
-5 - это 1111 1010 + 1 = 1111 1011
Сложение и вычитание в этой системе
выполняются как обычно (поразрядно), но
перенос при переполнении старшего разряда
игнорируется .
Так 5 + (-5) = 0
0000 0101
+
1111 1010
=
0000 0000
3.Десятеричная арифметика в двоичном
выражении .
Это особый вид представления целых чи-
сел в регистрах процессора. Он называется
ВСD-арифметикой. ВСD - ВINАRY СОDЕD
DЕСIМАL (ДВОИЧНЫЙ КОД ДЕСЯТЕРИЧНЫX ЧИ-
СЕЛ).
Эта форма основана на том, что каждый
разряд десятеричного числа можно предста-
вить в виде четырех двоичных битов :
0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
6 - 0110
7 - 0111
8 - 1000
9 - 1001
Значения от 1010 до 1111 - не использу-
ются .
Четырехбитную группу называют полубай-
том и, таким образом, один байт в этой
форме может содержать двухразрядное деся-
теричное число от 0 до 99 .
Как вы видите, один полубайт в ВСD -
арифметике может содержать число от 0 до
9, в то время, как в абсолютной двоичной
арифметике от 0 до 15. Очевидно, что ВСD
- арифметика является довольно расточи-
тельной, но у нее есть свои преимущества.
Для двух чисел в ВСD -арифметике обыч-
ные принципы сложения и вычитания непри-
менимы. Это происходит потому, что в аб-
солютной двоичной арифметике полубайт яв-
ляется заполненным, когда он равен 1111 и
тогда происходит переход к более старшему
разряду. В ВСD - арифметике полубайт за-
полнен, когда он равен 1001 и уже здесь
происходит переход к более старшему раз-
ряду.
В наборе команд процессора всего только
три команды, которые работают с числами,
представленными в этой форме, но они дос-
таточно часто встречаются, поскольку их
применение значительно упрощает пре-
образование чисел перед выдачей на экран
в десятеричной форме .
В ВСD - арифметике участвуют флаги N и
Н .
Флаг N - флаг сложения/вычитания.
Он равен 1 для всех операций вычитания и
равен 0 для всех операций сложения .
Флаг Н - флаг полупереноса.
Он включается при переполнении младшего
полубайта, когда начинается заполнение
старшего полубайта.
* * *
Ну вот и все на сегодня. Надеюсь, что я
изъяснялся не слишком ученым языком и вам
было все понятно. А я прощаюсь с вами. До
встречи в третьем номере 'RЕАLТIМЕ'!
Other articles: