Разделы презентаций


Есть ли у вас вопросы?

Содержание

Краткое содержание предыдущей серииКак в ассемблере осуществляется сложение и вычитание?В чем опасность умножения?А деления?Как в ассемблере осуществляется сравнение двух чисел?

Слайды и текст этой презентации

Слайд 1Есть ли у вас вопросы?

Есть ли у вас вопросы?

Слайд 2Краткое содержание предыдущей серии
Как в ассемблере осуществляется сложение и вычитание?

В

чем опасность умножения?

А деления?

Как в ассемблере осуществляется сравнение двух чисел?

Краткое содержание предыдущей серииКак в ассемблере осуществляется сложение и вычитание?В чем опасность умножения?А деления?Как в ассемблере осуществляется

Слайд 3Краткое содержание этой серии
Разбор полетов

Как же все-таки связан тип переменной

и ее адрес

Подробнее о сравнениях и флагах

Как в ассемблере осуществляются

циклы и ветвления

Операции языка С (продолжение)

Краткое содержание этой серииРазбор полетовКак же все-таки связан тип переменной и ее адресПодробнее о сравнениях и флагахКак

Слайд 4Оформление
Отчет нормального человека
Отчет, от которого вытекают глаза

ОформлениеОтчет нормального человекаОтчет, от которого вытекают глаза

Слайд 5Вот так тоже не надо

Вот так тоже не надо

Слайд 6Вот так тоже не надо

Вот так тоже не надо

Слайд 7Вот так тоже не надо

Вот так тоже не надо

Слайд 8Отступы

Отступы

Слайд 9Отступы

Отступы

Слайд 10Отступы

Отступы

Слайд 11Отступы

Отступы

Слайд 12Отступы

Отступы

Слайд 13Как же связан тип переменной и ее адрес?
Адрес переменной кратен

ее размеру в байтах!

Это называется «выравнивание» - alignment


Как же связан тип переменной и ее адрес?Адрес переменной кратен ее размеру в байтах!Это называется «выравнивание» -

Слайд 14Зачем нужно выравнивание?
Вспоминаем, как устроена память

Если хочется читать, например, по

4 байта за такт, то в памяти одну «ячейку» делают

размером в 4 байта.

Поэтому из памяти ВСЕГДА будет читаться по 4 байта за такт, даже если 2 из них не нужны

Но как отсюда вытекает необходимость выравнивания?
Зачем нужно выравнивание?Вспоминаем, как устроена памятьЕсли хочется читать, например, по 4 байта за такт, то в памяти

Слайд 15Выравнивание
Как выглядит невыровненный доступ?

ВыравниваниеКак выглядит невыровненный доступ?

Слайд 16Последствия
Выровненный доступ быстрее (особенно если есть кэш-память)

Невыровненный доступ поддерживается не

всегда (в Cortex M3 – только к 4 и 2

байтам)

Байт всегда выровнен

Для выравнивания требуется больше памяти?
Нет, порядок расположения переменных компилятор может менять при оптимизации

Padding в структурах

