Главная » Просмотр файлов » ДС18в05-машинный-уровень-2-Управление

ДС18в05-машинный-уровень-2-Управление (1238908)

Файл №1238908 ДС18в05-машинный-уровень-2-Управление (Лекции Северов Часть 1)ДС18в05-машинный-уровень-2-Управление (1238908)2020-10-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Carnegie MellonМашинный уровень 2: УправлениеОсновы информатикиКомпьютерные основы программированияgoo.gl/X7evFНа основе CMU 15-213/18-243:Introduction to Computer Systemsgoo.gl/Q7vgWwЛекция 5, 05 марта, 2018Лектор:Дмитрий Северов, кафедра информатики 608 КПМdseverov@mail.mipt.rucs.mipt.ru/wp/?page_id=3461Машинный уровень 2: УправлениеУправление: флаги условий¢ Условные переходы и пересылки¢ Циклы¢ Операторы переключения¢ Процедуры IA 32¢§ Структура стека§ Соглашения вызова процедур§ Рекурсия и указатели2Carnegie MellonСостояние процессора (x86-64, частично)¢Информация онепосредственноисполняемой программеРегистры%rax%r8§ Промежуточные данные%rbx%r9%rcx%r10%rdx%r11%rsi%r12%rdi%r13%rsp%r14%rbp%r15( %rax, … )§ Адрес вершины стека( %rsp )§ Адрес текущей команды( %rip, … )§ Результаты последнихпроверок ( CF, ZF, SF, OF )Указатель команды%ripТекущая вершина стекаCFZFSFOFФлаги условий3Флаги условий (неявная установка)¢Однобитные регистры- флаги§CF§ZF¢перенос (для unsigned)нольSF знак (для signed)OF переполнение (для signed)Устанавливаются арифметическими операцияминеявно (как побочный результат)Пример: addq Src,Dest ↔ t = a+bCF=1, если перенос в старший бит или заём из него (беззнаковоепереполнение)ZF=1, если t == 0SF=1, если t < 0 (как знаковое), SF == MSBOF=1, если переполнился дополнительный код (знаковый)(a>0 && b>0 && t<0) || (a<0 && b<0 && t>=0)¢Не устанавливаются командой lea!4Флаги условий(явная установка сравнением)¢Явная установка командами сравнения§cmpq Src2, Src1§cmpq b,a как вычисление a-b без сохранения результата§CF=1, если перенос из старшего бита или заём в него(используется при беззнаковых сравнениях)§ZF=1, если a == b§SF=1, если (a-b) < 0 (как знаковые )§OF=1, переполнение в дополнительном коде (знаковое)(a>0 && b<0 && (a-b)<0) || (a<0 && b>0 && (a-b)>0)5Флаги условий(явная установка проверкой бит)¢Явная установка командой test§testq Src2, Src1§testqb,a как вычисление a&b без сохранения результата§Устанавливает флаги в зависимости от Src1 & Src2§Удобно, если один из операндов - маска§ZF=1, если a&b == 0§SF=1, если a&b < 0 (старший бит == 1)6Чтение флагов условий IA32 - 1¢Команды set*§ Устанавливают один байт в 1 или 0 в зависимости от флагов§ Не изменяют остальные 7 байтКомандаsetesetnesetssetnssetgsetgesetlsetlesetasetbУсловиеZF~ZFSF~SF~(SF^OF)&~ZF~(SF^OF)(SF^OF)(SF^OF)|ZF~CF&~ZFCFОписаниеРавно / НольНеравно / Не нольОтрицательноНеотрицательноБольше (знаковое)Больше или равно (знаковое)Меньше (знаковое)Меньше или равно (знаковое)Выше (беззнаковое)Ниже (unsigned)7x86-64 Целочисленные регистры%rax%al%r8%r8b%rbx%bl%r9%r9b%rcx%cl%r10%r10b%rdx%dl%r11%r11b%rsi%sil%r12%r12b%rdi%dil%r13%r13b%rsp%spl%r14%r14b%rbp%bpl%r15%r15b§ Можно обращаться к младшим байтам8Чтение флагов условий - 2¢Команды set*§ Устанавливают один байт в 1 или 0 в зависимостиот флагов¢Один из 8 байтовых регистров§ Не изменяются остальные байты регистра§ Зануление остатка обычно – movzbl§32-битные команды зануляют старшие 32 битаint gt (long x, long y){return x > y;}cmpq%rsi, %rdisetg%almovzbl %al, %eaxretРегистрПрименение%rdiаргумент x%rsiаргумент y%raxрезультат# Сравнение x:y# Установка младшего байта %rax в 1 если ># Зануление остальных байт %rax9Машинный уровень 2: УправлениеУправление: флаги условий¢ Условные переходы и пересылки¢ Циклы¢ Операторы переключения¢ Процедуры IA 32¢§ Структура стека§ Соглашения вызова процедур§ Рекурсия и указатели10Переходы¢Команды j*§ Передача управления по адресу в зависимости от флаговj*jmpУсловия1ОписаниеjeZFРавно / Нольjne~ZFНеравно / Не нольjsSFОтрицательноjns~SFНеотрицательноjgjge~(SF^OF)&~ZF Больше (знаковое)~(SF^OF)Больше или равно (знаковое)jl(SF^OF)Меньше (знаковое)jle(SF^OF)|ZFМеньше или равно (знаковое)ja~CF&~ZFВыше (беззнаковое)jbCFНиже (беззнаковое)Безусловный11Carnegie MellonПример условного ветвления (по старинке)¢Создание> gcc –Og -S –fno-if-conversion control.clong absdiff(long x, long y){long result;if (x > y)result = x-y;elseresult = y-x;return result;}absdiff:cmpqjlemovqsubqret.L4:movqsubqret%rsi, %rdi.L4%rdi, %rax%rsi, %rax# x:y# x <= y%rsi, %rax%rdi, %raxРегистрПрименение%rdiаргумент x%rsiаргумент y%raxрезультат12Carnegie MellonПредставление «go to» кодомСи допускает оператор goto¢ Переход в точку, обозначенную меткой¢long absdiff(long x, long y){long result;if (x > y)result = x-y;elseresult = y-x;return result;}long absdiff_j(long x, long y){long result;int ntest = x <= y;if (ntest) goto Else;result = x-y;goto Done;Else:result = y-x;Done:return result;}13Трансляция условного выражения в общем(используя ветвление)Cи кодval = Test ? Then_Expr : Else_Expr;val = x>y ? x-y : y-x;§ Test – целочисленное выражениеgoto версияnt = !Test;if (nt) goto Else;val = Then_Expr;goto Done;Else:val = Else_Expr;Done:.

