Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
23.11.2024
Размер:
460.73 Кб
Скачать

 

МИЭТ, СПИНТех, КАИ

Передача управления (ветвления и циклы)

8 / 13

 

Условие с операторами в одной ветви

 

 

x;

x > 0

Начало

 

1

int x = -6;

 

 

 

2

asm

 

 

x = 0;

x < 0

 

да

3

(

 

 

Или

 

x > 0

4

"cmpl $0, %[X]\n"

 

 

 

 

asm

 

 

 

5

"jge end_check\n"

1

 

нет

 

 

 

 

2

(

 

x = 0

 

6

"movl $0, %[X]\n"

3

"cmpl $0, %[X]\n"

 

 

 

 

 

 

4

"cmovll %[Z], %[X]\n"

 

 

7

"end_check:\n"

5

: [X]"+r"(x)

 

Конец

 

 

 

 

6

: [Z]"r"(0)

 

 

8

: [X]"+rm"(x)

7

: "cc"

 

 

 

9

: : "cc"

 

8

);

 

 

 

10

);

 

Флаги и условия

Условие с операторами в одной ветви

Программирование нелинейных алгоритмов

Условие с операторами в двух ветвях

Обработка чисел с плавающей запятой

Цикл (сумма двоичных цифр x)

МИЭТ, СПИНТех, КАИ

Передача управления (ветвления и циклы)

9 / 13

Условие с операторами в двух ветвях

 

Начало

 

 

Начало

 

x > 0

 

да

да

нет

 

 

x > 0

 

 

 

нет

y = 0

 

 

y = 1

 

 

 

 

 

 

 

y = 0

 

Конец

 

 

 

y(x) = 0; x < 0

y = 1

 

1;

x >

0

asm(

"cmpl $0, %[X]\n"

Конец

"movl $0, %[X]\n"

 

 

 

"setge %[X]\n"

 

 

: [X]"+m"(x) : : "cc"

 

);

 

 

 

 

int x = -6, y; asm

(

"cmpl $0, %[X]\n" "jge setting_1\n"

"movl $0, %[Y]\n"

"jmp end_check\n"

"setting_1:\n"

"movl $1, %[Y]\n"

"end_check:\n"

:[Y]"=rm"(y) :[X]"rm" (x) : "cc"

);

Флаги и условия

Условие с операторами в одной ветви

Программирование нелинейных алгоритмов

Условие с операторами в двух ветвях

Обработка чисел с плавающей запятой

Цикл (сумма двоичных цифр x)

МИЭТ, СПИНТех, КАИ

Передача управления (ветвления и циклы)

10 / 13

Цикл (сумма двоичных цифр x)

 

Начало

1

int x = 7, count;

 

2

asm

 

 

3

(

 

count = 0

4

"xorl %[Count], %[Count]\n"

 

да

5

"begin_iteration:\n"

 

6

"cmpl $0, %[X]\n"

 

x = 0

 

7

"je end_loop\n"

 

нет

 

 

 

 

CF = x&1,

8

"shrl $1, %[X]\n"

 

x = (x >> 1)

 

 

 

 

нет

9

"jnc end_iteration\n"

 

CF = 1

 

да

 

 

 

count = count + 1

10

"incl %[Count]\n"

 

 

11

"end_iteration:\n"

 

 

12

"jmp begin_iteration\n"

 

 

13

"end_loop:\n"

 

Конец

14

:[Count]"=rm"(count),[X]"+rm"(x)

15

: : "cc"

 

 

16

);

 

Флаги и условия

Условие с операторами в одной ветви

Программирование нелинейных алгоритмов

Условие с операторами в двух ветвях

Обработка чисел с плавающей запятой

Цикл (сумма двоичных цифр x)

Соседние файлы в папке АВС