Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_3 / MPU_lab_3

.docx
Скачиваний:
90
Добавлен:
18.05.2014
Размер:
34.5 Кб
Скачать

Листинг программы (содержимое секций «.text», «.text.program», и «.data» в файле «.lst»)

Текст программы:

@ Программа демонстрации работоспособности

@ микроконтроллера AT91SAM7S64 на отладочной плате SAM7-P64

.include "at91sam7s64.inc"

@---------------------------------------------------------------

.text @ Объявляем область исполняемого кода

.section .text.vectors @ Далее - таблица векторов прерываний

ResetVector: @ Первый вектор - вектор сброса

b start @ При сбросе контроллера - переход на метку start

@---------------------------------------------------------------

.section .text.program

@ Подготавливаем периферию

start:

ldr r0, =0x78FF @ Загружаем первый операнд в регистр 0

ldr r1, =0xFFFF8702 @ Загружаем первый операнд в регистр 1

adds r3,r0, r1 @ суммируем первый операнд со вторым

ldr r2, =0xA @ Загружаем первый операнд в регистр 2

ldr r3, =0xB3 @ Загружаем первый операнд в регистр 3

subs r2, r3 @ Вычитаем из первого операнда второй

ldr r4, =0xFF005400 @Загружаем первый операнд в регистр 4

ldr r5, =0xFFAB01 @Загружаем второй операнд в регистр 5

eors r4, r5 @ Выполняем "ИЛИ-НЕ"

ldr r6, =0xEFFF @Загружаем первый операнд в регистр 6

ldr r7, =0x1001 @Загружаем первый операнд в регистр 7

ands r6, r7 @Выполняем операцию "логическое И"

@---------------------------------------------------------------

@1.2

@ldr r1, =2 @Загружаем операнд в регистр 1

ldr r8, =2 @Загружаем операнд в регистр 8

mvn r9, r8 @Обратный код

mov r10, r9

adds r9, #1 @Дополнительный код

@------------------------------------------------------

@1.3

ldr r11, =7 @Загружаем операнд в регистр 11

adds r12, r11, r10 @Сложение с обратным кодом, загружаем

@результат в региcтр 12, получаем модуль

cmp r12, #0x0 @Установка флагов и сравнение с нулем

rsbmi r12, r12, #0x0 @Модуль

ldr r11, =7 @Загружаем операнд в регистр 11

adds r11, r9 @Сложение с дополнительным кодом

@1.4

ldr r3, =654 @Загружаем операнд в регист 13

ldr r4, =37 @Загружаем операнд в регист 14

muls r3, r4 @Перемножаем регистр 13 и регистр 14

@1.5

asr r4, r3, #6

ldr r5, =var1

str r4, [r5]

.data @ Область данных

var1: @ По метке var1 резервируем место под

.word 0 @ 32-битную целочисленную переменную

.end @ Директива окончания текста программы

Листинг:

l33.elf: file format elf32-littlearm

Disassembly of section .text:

00100000 <_vectors_>:

.include "at91sam7s64.inc"

@---------------------------------------------------------------

.text @ Объявляем область исполняемого кода

.section .text.vectors @ Далее - таблица векторов прерываний

ResetVector: @ Первый вектор - вектор сброса

b start @ При сбросе контроллера - переход на метку start

100000: ea000006 b 100020 <_start_>

100004: 00000000 andeq r0, r0, r0

100008: 00000000 andeq r0, r0, r0

10000c: 00000000 andeq r0, r0, r0

100010: 00000000 andeq r0, r0, r0

100014: 00000000 andeq r0, r0, r0

100018: 00000000 andeq r0, r0, r0

10001c: 00000000 andeq r0, r0, r0

Disassembly of section .text.program:

00100020 <start>:

@---------------------------------------------------------------

.section .text.program

@ Подготавливаем периферию

start:

ldr r0, =0x78FF @ Загружаем первый операнд в регистр 0