ПоследствияВыровненный доступ быстрее (особенно если есть кэш-память)Невыровненный доступ поддерживается не всегда (в Cortex M3 – только к

Слайд 17Что такое padding?
Порядок элементов внутри структуры менять нельзя (даже при

оптимизации)

Но элементы должны быть выровнены!

Итог: размер структуры не всегда равен

сумме размеров ее элементов

Padding – пустые байты между элементами

Обычно есть спец. слова вроде __packed, чтобы паддинг убрать (не стандартизированные)
Что такое padding?Порядок элементов внутри структуры менять нельзя (даже при оптимизации)Но элементы должны быть выровнены!Итог: размер структуры

Слайд 18Арифметика в ассемблере Какие еще есть флаги?
С – флаг Carry (перенос)

N

– флаг Negative (отрицательный результат)

Z – флаг Zero (результат 0)

V

– флаг oVerflow (знаковое переполнение,
«неверная» смена знака)


Есть и другие, но к арифметике они не относятся
Арифметика в ассемблере Какие еще есть флаги?С – флаг Carry (перенос)N – флаг Negative (отрицательный результат)Z –

Слайд 19Сравнения в ассемблере
CMP r0, r1 temp

= r0 – r1, обновить регистр состояний, отбросить temp (аналогично

SUBS temp, r0,r1)

CMN r0,r1 temp = r0 + r1, обновить регистр состояний, отбросить temp (аналогично ADDS temp, r0,r1)

TEQ r0,r1 (test equality), аналог ==, компилятором используется редко

Сравнения в ассемблереCMP  r0, r1    temp = r0 – r1, обновить регистр состояний,

Слайд 20Как работает сравнение и зачем их два?
Мы хотим сравнить два

числа А и В.
Как узнать, какое из них больше

с помощью арифметики?

Вычесть одно из другого!
Если С = А-В отрицательное, значит А меньше В.

Команда CMP a,b это и делает (и обновляет регистр состояний).
Знак результата показывает флаг N (1 если Negative).
Как работает сравнение и зачем их два?Мы хотим сравнить два числа А и В. Как узнать, какое

Слайд 21А зачем CMN?
Вторым аргументом команды может быть регистр или число.

Число должно лежать прямо в коде команды.

А если это

число отрицательное?
Из-за дополнительного кода в нем будет очень много единиц в старших битах.

Но A-(-B) = A+B!
CMN a,b – это сравнение a – (-b), через сложение.
Если результат отрицательный, значит a < b. Флаг тот же.
А зачем CMN?Вторым аргументом команды может быть регистр или число. Число должно лежать прямо в коде команды.

Слайд 22Что означает флаг V?
V – от слова oVerflow означает знаковое

переполнение.
Зачем он нужен?

Знак при арифметических операциях может меняться неправильно.
Например:
int8_t a

= -128; // 1000 0000 в двоичном коде
a = a-1; // чему равно а?

a будет равно +127, потому что -129 не влезает в один байт.

(можно сказать, что флаг С – тоже переполнение, только беззнаковое)
Что означает флаг V?V – от слова oVerflow означает знаковое переполнение.Зачем он нужен?Знак при арифметических операциях может

Слайд 23Что означает флаг V?
Неверная смена знака – знаковое переполнение.
В языке

С это undefined behavior.

При сравнениях это тоже может происходить (ведь

сравнения – это вычитания).

Поэтому операции, которые используют результаты сравнений, проверяют и флаг V.
Что означает флаг V?Неверная смена знака – знаковое переполнение.В языке С это undefined behavior.При сравнениях это тоже

Слайд 24А какие команды используют результаты сравнений?
Где в языке С используется

сравнение?
if – else
for, while, do-while
switch

Следовательно, команды ассемблера, которые реализуют циклы

и ветвления, используют результаты сравнений.


В основном, это команды перехода (передачи управления).
А какие команды используют результаты сравнений?Где в языке С используется сравнение?if – elsefor, while, do-whileswitchСледовательно, команды ассемблера,

Слайд 25Переходы в языке С
if – else
for
while
do – while
switch
goto
break, continue, return
вызов

функции

Переходы в языке Сif – elseforwhiledo – whileswitchgotobreak, continue, returnвызов функции

Слайд 26Несколько слов о goto
goto – оператор безусловного перехода:

... some code...
P:

// метка
... some code..
goto P; // безусловный переход

к метке Р


Этот оператор есть в огромном количестве языков программирования, но используется крайне редко.
Несколько слов о gotogoto – оператор безусловного перехода:... some code...P:   // метка... some code..goto P;

Слайд 27goto
"В течение нескольких лет я знаком с точкой

зрения, что качество программистов это убывающая функция от плотности операторов

go to в коде, который они пишут.

Недавно я понял почему использование оператора go to имеет такой катастрофический эффект, и теперь я убежден, что оператор go to следует убрать из всех языков программирования "высокого уровня" (то есть из всех за исключением, возможно, машинного кода)...“
Эдсгер Дейкстра
goto

Слайд 28goto позволяет писать «спагетти-код»
Чему равны а, b, c к строке

с точкой останова? Достижима ли точка останова?

goto позволяет писать «спагетти-код»Чему равны а, b, c к строке с точкой останова? Достижима ли точка останова?

Слайд 29Типичный сценарий использования goto
http://xkcd.com/292/
Вывод: лучше не использовать goto. Без него

всегда можно обойтись.

Типичный сценарий использования gotohttp://xkcd.com/292/Вывод: лучше не использовать goto. Без него всегда можно обойтись.

Слайд 30Ветвление и циклы в ассемблере
Безусловные переходы
Условные переходы
Другие команды с условным

исполнением
Сравнение с переходом
Команда IT (If-then), «придающая условность»

В некоторых ассемблерах есть

спец. команды для циклов (напр. loop)
Ветвление и циклы в ассемблереБезусловные переходыУсловные переходыДругие команды с условным исполнениемСравнение с переходомКоманда IT (If-then), «придающая условность»В

Слайд 31Условное исполнение
Что это такое?
Это когда команда выполняется по условию!
Какие бывают

условия?
Сочетания флагов состояния!

Условие задается постфиксом.

Список постфиксов см. cortex m3

user guide стр. 61 табл. 3-4
Условное исполнениеЧто это такое?Это когда команда выполняется по условию!Какие бывают условия?Сочетания флагов состояния!Условие задается постфиксом. Список постфиксов

Слайд 32Условное исполнение
Примеры постфиксов и расшифровка:

LT – Less Then (если меньше,

знаковое)
GE – Greater or Equal (если больше или равно, знаковое)
HI

– Higher (если больше, беззнаковое)
NE – Not Equal (не равно)
MI – Minus (отрицательный результат)

Пример:
CMP R3, #0x07; сравнить содержимое R3 и число 7
BGE 0x080003BA ; Если R3 >= 7 – перейти по адресу
MOVS r0, #0x01
Условное исполнениеПримеры постфиксов и расшифровка:LT – Less Then (если меньше, знаковое)GE – Greater or Equal (если больше

Слайд 33Условное исполнение
В некоторых наборах команд (например, ARMv5) почти все команды

могли иметь условное исполнение.

В ARMv7 «сами по себе» условны только

команды перехода. Для придания «условности» остальным командам используется команда IT. C ее помощью до 4 команд могут быть выполнены по условию:

CMP R4, 5 ; сравнить R4 и число 5
ITTE NE ; три следующие команды – условные
ADDNE R0, R0, R1 ; (если не равно – R0=R0+R1)
ADDNE R2, R2, #1 ; (если не равно – R2=R2+1)
MOVEQ R2, R3 ; (иначе – R2=R3)
Условное исполнениеВ некоторых наборах команд (например, ARMv5) почти все команды могли иметь условное исполнение.В ARMv7 «сами по

Слайд 34Команды перехода
Названия в разных ассемблерах разное, суть одна и та

же
В x86 – команда jmp (от слова jump)
В ARM –

команда B (от слова branch)



В некоторых ассемблерах специальной команды нет, используется запись в регистр-счетчик команд. В ARM так делать можно, но не рекомендуется.
Команды переходаНазвания в разных ассемблерах разное, суть одна и та жеВ x86 – команда jmp (от слова

Слайд 35Команда B
B адрес – переход по адресу (±16 Мб от

текущего положения)

BX r0– переход по адресу, который храниться в r0

Условные

переходы:
BLT – переход, если «меньше или равно»
BGE – переход, если «больше или равно» и т.д.

BL и BLX – переход в функцию (а зачем отдельная команда?)
Команда BB адрес – переход по адресу (±16 Мб от текущего положения)BX r0– переход по адресу, который

Слайд 36Ветвление
Разумеется, возможны и другие варианты реализации ветвления.
Выбор за компилятором

ВетвлениеРазумеется, возможны и другие варианты реализации ветвления. Выбор за компилятором

Слайд 37Цикл

Цикл

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика