"Сборник задач для лаб практ. 4 курса"


Пример. Буква «А» кодируется по Морзе как «точка-тире»



бет4/6
Дата27.05.2023
өлшемі176 Kb.
#474342
түріСборник задач
1   2   3   4   5   6
Asm Tasks 4k

Пример. Буква «А» кодируется по Морзе как «точка-тире». Количество знаков - два, число 2 в двоичной системе - это 10, отсюда младший полубайт = 0010. Старший полубайт будет содержать 0100, так как «точка» - это 0, «тире» - это 1, остальные биты не используются и остаются нулями. Байт 0100 0010 переводим в шестнадцатеричную систему и получаем 42h - это и есть представление буквы «А». Итак, всё вместе:
А = ( -) = 0100 0010 = 42h

Непонятно? Тогда вот ещё примеры (буквы из четырёх знаков):




Б = ( - ) = 1000 0100 = 84h


Ж = ( -) = 0001 0100 = 14h
Рассуждая таким образом, заполняем таблицу. Здесь информация расположена в порядке следования букв русского алфавита (без буквы «Ё»):


Таблица 1

А

A

. -

0100 0010

42h




Р

R

. - .

?

?

Б

B

- . . .

1000 0100

84h

С

S

. . .

?

?

В

W

. - -

0110 0011

63h

Т

T

-

?

?

Г

G

- - .

1100 0011

C3h

У

U

. . -

?

?

Д

D

- . .

1000 0011

83h

Ф

F

. . - .

?

?

Е

E

.

0000 0001

01h

Х

H

. . . .

?

?

Ж

V

. . . -

0001 0100

14h

Ц

C

- . - .

?

?

З

Z

- - . .

1100 0100

C4h

Ч

нет

- - - .

*

*

И

I

. .

0000 0010

02h

Ш

нет

- - - -

*

*

Й

J

. - - -

0111 0100

74h

Щ

Q

- - . -

?

?

К

K

- . -

1010 0011

A3h

Ъ

нет

. - - .-.







Л

L

. - . .

0100 0100

44h

Ы

Y

- . - -

?

?

М

M

- -

1100 0010

C2h

Ь

X

- . . -

?

?

Н

N

- .

1000 0010

82h

Э

нет

. . - . .

*

*

О

O

- - -

1110 0011

E3h

Ю

нет

. . - -

*

*

П

P

. - - .

0110 0100

64h

Я

нет

. - . -

*

*

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


Итак, мы получили последовательность байтов, которую теперь запишем в порядке следования букв латинского (английского) алфавита:




Таблица 2

A

B

C

D

E

F

G

H

I

J

и так далее…

Z

42

84

A4

83

01

24

C3

04

02

74

(заполните самостоятельно!)

C4

Эту последовательность из 26 чисел мы занесём (вручную) в память нашей микропроцессорной системы, например, в сегмент ES, начиная с какого-либо базового адреса, допустим, 100h. Это будет наша Таблица Перекодировки.


Теперь всё готово для выполнения упражнений.


Вариант 1. Исходная строка текста на английском языке (например, QSL RCV - «подтверждаю приём Вашего сообщения!») для передачи кодом Морзе должна быть вручную записана в память с адреса DS:0000h (следует воспользоваться кнопкой «Текст…» на вкладке «Память» программы AsmEd). Разработать программу, которая будет выводить на виртуальный дисплей соответствующую строку из точек, тире и пробелов. Код символа «точка» - 02Eh, «тире» - 02Dh, «пробел» - 020h. При этом в программе AsmEd должна быть включена DOS-кодировка (меню «Вид»-«Настройка»-«Символы»). Точки и тире выводить вплотную друг к другу (без пробела). Между буквами выводить один пробел, между словами - два пробела (здесь мы несколько отступаем от стандарта в целях упрощения задачи и улучшения вида картинки на экране). Алгоритм решения задачи в «крупных командах» может выглядеть так:



  1. Читать символ из строки (обозначим его код - SYM)

  2. Это пробел (SYM=020h)? Если да, то выдать на экран код 020h и перейти к п.8

  3. Извлечь из Таблицы Перекодировки код (=N), соответствующий символу SYM

  4. Выделить младший полубайт (= K) из кода N

  5. Положить номер бита B равным 7

  6. Повторить K раз:

    1. Выделить бит ( = BIT) номер B из кода N

    2. Если BIT = 0, то выдать на экран код 02Eh

    3. Если BIT = 1, то выдать на экран код 02Dh

    4. Уменьшить номер анализируемого бита B на единицу

  7. Выдать на экран код 020h - пробел после окончания обработки символа

  8. Есть ещё символы в исходной строке? Если да, то перейти к п.1

  9. Закончить работу