100020: e59f0064 ldr r0, [pc, #100] ; 10008c <_start_+0x6c>

ldr r1, =0xFFFF8702 @ Загружаем второй операнд в регистр 1

100024: e59f1064 ldr r1, [pc, #100] ; 100090 <_start_+0x70>

adds r0, r1 @ суммируем первый операнд со вторым

100028: e0900001 adds r0, r0, r1

ldr r5, =0xA @ Загружаем первый операнд в регистр 5

10002c: e3a0500a mov r5, #10

subs r5, #0xB3 @ Вычитаем из первого операнда второй

100030: e25550b3 subs r5, r5, #179 ; 0xb3

ldr r3, =0xFF005400 @Загружаем первый операнд в регистр 6

100034: e59f3058 ldr r3, [pc, #88] ; 100094 <_start_+0x74>

ldr r7, =0xFFAB01 @Загружаем второй операнд в регистр 7

100038: e59f7058 ldr r7, [pc, #88] ; 100098 <_start_+0x78>

eors r3,r7

10003c: e0333007 eors r3, r3, r7

mvn r5, r3

100040: e1e05003 mvn r5, r3

ldr r6, =0xEFFF @Загружаем первый операнд в регистр 6

100044: e59f6050 ldr r6, [pc, #80] ; 10009c <_start_+0x7c>

ldr r9, =0x1001 @Загружаем первый операнд в регистр 9

100048: e59f9050 ldr r9, [pc, #80] ; 1000a0 <_start_+0x80>

ands r6, r9 @Выполняем операцию "И"

10004c: e0166009 ands r6, r6, r9

@---------------------------------------------------------------

ldr r8, =2 @Загружаем операнд в регистр 8

100050: e3a08002 mov r8, #2

mvn r1, r8 @Обратный код

100054: e1e01008 mvn r1, r8

mov r10, r1

100058: e1a0a001 mov sl, r1

adds r1, #1 @ Доп. Код

10005c: e2911001 adds r1, r1, #1

ldr r11, =2

100060: e3a0b002 mov fp, #2

adds r10, r11 @ Сложение с обратным код

100064: e09aa00b adds sl, sl, fp

cmp r10, #0 @ Логические ИЛИ, узнаём

100068: e35a0000 cmp sl, #0

rsbmi r10, r10, #0 @ Из нуля вычитается r0 и записывается в r0

10006c: 426aa000 rsbmi sl, sl, #0

adds r1, r11 @ Сложение с доп.кодом

100070: e091100b adds r1, r1, fp

ldr r12, =654

100074: e59fc028 ldr ip, [pc, #40] ; 1000a4 <_start_+0x84>

ldr r0, =37

100078: e3a00025 mov r0, #37 ; 0x25

muls r12, r0

10007c: e01c0c90 muls ip, r0, ip

asr r4, r12, #5

100080: e1a042cc asr r4, ip, #5

ldr r5, =var1

100084: e59f501c ldr r5, [pc, #28] ; 1000a8 <_start_+0x88>

str r4, [r5]

100088: e5854000 str r4, [r5]

10008c: 000078ff strdeq r7, [r0], -pc ; <UNPREDICTABLE>

100090: ffff8702 ; <UNDEFINED> instruction: 0xffff8702

100094: ff005400 ; <UNDEFINED> instruction: 0xff005400

100098: 00ffab01 rscseq sl, pc, r1, lsl #22

10009c: 0000efff strdeq lr, [r0], -pc ; <UNPREDICTABLE>

1000a0: 00001001 andeq r1, r0, r1

1000a4: 0000028e andeq r0, r0, lr, lsl #5

1000a8: 00200000 eoreq r0, r0, r0

Disassembly of section .data:

00200000 <var1>:

200000: 00000000 andeq r0, r0, r0

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:

0: 00002141 andeq r2, r0, r1, asr #2

4: 61656100 cmnvs r5, r0, lsl #2

8: 01006962 tsteq r0, r2, ror #18

c: 00000017 andeq r0, r0, r7, lsl r0

10: 4d524105 ldfmie f4, [r2, #-20] ; 0xffffffec

14: 4d445437 cfstrdmi mvd5, [r4, #-220] ; 0xffffff24

18: 02060049 andeq r0, r6, #73 ; 0x49

1c: 01090108 tsteq r9, r8, lsl #2

20: Address 0x00000020 is out of bounds.

Disassembly of section .debug_line:

00000000 <.debug_line>:

0: 00000058 andeq r0, r0, r8, asr r0

4: 001c0002 andseq r0, ip, r2

8: 01020000 mrseq r0, (UNDEF: 2)

c: 000d0efb strdeq r0, [sp], -fp

10: 01010101 tsteq r1, r1, lsl #2

14: 01000000 mrseq r0, (UNDEF: 0)

18: 00010000 andeq r0, r1, r0

1c: 2e33336c cdpcs 3, 3, cr3, cr3, cr12, {3}

20: 00000073 andeq r0, r0, r3, ror r0

24: 05000000 streq r0, [r0]

28: 10000002 andne r0, r0, r2

2c: 02021900 andeq r1, r2, #0

30: 00010100 andeq r0, r1, r0, lsl #2

34: 00200205 eoreq r0, r0, r5, lsl #4

38: 0c030010 stceq 0, cr0, [r3], {16}

3c: 302f2f01 eorcc r2, pc, r1, lsl #30

40: 2f2f302f svccs 0x002f302f

44: 2f2f312f svccs 0x002f312f

48: 2f302f30 svccs 0x00302f30

4c: 2f2f2f2f svccs 0x002f2f2f

50: 2f2f302f svccs 0x002f302f

54: 022f2f30 eoreq r2, pc, #192 ; 0xc0

58: 01010012 tsteq r1, r2, lsl r0

Disassembly of section .debug_info:

00000000 <.debug_info>:

0: 00000042 andeq r0, r0, r2, asr #32

4: 00000002 andeq r0, r0, r2

8: 01040000 mrseq r0, (UNDEF: 4)

c: 00000000 andeq r0, r0, r0

10: 00000000 andeq r0, r0, r0

14: 2e33336c cdpcs 3, 3, cr3, cr3, cr12, {3}

18: 3a430073 bcc 10c01ec <MC_LOCKS8+0xc01ec>

1c: 6573555c ldrbvs r5, [r3, #-1372]! ; 0x55c

20: c05c7372 subsgt r7, ip, r2, ror r3

24: 5ce0eded stclpl 13, cr14, [r0], #948 ; 0x3b4

28: 6b736544 blvs 1cd9540 <MC_LOCKS8+0xcd9540>

2c: 5c706f74 ldclpl 15, cr6, [r0], #-464 ; 0xfffffe30

30: 5c33336c ldcpl 3, cr3, [r3], #-432 ; 0xfffffe50

34: 0033336c eorseq r3, r3, ip, ror #6

38: 20554e47 subscs r4, r5, r7, asr #28

3c: 32205341 eorcc r5, r0, #67108865 ; 0x4000001

40: 0031322e eorseq r3, r1, lr, lsr #4

44: Address 0x00000044 is out of bounds.

Disassembly of section .debug_abbrev:

00000000 <.debug_abbrev>:

0: 10001101 andne r1, r0, r1, lsl #2

4: 03065506 movweq r5, #25862 ; 0x6506

8: 25081b08 strcs r1, [r8, #-2824] ; 0xb08

c: 00051308 andeq r1, r5, r8, lsl #6

10: Address 0x00000010 is out of bounds.

Disassembly of section .debug_aranges:

00000000 <.debug_aranges>:

0: 00000024 andeq r0, r0, r4, lsr #32

4: 00000002 andeq r0, r0, r2

8: 00040000 andeq r0, r4, r0

c: 00000000 andeq r0, r0, r0

10: 00100000 andseq r0, r0, r0

14: 00000004 andeq r0, r0, r4

18: 00100020 andseq r0, r0, r0, lsr #32

1c: 0000008c andeq r0, r0, ip, lsl #1

20: 00000000 andeq r0, r0, r0

24: 00000000 andeq r0, r0, r0

Disassembly of section .debug_ranges:

00000000 <.debug_ranges>:

0: ffffffff ; <UNDEFINED> instruction: 0xffffffff

4: 00000000 andeq r0, r0, r0

8: 00100000 andseq r0, r0, r0

c: 00100004 andseq r0, r0, r4

10: 00100020 andseq r0, r0, r0, lsr #32

14: 001000ac andseq r0, r0, ip, lsr #1

18: 00000000 andeq r0, r0, r0

1c: 00000000 andeq r0, r0, r0

Таблица с результатами выполнения арифметических и логических операций

Адрес

ар./лог.

инструкции

Мнемо-

ника

Распол.

исходн.

операн-да

Значение исх.операнда

Распол.

операн-да назначе-ния

Значение

Операнда

после

Флаги

N Z C V

10

16

10

16

00100028

add

r0

r1

30975

4294936322

0x78FF

0xFFFF8702

r3

1

0x1

0010

00100030

sub

r2

r3

10

179

0xA

0xB3

r2

4294967127

0xffffff57

1000

00100040

eor

r4

r5

427821158416755457

FF005400

FFAB01

r4

16755457

0xffffff01

1101

0010004c

and

r6

r7

61439

4097

0xEFFF

0x1001

r6

1

0x1

1101

00100054

mvn

r8

2

0x2

r9

4294967293

0xfffffffd

1101

0010005c

add

r10

4294967293

0xfffffffd

r9

4294967294

0xfffffffe

1000

00100064

add

r10

r11

4294967294

7

0xfffffffe 0x7

r12

4

0x4

1000

0010006c

rsbmi

r12

-1

0x4

r12

1

1

0000

00100074

add

r9

r11

42949672937

0xfffffffd

7

r11

0

0

0110

00100080

mul

r3

r4

654

37

0x28e

0x25

r3

24198

0x5e86

1101

00100084

asr

r3

24198

0x5e86

r4

756

0x2f4

1101

Выводы: Написали программу, выполняющую арифметические и логические действия.

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

Санкт-Петербургский государственный

электротехнический университет «ЛЭТИ»

Кафедра ИИСТ

Лабораторная работа №3

“ Линейные программы на языке ассемблера. Арифметические и

логические операции”

Выполнили: Орехво Д.А.

Ткаленко А.Ю.

Семенов Ю.А.

Санкт-Петербург

2014

Соседние файлы в папке Lab_3
  • #
    18.05.20142.36 Кб24.project
  • #
    18.05.201492.81 Кб21at91sam7s64.inc
  • #
    18.05.2014613 б31lab3.s
  • #
    18.05.2014568 б22LdScript.lds
  • #
    18.05.2014978 б21Makefile
  • #
    18.05.201434.5 Кб90MPU_lab_3.docx
  • #
    18.05.20141.01 Кб21mt-link.gdb
  • #
    18.05.20143.16 Кб21MT-Link.launch
  • #
    18.05.2014265 б22olimex.gdb
  • #
    18.05.20143.84 Кб22Olimex.launch
  • #
    18.05.201445 б22simulator.gdb