Turbo C підтримує зручний механізм доступу до внутрішніх регістрів мікропроцесора через псевдозмінні, посилання на які в С – програмі компілюється в посилання на внутрішній регістр мікропроцесора. Перерахуємо імена псевдозмінних:
_AX; _AL; _AH; _BX; _BL; _BH;
_CX; _CL; _CH; _DX; _DL; _DH;
_SI; _DI; _BP; _SP;
_CS; _ES; _DS; _SS.
Для того щоб дізнатись, наприклад, поточне значення сегментних регістрів, використовують наступний код:
unsigned cur_code_seg, cur_data_seg, cur_stack_seg, cur_es_seg;
cur_code_seg=_CS;
cur_data_seg=_DS;
cur_stack_seg=_SS;
cur_es_seg=_ES;
…
Псевдозмінна може використовуватись і в лівій частині оператора присвоювання. При цьому слід пам’ятати, що:
1) неможливо безпосередньо присвоїти значення регістрам CS, IP;
2) зміна значення сегментних регістрів DS, SS та ES часто приводить до непередбачених наслідків для програми і вимагає особливої обережності;
3) встановлення в регістрі значення можуть бути неявно змінені операторами програми які слідують за ними і до моменту використання в інших виразах будуть містити не раніше присвоєне, а випадкове значення;
4) при використанні псевдозмінних слід відключити використання регістрових змінних і регістрової оптимізації в опціях компілятора.
Для отримання значення сегментних регістрів може бути використана і спеціальна бібліотечна функція segread(), специфікація якої наведена нижче:
#include<dos.h>
void segread(struct SREGS*segp)
Заповнюється значеннями сегментних регістрів поля структурної змінної
по шаблону SREGS. Користувач повинен описати структурну змінну і передати
покажчик на неї. Шаблон структури SREGS міститься у файлі <dos.h>:
struct SREGS {
unsigned int es;
unsigned int cs;
unsigned int ss;
unsigned int ds;
};
Turbo C дозволяє встановлювати необхідні значення прапору переривання. Для цього використовуються макро enable() та disable(), прототипи яких містяться в файлі <dos.h>:
# include
<dos.h>
void disable(void)
void enable(void)
Функція disable() забороняє всі апаратні переривання,
що маскуються, а функція enable() дозволяє їх.
![]() |
![]() |
![]() |