Использование указателей в программах на языках С/С++/С# . Васильев В.Г. - 27 стр.

UptoLike

Составители: 

В этом примере макросы FP_SEG и FP_OFF стоят в правой части
оператора присваивания. Следовательно, они возвращают смещение и адрес
сегмента переменной. Обратите также внимание, как можно расчленить
длинную строку в операторе printf().
Программа # 2.4 демонстрирует возможность использования макросов FP_SEG
и FP_OFF для инициализации far указателя.
/* программа # 2.4 */
# include < dos.h >
# include < stdio.h >
/*прототипы используемых функций */
void write_byte ( unsigned int ,unsigned , char );
char read_byte ( unsigned int ,unsigned );
void main ( void )
{
/* адрес B800:0000 - адрес видеопамяти */
write_byte (0xB800,0x0000,'$'); /* записываем символ '$'*/
/* читаем и выводим на экран записанный символ */
printf("%c\n", read_byte (0xB800,0x0000));
return;
}
/*
функция читает байт памяти, адрес которого задается в виде адреса сегмента и
смещения в сегменте
*/
char read_byte ( unsigned int seg_val,unsigned int off_val)
{
char far *point;
FP_SEG (point) = seg_val;
FP_OFF (point) = off_val;
return (*point);
}
/*функция записывает байт в память по адресу, который задается в виде
aдреса сегмента и смещения в сегменте */
void write_byte ( unsigned int seg_val,unsigned int off_val,
char byte)
{
char far *point;
27