Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Прог ЦТ лабы для БАУ 2011.doc
Скачиваний:
17
Добавлен:
01.05.2015
Размер:
2.99 Mб
Скачать

11 Лабораторная работа №11. Сложение двухбайтных чисел

Цель работы: обучение созданию программ для сложения двухбайтных чисел в различных системах счислений.

Сложение чисел применяется при определении каких-либо технологических параметров установки. Проанализировав сумму чисел, вносят соответствующие изменения в управление установкой.

В один байт можно записать числа от 0 до 255. Для многих практических задач это недостаточно. Если использовать два байта, то можно записать числа от 0 до 2562 -1=65535. Суммирование чисел можно выполнить, задавая слагаемые в 16-ной или иной системе счисления с помощью алгоритма, известного из курса информатики.

Например, требуется сложить десятичные числа 65284 и 65534. Представим наши числа в 16-ной системе счисления, записав каждое из них в два регистра, см. таблицу 11.1. В лабораторной работе эти байты называются старшим и младшим для каждого слагаемого, например h’23’: h’22’.

Т а б л и ц а 11.1 – Суммирование чисел в шестнадцатеричном коде

Десятичная система

Шестнадцатеричная система

Старшие байты (регистры)

Младшие байты (регистры)

1-е слагаемое

65284

h’FF04’

S1_S =h’FF’

S1_M =h’04’

2-е слагаемое

65534

h’FFFE’

S2_S =h’FF’

S2_M =h’FE’

Полученные суммы

130818

SUM_3=h’01’

SUM_S=h’FF’

SUM_M =h’02’

Результат представим в десятичной системе счисления: h’01FF02’1*164+15*163+15*162+0*161+2*160=65536+61440+3840+0+2=130818.

При сложении, байтов, если сумма более h’FF’(то есть более 255) необходимо предусмотреть перенос единицы в нулевой бит более старшего байта (регистра). Очевидно, что сумма может занимать три байта. Момент переполнения регистра фиксируется в битеСрегистраStatus,он становится равным единице. Этот факт можно использовать для программного увеличения более старшего регистра на единицу выполняя, таким образом, арифметический перенос.

С другой стороны можно считать, что в старшем байте представлена целая часть числа, а в младшем байте дробная часть числа. Такое число можно представить как многочлен A=K2*162+ К1*161+K0*160+K-1/16-1-2/16-2.

Сложим дробные десятичные слагаемые 255,017 и 255,991. Переведем в шестнадцатеричную систему отдельно целую и дробную части.

Алгоритм перевода целых чисел из 10-ной системы в другую систему.

Начало алгоритма. Заданное число считаем делимым.

Начало цикла. Если делимое более нуля (условие выполнения цикла),

то разделить его на основание системы, найти целые частное и остаток,

иначе (если делимое не больше нуля) выйти из цикла.

Считать частное новым делимым (изменение аргумента условия цикла)

Конец цикла(возврат на начало цикла).

Переписать остатки в обратном порядке на строку результата.

Конец алгоритма

Переводим 254: 16=15 (14)

14:16=0 (14). Итак, получили 25410=FE16

Алгоритм перевода дробной части чисел из десятичной системы в другую систему.

Начало алгоритма. Дробную часть числа считаем умножаемым.

Начало цикла.Если умножаемое более нуля (условие цикла),

то умножаем его на основание системы. Полученную целую часть произведения переносим в результат.

иначе (если дробная часть равна нулю) выйти из цикла.

Считать дробную часть новым умножаемым (изменение условия цикла)

Конец цикла(возврат на начало цикла)