. .= 0 интерпретируется как ложь§ ≠ 0 интерпретируется как истина§ Создаёт раздельные фрагменты кодадля Then_Expr и Else_Expr§ Исполняется только один из двух§14Использование условной пересылки¢Команды условной пересылки§ Команды поддерживают:if (Test) Dest ß Src§ Есть в x86 процессорах после 1995г.§ GCC пытается использовать их§ Но, только в безопасных случаях!¢А зачем?§ Переходы разрушают конвейерноеисполнение инструкций§ Условная пересылка не вызываетпередачи управленияСи кодval = Test? Then_Expr: Else_Expr;goto версияresult = Then_Expr;eval = Else_Expr;nt = !Test;if (nt) result = eval;return result;15Carnegie MellonПример условной пересылкиlong absdiff(long x, long y){long result;if (x > y)result = x-y;elseresult = y-x;return result;}absdiff:movqsubqmovqsubqcmpqcmovleret%rdi,%rsi,%rsi,%rdi,%rsi,%rdx,%rax%rax%rdx%rdx%rdi%raxРегистрПрименение%rdiаргумент x%rsiаргумент y%raxрезультат# x# result = x-y# eval = y-x# x:y# if <=, result = eval16Неудачные применения усл.

пересылкиРесурсоёмкие вычисленияval = Test(x) ? Hard1(x) : Hard2(x);¢Оба значения вычисляются¢Имеет смысл только для очень простых выраженийРискованые вычисленияval = p ? *p : 0;¢Оба значения вычисляются¢Возможен нежелательный эффектВычисления с побочным эффектомval = x > 0 ? x*=7 : x+=3;¢Оба значения вычисляются¢Побочные эффекты должны исключаться17Машинный уровень 2: УправлениеУправление: флаги условий¢ Условные переходы и пересылки¢ Циклы¢ Операторы переключения¢ Процедуры IA 32¢§ Структура стека§ Соглашения вызова процедур§ Рекурсия и указатели18Пример цикла do-whileCи кодlong pcount_do(unsigned long x) {long result = 0;do {result += x & 0x1;x >>= 1;} while (x);return result;}¢¢goto версияlong pcount_goto(unsigned long x) {long result = 0;loop:result += x & 0x1;x >>= 1;if(x) goto loop;return result;}Подсчитывает количество единичных бит в аргументе x (подсчётвыталкиванием)Использует условный переход для зацикливания или выхода из цикла19Компиляция цикла do-whilegoto версияlong pcount_goto(unsigned long x) {long result = 0;loop:result += x & 0x1;x >>= 1;if(x) goto loop;return result;}РегистрыПрименение%rdiаргумент x%raxрезультатmovl$0, %eax.L2:#movq%rdi, %rdxandl$1, %edxaddq%rdx, %raxshrq%rdijne.L2rep; ret# result = 0loop:####t = x & 0x1result += tx >>= 1if (x) goto loop20Компиляция do-while в общемСи кодdoТелоwhile (Условие);¢Тело: {}goto версияloop:Телоif (Условие)goto loopоператор1;оператор2;…операторn;21Carnegie MellonТрансляция “while” в общем №1Трансляция “переход-в-середину”¢ Используется при -Og“goto” версияgoto test;loop:“while” версияТелоwhile (Условие)test:Телоif (Условие)goto loop;done:¢22Пример цикла while №1Cи кодlong pcount_while(unsigned long x) {long result = 0;while (x) {result += x & 0x1;x >>= 1;}return result;}¢Переход в серединуlong pcount_goto_jtm(unsigned long x) {long result = 0;goto test;loop:result += x & 0x1;x >>= 1;test:if(x) goto loop;return result;}Отличие от do-while§ Начальный goto начинает цикл с проверки23Компиляция while в общем №2while версияwhile (Условие)Телоdo-while версияif (!Условие)goto done;doТелоwhile(Условие);done:сведение к “do-while”¢ Используется при –O1¢goto версияif (!Условие)goto done;loop:Телоif (Условие)goto loop;done:24Carnegie MellonПример цикла while №2Cи кодlong pcount_while(unsigned long x) {long result = 0;while (x) {result += x & 0x1;x >>= 1;}return result;}¢do-while версияlong pcount_goto_dw(unsigned long x) {long result = 0;if (!x) goto done;loop:result += x & 0x1;x >>= 1;if(x) goto loop;done:return result;}Отличие от “do-while”§ Начальное условие защищает вход в цикл25Общая форма цикла forОбщая формаfor(Начало; Условие; Изменение )Началоi = 0УсловиеТело#define WSIZE 8*sizeof(int)long pcount_for(unsigned long x){size_t i;long result = 0;for (i = 0; i < WSIZE; i++){unsigned bit =(x >> i) & 0x1;result += bit;}return result;}i < WSIZEИзменениеi++Тело{unsigned bit =(x >> i) & 0x1;result += bit;}26Цикл for à цикл whilefor версияfor(Начало; Условие; Изменение )Телоwhile версияНачало;while (Условие) {ТелоИзменение;}27Carnegie MellonПреобразование for-whileНачалоi = 0Условиеi < WSIZEИзменениеi++Тело{unsigned bit =(x >> i) & 0x1;result += bit;long pcount_for_while(unsigned long x){size_t i;long result = 0;i = 0;while (i < WSIZE){unsigned bit =(x >> i) & 0x1;result += bit;i++;}return result;}}28Преобразование цикла for - do-whilegoto версияCи кодlong pcount_for(unsigned long x){size_t i;long result = 0;for (i = 0; i < WSIZE; i++){unsigned bit =(x >> i) & 0x1;result += bit;}return result;}¢Начальное условие можетбыть оптимизированоlong pcount_for_goto_dw(unsigned long x) {size_t i;long result = 0;Началоi = 0;if (!(i < WSIZE))goto done;!Условиеloop:{unsigned bit =Тело(x >> i) & 0x1;result += bit;}i++; Изменениеif (i < WSIZE)Условиеgoto loop;done:return result;}29Машинный уровень 2: УправлениеУправление: флаги условий¢ Условные переходы и пересылки¢ Циклы¢ Операторы переключения¢ Процедуры IA 32¢§ Структура стека§ Соглашения вызова процедур§ Рекурсия и указатели30long switch_eg(long x, long y, long z){long w = 1;switch(x) {case 1:w = y*z;break;case 2:w = y/z;/* Переход к другому */case 3:w += z;break;case 5:case 6:w -= z;break;default:w = 2;}return w;}Пример оператораswitch¢Совмещённыеварианты§ case 5 и case 6¢Переход к другомуварианту§ Из case 2 в case 3¢Отсутствующиеварианты§ case 431Структура таблицы переходовТаблица переходовВ виде switchswitch(x) {case val_0:Блок 0case val_1:Блок 1• • •case val_n-1:Блок n–1}jtab:Targ0Цели переходовTarg0:Блок кода0Targ1Targ2•••Targn-1Targ1:Блок кода1Targ2:Блок кода2•••Приблизительный переводgoto *JTab[x];Targn-1:Блок кодаn–132Пример оператора переходаlong switch_eg(long x, long y, long z){long w = 1;switch(x) {.

Характеристики

Тип файла
PDF-файл
Размер
4,22 Mb
Тип материала
Высшее учебное заведение

Тип файла PDF

PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее