ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Практика › Практическое занятие "Группа команд работы с аккумулятором"

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

12. Использование командных файлов, программы простейших преобразований элементов массива с одним операндом.
1) Использование командного файла и его формат

1. директива MEMORY – задает модель памяти (физическое разбиение памяти на пространства). Формат директивы:
   MEMORY
   {
   PAGE 0: имя01 [(атрибут)] : origin = адрес, length = длина
   имя02 [(атрибут)] : origin = адрес, length = длина
   . . .
   PAGE 1: имя11 [(атрибут)] : origin = адрес, length = длина . . .
   PAGEn: имяn1 [(атрибут)] : origin = адрес, length = длина
   }
   где: PAGE0 – память программ, PAGE1 – память данных, PAGEn – любая память, имяхх – имена неперекрывающихся областей памяти с заданным начальным адресом и длиной, атрибут – от 1 до 4 символов, задающих тип памяти: R (чтение), W (запись), X (программа), I (инициализированная). Может быть еще один не обязательный параметр [,fill = слово] – слово-заполнитель не распределенной памяти
2. директива SECTIONS – распределяет логические секции программы по физическим областям памяти (логическое разбиение памяти). Формат директивы:
   SECTIONS
   {
   секция1 : [свойство [,свойство] [,свойство]...]
   секция2 : [свойство [,свойство] [,свойство]...]
   . . .
   секцияn : [свойство [,свойство] [,свойство]...]
   }
   где свойство определяет свойства и расположение секций: load(load = распределение или > распределение) – загружаемая секция (распределение задается по атрибутам или именем области [и пространства]), run(run = распределение или run> распределение) – начало исполняемой секции (стартовый адрес), {входные секции} – указывает объектные файлы и секции объединяемые в одну выходную, type (type = COPY или type = DSECT или type = NOLOAD) – тип секции, fill (fill = слово или секция : … { … } = слово) – слово-заполнитель
3. в командном файле также могут задаваться:
   -stack длина – размер стека,
   -e метка – начальная (стартовая) метка программы,
   -m имя файла – имя файла карты памяти,
   -o имя файла – имя выходного файла
   и имена объектных файлов, объединяемых в один выходной, при этом путь к файлам отсчитывается от каталога с командным файлом
4. обединяемые объектные файлы могут не включаться в командный файл, а просто подключаться к проекту (они попадут в категорию Libraries)
5. параметры из командного файла имеют более высокий приоритет, чем параметры заданные в настройках проекта Project | Build Options… | Linker категория Basic – Output Filename:, Map Filename:, Stack Size: и Code Entry Point:

Ниже приведен пример простейшего командного файла

    /********************************************************/
    /* 	TMS320VC5402 DSK  Linker Command File
    /*	16K words on chip DARAM is shared by Prog
    /*	and Data sections
    /********************************************************/
    /* remove the following commented out entries if doing a
       command line link */

    /*-stack 200h		/* software stack size = 256 words */

    debug\sin128.obj	/* included files	*/
    -o debug\ppovs.out	/* output file	*/
    -m debug\ppovs.map	/* map file		*/
    -e start		/* code entry point	*/

    MEMORY
    	{
    	PAGE 0: 	/* Programm space */
    	PROG	: origin = 0080h, length = 1F00h /* Programm Mem space */
    	VECS	: origin = 1F80h, length = 0080h /* Vector table space */
    	PAGE 1:	/* Data space */
    	DAT0	: origin = 0060h, length = 0020h /* Scratch Mem space  */
    	DAT1	: origin = 0100h, length = 0F00h /* 4K words for Data  */
    	DAT2	: origin = 2000h, length = 1C00h /* 7K words for Data  */
    	STK	: origin = 3C00h, length = 0400h /* 1K words for Stack */
    	}

    SECTIONS
    	{
    	.vectors	  :    > VECS PAGE 0 /* Interupt Vectors table */
    	.text		  :    > PROG PAGE 0 /* Program code goes here */
    	.work		  :    > DAT0 PAGE 1 /* Variables in Page 0    */
    	.data		  : {} > DAT1 PAGE 1 /* Initialized variables  */
    	.table ALIGN(256) : {} > DAT1 PAGE 1 /* Aligned at 100h word   */
    	.bss		  :    > DAT2 PAGE 1 /* Uninitialized variables*/
    	.stack		  :    > STK  PAGE 1 /* Software stack section */
    	}

2) Программа изменения знака числа и инвертирования битов

Исходные данные и варианты задачи аналогичны практическому занятию №9.

Используемые команды:

    ; 1 - вход:  a) память, b) McDRR, c) PA
    ; 2 - выход: a) память, b) McDXR, c) PA
    ; 3 - счетчик: a) .set, b) .word
    ; 4 - данные: a) знаковые(Ц), b) беззнаковые(Ц), c) дробные(З)
    ; 5 - цикл: a) BANZ, b) RPTB
    	neg	a		; Изменение знака числа				(1)
    	xor	#8000h, a	; Инвертирование знакового разряда		(2)
    	cmpl	a		; Инвертирование всех битов числа		(1)

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012