Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ассемблер




Косвенный доступ к данным по адресу через адрес-указатель

 

#include <reg51.h>

unsigned char x,i; //переменная в Data

char code * y="125"; //указатель на текстовую константу, имя переменной

обозначает адрес

char xdata * yy; //указатель на текстовую переменную

 

main()

{

for (i=0; i<3; i++) x=x*10+(*y++&0x0f);

 

for(i=7;i>=0; i--)

{ *yy++= (x&0x01)? ‘1’: ‘0’;

x=x>>1;

}

while(1); //динамический останов

}

 

Dseg at 8;сегмент данных в Data

X: ds 1

Xseg at 0;сегмент данных в Xdata

Yy: ds 8;char xdata yy[8]; //результат преобразования во внешней

памяти

Cseg at 0;начало программного сегмента, после сброса или включения

питания

Jmp start;подразумевается команда старта на начало программы

Y: db “123”;текстовая константа в ASCII-коде

;for (i=0; i<3; i++) - комментарии из программы на С

start: clr a;подготовка параметров цикла

Mov x,a

Mov r0,#3

Mov DPL,#yy;ограничимся младшим байтом адреса – старший DPH=0

 

Cikl:; x=x*10+(y[i]&0x0f);

Mov a,x

Mov b.#10

Mul ab

Mov b,a

Clr a

movc a,@a+dptr

Inc dptr

Anl a,#0x0f

Add a,b

Mov x,a

Djnz r0,cikl

 

Mov r0,#8

Cikl2:;yy[i]= (x&0x01)? ‘1’: ‘0’;

Mov dpl,r0

Mov a,x

Anl a,#01

Orl a,#0x30

Movx @dptr,a

;x>>1

Mov a,x; x=x>>1;

Rr a

Mov x,a

Djnz r0,cikl2

Nop

end

Задания

 

1. Упорядочить текст лексикографически, в порядке возрастания ASCII- кода

“This programmator” à “aaghimmootTrrs”

 

2. Вставить пробелы после символа “r”

“This programmator” à ”r” à “This pr ogr ammator”

 

3. Заменить прописную букву “x” на заглавную в тексте

“This programmator” à”a” à “This progrAmmAtor”

 

4. Символьное (в ASCII) преобразование двоичного числа в шестнадцатеричное

“01001001110” à “0x24e”

 

5. Символьное (в ASCII) преобразование шестнадцатеричного числа в двоичное

“01001001110” ß “0x24e”

 

6. Символьное двоичное число преобразовать в символьное десятичное.

“123” ß (“01110101“)2

 

7.Символьное (в ASCII) преобразование десятичного числа в шестнадцатеричное

“ 590 ” à “0x24e”

 

8.Символьное (в ASCII) преобразование шестнадцатеричного числа в десятичное

“590” ß “0x24e”

 

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

“-25,023” à “e+2 - 0.25023”

 

10. Десятичное сложение (вычитание) в неупакованных форматах, положение запятой фиксировано

“256,54” +” 75, 56” =” 332,10”

 

11. Преобразовать символьный двоичный код в символьный Манчестерский код и восстановить исходный двоичный

“01011010” à 00 11 00 11 11 00 11 00 (+)

10 10 10 10 10 10 10 10 синхросигнал

à “10 01 10 01 01 10 01 10 “ Манчестерский код

Восстановление символьного двоичного кода из Манчестерского

 

“1001100101100110” Манчестерский код

à “ 0 1 0 1 1 0 1 0” двоичный код

 

12. Сформировать сдачу минимальным количеством монет достоинством 50, 10, 5, 1 копеек и проверить обратным преобразованием

“132” à “2,3,0, 2”

 

13. Шифрование и дешифрование Гронсфельда

таблица символов {a,b,c,d,e,f, …}

нумерация 0 1 2 3 4 5 6

ключ {3,1,2,0,6, …}

Пример

“cadda” ßà “ cdaad”

 

14. Преобразование двоичной импульсной последовательности в 3-значный код, перепад 0/1 обозначается 1, 1/0 обозначается 2, отсутствие перепада – 0 и обратно

“0 1 0 0 0 1 0 1 1“ ßà “2 1 0 0 2 1 2 0”

 

15. Байты данных разбиваются на 2 тетрады, каждая тетрада заменяется HEX-цифрой и преобразуется в ASCII-код, подсчет контрольной суммы байтов по модулю 0x100 в конце строки HEX-кода

A0, B1, 0C, 1D à HEX-код строки “ A 0 B 1 0 C 1 D 8 A”

 

16.Обратное преобразование HEX-кода в строку байтов данных и проверить контрольную сумму - последний байт в строке

A0, B1, 0C, 1D à “ A 0 B 1 0 C 1 D 8 A” HEX-код строки

 

17. Регистр граничного сканирования n-контактов в JTAG-интерфейсе имеет длину 3n бит. Выбрать 3-хбитную j-ую ячейку в регистре. Нумерация битов регистра справа налево 3n,…2,1,0

“1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 0 1 0 1” à “110”

o c i i c o

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 609; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.