Realtime
#02
29 февраля 1996 |
|
Программирование - форма представления чисел в процессоре Z-80.
Здравствуйте! Мы продолжаем цикл ста- тей, посвященных обучению программирова- нию на АССЕМБЛЕРЕ. И сегодня мы поговорим о такой вещи, как: ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ В ПРОЦЕССОРЕ 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МЕ'!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября