270.95K
Категория: ПрограммированиеПрограммирование

Понятие архитектуры

1.

5/8/2024

2.

План лекции
•Понятие архитектуры
•Система команд
•Рассмотрение примеров
сгенерированных листингов

3.

Понятие
архитектуры

4.

What is computer
architecture?
• Frederick P. Brooks:
Computer architecture, like other
architecture, is the art of determining the
needs of the user of a structure and then
designing to meet those needs as effectively
as possible within economic and
technological constraints.

5.

Составляющие архитектуры
•Типы данных / форматы данных
•Набор команд / набор инструкций
•Флаги, режимы работы процессора
•Архитектура подсистемы памяти
–Регистровая память (IP, ACC, спец., РОН, с окном)
–ОЗУ (простая, сегментная, сег. и стр. виртуальная)
•Архитектура подистемы прерывания
•Архитектура подсистемы I/O
•Интерфейс периферийных устройств

6.

Форматы данных
•Разрядность 4, 8, 16, 32, 64, 80, 128, 256
•Endianness, (LSB, MSB)
•Выравнивание
•Тип – int, fp, bitmap, binstring, векторные

7.

Endianness
LSB
x86
x86_64
Atmel avr8
MSB
Atmel avr32
Motorola
6800
Xilinx
Microblaze
Bi-endian
ARM >v3
PowerPC
DEC Alpha
SGI MIPS
HP PA-RISC

8.

Система команд

9.

Набор команд -- это множество
операций, которые инициируются
программой и исполняются
процессором.
Набор команд -- это та
граница,
где проектировщик
компьютера
и
программист
рассматривают
Архитектуру, как единое целое.
Поэтому уровень команд должен
быть
удобен
и
согласован с
разработчиками АО и ПО.

10.

5/8/2024

11.

Основные группы команд
•Пересылка данных
•Арифметические
•Логические, сравнения
•Битовые
•Управляющие
•Ввод-вывод
•системные

12.

Представления программы
•Исходное - мнемоническое
–нотации Intel, AT&T
•Бинарное

13.

Нотация AT&T

14.

Нотация Intel

15.

Команды пересылки данных
X86
ARM
Reg -> Reg
mov %esp,%ebp
xchg %eax, %ebx
mov
mov
RAM -> Reg
mov 0x18(%esp),%edx
pop %eax
ldr r1, [fp, #-8]
ldr r2, [pc, #76]
pop {fp, pc}
Const -> Reg
movl $0x0,%eax
lea 0x1c(%esp),%eax
mov
Reg -> RAM
mov %eax,0x4(%esp)
push %ebp
str r3, [fp, #-8]
push {fp, lr}
Const -> RAM
movl $0x3,(%esp)
I/O
In al, 200
r0, r2
r1, r3
r3, #0

16.

17.

Режимы адресации
Режим адресации
X86
ARM
регистровая
mov %esp,%ebp
mov
r0, r2
непосредственная
movl $0x0,%eax
lea 0x1c(%esp),%eax
movl $0x3,(%esp)
mov
r3, #0
прямая
movl %eax, с
movl c, %eax
ldr
ldr
r3, .L2+4
r2, [r3, #0]
ldr
r3, [r3, #0]
ldr
ldr
str
r1, [fp, #-8]
r2, [pc, #76]
r3, [fp, #-8]
Косвенная регистровая
По базе
mov %eax,0x4(%esp)
mov 0x18(%esp),%edx
С индексированием
(и прямая, и по базе)
movl a(,%edx,4), %ecx
movl %edx, a(,%eax,4)
Seg:offs(base,idx,scale)
Стековая
push %ebp
pop %eax
push {fp, lr}
pop {fp, pc}

18.

Арифметические команды
X86
ARM
+
addl %edx, %eax
addl $188, %eax
Inc, adc
add
add
r3, r2, r3
r2, r3, #188
-
sub %eax,%ecx
Dec, sbb
sub
r3, fp, #32
*
imul %edx,%eax
mul
r4, r2, r3
/
idivl 0x1c(%esp)
# Edx:eax / 0x1c(%esp)
# результат -> eax
# остаток -> edx
FP
flds 0x18(%esp)
fadds 0x1c(%esp)
fsubp %st,%st(1)
fmulp %st,%st(1)
fdivrp %st,%st(1)
fstps 0x1c(%esp)
vldr
s15, [fp, #-36]
vadd.f32 s14, s14, s15
vsub.f32 s15, s13, s15
vmul.f32 s14, s14, s15
vdiv.f32
s15, s13, s15
vstr
s15, [fp, #-20]

19.

Флаговый регистр в x86

20.

Флаговый регистр в ARM

21.

Пример: + -> x86
int a, b, c;

c = a + b;

31: 8b 54 24 18 mov 0x18(%esp),%edx
35: 8b 44 24 14 mov 0x14(%esp),%eax
39: 01 d0
add %edx,%eax
3b: 89 44 24 1c mov %eax,0x1c(%esp)

22.

Пример: + -> arm/bpi
int a, b, c;

c = a + b;

34: e51b200c
ldr
r2, [fp, #-12]
38: e51b3010
3c: e0823003
40: e50b3008
ldr r3, [fp, #-16]
add r3, r2, r3
str r3, [fp, #-8]

23.

Битовые команды и
команды сравнения
Битовые команды – x86
SHL, SHR,
ROL, ROR – циклический сдвиг
AND, OR, NOT, XOR
Команды сравнения – x86
CMP,
TEST,
арифметические команды могут изменять
флаги

24.

Управляющие команды
•Условный переход
•Безусловный переход
•Безусловный вызов подпрограммы
•Условный вызов подпрограммы
•Возврат из подпрограммы
•Генерация исключения
•Возврат из обработчика исключения

25.

Пример 1. If
int i;
...
if( i ) {
i = 0;
} else {
i = 1;
}

26.

Пример 1. If -> x86
movl
testl
je
movl
jmp
28(%esp), %eax
%eax, %eax
.L2
$0, 28(%esp)
.L3
.L2:
movl $1, 28(%esp)
.L3:

27.

Пример 1. If -> ARM/RPI
ldr
cmp
beq
mov
str
b
r3, [fp, #-8]
r3, #0
.L2
r3, #0
r3, [fp, #-8]
.L3
mov
str
r3, #1
r3, [fp, #-8]
.L2:
.L3:

28.

Системные команды
Переходы между режимами
•8086/8088 - реальный
•80286 - реальный, защищенный
•80386 – реальный, защищенный,
виртуальный
•x86_64
•ARM - нормальный, thumb, режимы
обработки прерываний
English     Русский Правила