русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Pop DX; pop CX; pop BX; pop AX


Дата додавання: 2014-11-28; переглядів: 752.


}

У асемблерних командах asm-послідовності у якості операндів можна застосовувати імена змінних, що об’явлені вище, наприклад:

short alfa, beta;

asm { mov AX, alfa

Mov BX, beta

...........

}

Оператори asm звичайно пишуться у тілі деякої функції. У такому разі відповідний код вставляється у поточну точку коду функції. Але asm-оператор можна записувати й на глобальному рівні, тоді відповідний йому код буде розміщено у сегменті даних програми.

Формально asm-послідовність є оператор. Компілятор попереджає більшість конфліктів між вбудованими у asm-оператор командами асемблеру та сусідніми з ними виразами С++.

У наведеній нижче програмі для виконання операції обміну значеннями змінних alfa, beta використовується асемблерний код.

 

// Приклад 1

#include <syst.h>

Void main()

{ int alfa = 1111, beta = 3333;

printf("alfa = %d beta = %d \n",alfa,beta);

asm { mov EAX, alfa // копіювання alfa у регістр EAX

Mov EDX, beta // копіювання beta у регістр EDX

Mov beta, EAX // копіювання регістру EAX у beta

Mov alfa, EDX // копіювання регістру EDX у alfa

}

printf("alfa = %d beta = %d \n",alfa,beta);

}

 

Вправи

 

Вправа 1

Напишіть функцію для впорядкування одновимірного масиву типу int по зменшенню. Отримайте і проаналізуйте асемблерний текст цієї функції. Які існують можливості для вдосконалення коду функції?

 

Вправа 2

Напишіть програму, яка вводить значення двох змінних типу int, виконує операцію обміну значеннями для цих змінних і виводить результат на екран. Для програмування операції парного обміну застосувати ассемблерну вставку (asm-послідовність). Алгоритм обміну значеннями реалізувати без застосування буферної змінної (шляхом використання регістрів процесору).

Напишіть функцію для виконання операції парного обміну, отримайте її ассемблерний код. Покажіть, що виконання ассемблерної вставки потребує меншого часу, ніж виконання відповідної функції.

 

Вправа 3

Напишіть програму, яка виводить на екран значення із 64-бітового регістру процесора TSC (лічильник тактів процесора). Програма повинна виводити два цілих 4-х байтових значення: старші 32 розряди і молодші 32 розряди вказаного регістру.

 

Вправа 4

Напишіть функції для точного вимірювання проміжку часу. Застосувати 64-бітовий регістр процесору TSC. Перша з функцій timer_init повинна виконувати збереження поточного стану регістру TSC. Друга функція - timer_val повинна повертати проміжок часу з моменту виклику функції timer_init у тактах процесору як цілочислове значення.

 



<== попередня лекція | наступна лекція ==>
Bcc32 myprog.asm | Програмна РЕАЛІЗАЦІЯ АЛГОРИТМІВ


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн