Lab_3 / MPU_lab_3
.docxЛистинг программы (содержимое секций «.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