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

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

Переведем дробную часть первого слагаемого 0,017 в шестнадцатеричную систему с точностью до трех шестнадцатеричных цифр, а затем округлим. Целые части чисел выделены жирным шрифтом.

0,017*16=0,272; 0,272*16=4,352; 0,352*16=5,63. Таким образом, 0,01710=0,0416. Третью цифру 5, поскольку она меньше 8 отбрасываем.

Дробная часть второго слагаемого 0,991*16=15,856; 0,856*16=13,696; 0,696*16=11,136. Таким образом, 0,99110=FDB16, округляя до двух цифр, получим FE.

В результате работы программы были получены значения, представленные в таблице 11.2.

Т а б л и ц а 11.2 – Суммирование двухбайтных дробных чисел

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

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

Старшие байты. Целая часть числа

Младшие байты. Дробная часть числа

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

255,017

h’FF,04’

S1_S =h’FF’

S1_M =h’04’

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

255,991

h’FF,FE’

S2_S =h’FF’

S2_M =h’FE’

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

511,008

SUM_3=h’01’

SUM_S=h’FF’

SUM_M =h’02’

Результат, полученный в шестнадцатеричной системе счисления, представим в десятичной форме: Sum=1*162+15*161+15*160+0*16-12*16-2= =256+240+15+0+0,0078125=511,0078125.

Результат десятичного сложения 255,017+255,991=511,008.

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

В блок-схеме на рисунке 11.1 предполагается, что слагаемые заданы.

Фрагменты программы сложения двухбайтных чисел (до 65535).

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

CLRF SUM_M; очищаем регистры для суммы

CLRF SUM_S

CLRF SUM_3

;Первое слагаемое

MOVLW h’04’

MOVWF S1_M; младший байт S1_M= h’04’

MOVLW h’FF’

MOVWF S1_S; старший байт S1_S= h’FF’

; Второе слагаемое

MOVLWh’FE’

MOVWF S2_M; младший байт S2_M=h’FE’

MOVLW h'FF'

MOVWF S2_S; старший байт S2_S= h'FF'

; Сложение младших байтов

MOVF S1_M, W

ADDWF S2_M, W

MOVWF SUM_M

BTFSC STATUS, C; Если был перенос, т. е. сумма более 255,

INCF SUM_S, F; только при С=1, увеличиваем байт.

; Сложение старших байтов

MOVF SUM_S, W

ADDWF S1_S, W

BTFSC STATUS, C; был перенос?

INCF SUM_3, F; только при С=1 увеличиваем третий байт суммы.

ADDWF S2_S, W

MOVWF SUM_S

BTFSC STATUS, C; был перенос?

INCF SUM_3, W; только при C=1, увеличиваем третий байт суммы

GOTO$

END

Задание. Выполните сложение двухбайтных чисел, используя шестнадцатеричную систему счисления по заданиям таблиц 11.3 и 11.4. Результаты занесите в таблицы 11.1 и 11.2.

Т а б л и ц а 11.3 – Варианты заданий для целых чисел

Вариант

Число S1

Число S2

Вариант

Число S1

Число S2

1

60001

10001

6

65406

60006

2

30002

20002

7

60007

10007

3

40003

30003

8

30008

20008

4

65504

40004

9

40009

30009

5

64505

50005

10

50010

40010

Т а б л и ц а 11.4 – Варианты заданий для дробных чисел

Вариант

Число S1

Число S2

Вариант

Число S1

Число S2

1

110,01

110,1

6

160,06

160,6

2

120,02

120,2

7

170,07

170,7

3

130,03

130,3

8

180,08

180,8

4

140,04

140,4

9

190,09

190,9

5

150,05

150,5

10

200,10

200,20

Контрольные вопросы.

  1. Что такое основание системы счисления. Какие они могут быть?

  2. Как размещается число большее 255 памяти МК?

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

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

  5. Как определяется необходимость переноса в старшие байты суммы?

  6. Как выполняется программно перенос единицы в старшие байты суммы.

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

  8. Какой результат сложения шестнадцатеричных чисел F+1 иFF+1?

  9. Где регистрируется переполнение регистра при сложении чисел?

  10. Для чего выполняется суммирование чисел?

  11. Как можно ли складывать дробные числа?

  12. Почему в числе 0,04516отбросили при округлении цифру 5?