У автора этого пособия соответствующая программа на Ассемблере заняла около 40 строк. А сколько получится у Вас?




Вариант 2. Цифры представляются кодом Морзе следующим образом:


Таблица 3

1

. - - - -




6

- . . . .

2

. . - - -

7

- - . . .

3

. . . - -

8

- - - . .

4

. . . . -

9

- - - - .

5

. . . . .

0

- - - - -

Разработать какой-либо свой способ представления этих кодов в памяти компьютера (микропроцессорной системы). Здесь, очевидно, для хранения информации о знаках одним полубайтом обойтись уже нельзя. По аналогии с Вариантом 1 написать программу, которая читает из памяти (с адреса DS:0000h) строку из десятичных цифр и выдаёт её на экран (виртуальный дисплей) в виде кода Морзе.




Вариант 3. Пусть имеется строка символов, содержащая не только латинские, но и русские (но без литеры «Ъ») буквы. По аналогии с Вариантом 1 написать программу, которая читает из памяти (с адреса DS:0000h) эту строку и выдаёт её на экран (виртуальный дисплей) в виде кода Морзе. Продумать способ представления кодов букв, обозначенных звёздочками в Таблице 1 (сложности могут возникнуть из-за буквы «Э»).


Задание 2. Работа с моделями графических изображений

В памяти компьютера записана последовательность байтов, представляющая то или иное графическое изображение. Декодировать его и выдать на виртуальный дисплей, изображая каждый пиксель псевдографическим символом с кодом 219 = 0DBh, представляющим собой закрашенный прямоугольник. При этом в программе AsmEd должна быть включена DOS-кодировка (меню «Вид»-«Настройка»-«Символы»), задержка автовыполнения должна быть выключена (равна 0).




Вариант 1. Одноцветное изображение без сжатия.
Изображение построено в квадратной матрице 8х8, состоит соответственно из восьми строк и каждая строка кодируется одним байтом: если тот или иной бит равен 0, то пиксель выводится одним цветом (например, зелёным - это цвет фона), если бит равен 1 - другим цветом (например, красным - это цвет самого изображения).


Пример одной строки:
























= 0 1 0 1 1 0 0 1 = 59h

Алгоритм вывода такого изображения на экран виртуального дисплея системы AsmEd:


1. Записать в регистр SI адрес начала массива графических данных


2. Записать в регистр DI адрес начала видеопамяти (в системе AsmEd - 0F600h)
3. Повторить 8 раз:
a. Прочитать очередной байт ( = GB) из сегмента данных по адресу SI
b. Положить номер бита ( = B) равным 7
c. Повторить 8 раз:
c1. Выделить бит ( = BIT) номер B из байта GB
c2. Если BIT=1, то вывести по адресу DI красный прямоугольник (пиксель)
c3. Если BIT=0, то вывести по адресу DI зелёный прямоугольник (пиксель)
c4. Уменьшить номер анализируемого бита B на единицу
c5. Увеличить DI на следующую позицию экрана (видеопамяти)
(конец цикла)
d. Перейти (увеличением DI) на следующую строку экрана
e. Увеличить SI для указания на следующий байт данных
(конец цикла)
4. Закончить работу

Исходные данные для построения изображений (несколько примеров):



п/п



Достарыңызбен бөлісу:
1   2   3   4   5   6




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет