ДС20в05-машинный-уровень-2-Управление (1238926), страница 2
Текст из файла (страница 2)
. ..L3:movqimulqret%rsi, %rax%rdx, %rax# y# y*z}РегистрыИспользование%rdiаргумент x%rsiаргумент y%rdxаргумент z%raxрезультат37Рализация перехода к другомуlong w = 1;. . .switch(x) {. . .case 2:w = y/z;/* Переход к другому */case 3:w += z;break;. . .}case 2:w = y/z;goto merge;case 3:w = 1;merge:w += z;38Carnegie MellonБлоки кода (x == 2, x == 3)long w = 1;.
. .switch(x) {. . .case 2:w = y/z;/*Переход к другому*/case 3:w += z;break;. . .}.L5:movqcqtoidivqjmp.L9:movl.L6:addqret# Case 2%rsi, %rax%rcx.L6# y/z# goto merge# Case 3$1, %eax# w = 1# merge:%rcx, %rax # w += zРегистрыИспользование%rdiаргумент x%rsiаргумент y%rdxаргумент z%raxрезультат39Carnegie MellonБлоки кода (x == 5, x == 6, default)switch(x) {. . .case 5: // .L7case 6: // .L7w -= z;break;default: // .L8w = 2;.L7:movlsubqret.L8:movlret# Case 5,6$1, %eax# w = 1%rdx, %rax # w -= z$2, %eax# Default:# 2}РегистрыИспользование%rdiаргумент x%rsiаргумент y%rdxаргумент z%raxрезультат40Промежуточный итог¢Управление в Cи§§§§¢Управление в ассемблере§§§§¢if-then-elsedo-whilewhile, forswitchУсловный переходУсловная пересылкаКосвенный переход (по таблице переходов)Компилятор создаёт код для более сложного управленияСтандартные приёмы§ Циклы преобразуются в форму do-while или переход-в-середину§ Большие switch используют таблицы переходов§ Разреженные switch могут использовать решающие деревья41.