Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[18]

Пример.

Выполним сложение двух двухбайтовых чисел: 00010010 11111011 и 01101000 10000001:

а)сложим младшие восемь разрядов: 11111011

* 10000001

01111100.

единица переноса пересылается в разряд С;

б)сложим старшие восемь разрядов: 00010010

+01101000 1 (из флажка С)

01111011

В результате получим 01111111 01111100.

При выполнении команды вычитания флажок С устанавливается в нуль, если был заем, и устанавливается в единицу, если займа не было.

Вычитание выполняется путем сложения уменьшаемого с вычитаемым в дополнительном коде, так что перенос при сложении в дополнительном коде служит той же цели, что и заем в обычном вычитании. Представим инвертированный сигнал С (С) в качестве сигнала заема при выполнении вычитания двух и более однобайтовых чисел.

Так, при вычитании двух 16-разрядных чисел необходимо заполнить разряд переноса при сложении младших восьми разрядов и учесть этот сигнал в качестве сигнала входного переноса при сложении следующих восьми разрядов. Выполним в качестве примера вычитание следующих 16-разрядных чисел: 01100001 10001001 уменьшаемое 01000001 00010001 вычитаемое. Сначала находим представление числа 01000001 OOOlOOOlg в дополнительном

коде, для чего к обратному коду прибавим единицу: обратный код вычитаемого числа 10111110 11101110

+1

дополнительный код10111110 11101111

.Выполним сложение:

01100001 10001001

+

10111110 11101111

перенос 1 перенос 1

Полученный ответ является положительной разностью двух 16-разрядных чисел, а имеющийся перенос из крайнего левого разряда указывает на то, что знак результата совпадает со знаком уменьшаемого (С=1). Заема не было, так как уменьшаемое было больше вычитаемого.

Если по окончании каждого процесса вычисления сигнал окончательного переноса отсутствует, то С=0, т.е. должен был быть окончательный заем. Это означает, что вычитаемое было больше уменьшаемого.


Флажок С используется в командах сдвига ASL, LSR, ROL, ROR как девятый разряд. Команда SEC устанавливает грлажок С в единицу, а команда CLC - в нуль.

Z - флажок нулевого результата. Разряд Z устанавливается в единицу, когда результат выполнения команды равен 0000 0000. Если результат отличен от нуля, то флажок устанавливается в нуль.

I - блокировка прерывания IRQ. Этот флажок устанавливается в единицу командой SEI и в нуль командой CLI. Когда I = 1, запрещается обработка прерывания IRQ; когда I = 0, разрешается прерывание по входу IRQ. На вход NMI этот разряд влияния не оказывает.

Начав обработку прерывания IRQ, микропроцессор автоматически устанавливает I = 1. Если нужно еще раз повторить обработку IRQ, то предварительно необходимо установить I = 0. Команда BRK (программное прерывание) устанавливает 1=1.

D - флажок десятичного режима. Микропроцессор 6502 в отличие от других микропроцессоров (6800, 8080, Z80 и т.д.) может работать в двух режимах -двоичном и двоично-десятичном.

Выбор режима определяется состоянием флажка D: при D = 0 микропроцессор складывает и вычитает в двоичном коде; при D = 1 - в двоично-десятичном. Команда CLD сбрасывает флажок D в нуль, команда SED устанавливает D = 1.

В - флажок исполнения команды BRK. При исполнении этой команды флажок В= 1.

V- флажок переполнения. Используется при сложении и вычитании со знаком. В восьмибитовом числе указателем знака числа служит старший 7-й разряд: нулевое значение определяет положительное число; единичное значение - отрицательное число. Следовательно, для представления числа отводится только семь битов.

Флажок V устанавливается в единицу, когда результатом сложения двух отрицательных чисел является положительное число, или когда при сложении положительных чисел получено отрицательное число.

Флажок V устанавливается в единицу и в следующих случаях:

у результата нет переноса из 6-го разряда в 7-й, но есть перенос из 7-го разряда во флажок С;

есть перенос из 6-го разряда в 7-й и нет переноса из 7-го разряда во флажок С.

Флажки V и С имеют следующие различия:

Vиспользуется в арифметических операциях над числами со знаком и показывает перенос из 6-го разряда в 7-й; флажок С используется, в арифметических операциях над числами без знака, а также указывает на перенос из старшего 7-го разряда результата;

V, в отличие от С, не участвует в командах сдвига;

есть команда установки в нуль флажка V(CLV), но нет команды установки V в единицу; флажок С устанавливается в единицу командой CLC;

Vможет быть установлен в единицу внешним сигналом, подаваемым на вход S.O. микропроцессора 6502; флажок С используется только программно.


N - отрицательный флажок. Устанавливается 7-м разрядом (знаковым битом) результата выполнения команды. Команд установки флажка N нет. Существуют две команды BMI и BPL, которые проверяют состояние флажка N и осуществляют переходы по его значениям.

4.3. МЕТОДЫ АДРЕСАЦИИ МИКРОПРОЦЕССОРА 6502 (СМ630)

Число и структура способов адресации определяют возможности микропро цессора по обработке данных.

Исполнительный (действительный) адрес - это реальный номер ячейки памяти, начиная с которой располагаются адресуемые данные или команды.

Микропроцессор 6502 обладает наиболее мошной системой адресации из всех микропроцессоров второго и третьего поколений. Микропроцессор К580 (INTEL 8080/8085) насчитывает четыре способа адресации, MS 6800 (СМ601) - семь, Z80/Z80A (U880) - четыре, К1801 - шесть, а микропроцессор 6502 - 13 способов адресации:

аккумуляторная (Accumulator Addressing) - АСС; неявная (Implied Addressing) - LMPL; непосредственная (Immediate Addressing) - IMM; прямая длинная (Absolute Addressing) - ABS; прямая короткая (Zero Page Addressing) - ZP;

индексированная по X, короткая (Indexed Zero Page Addressing with Register X) - ZP.X;

индексированная no Y, короткая (Indexed zero Pade Addressing wiht Register Y) - ZP.Y;

индексированная по X, длинная (Indexed Absolute Addressing with Register X) - ABS.X;

индексированная no Y, длинная (Indexed Absolute Addressing with Register Y) - ABS.Y;

относительная адресация (Relative Addressing) - REL; индексно-косвенная по X (Indexed Indirect Addressing with Register X) -IND.X;

косвенно-индексная no Y (Indexed Indirect Addressing with Register Y) -IND.Y;

косвенная длинная (Absolute Indirect Addressing) - IND.

На рисунках, иллюстрирующих методы адресации, используются следующие сокращения:

КК - код команды;

КСК - код следующей команды; •

PC - счетчик команд;

РСН - старший байт PC;

PCL - младший байт,PC;

ВА - базовый адрес, т.е. адрес, к которому прибавляется смещение (индекс);

BAL - младший байт базового адреса; ВАН - старший байт базового адреса;



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98]