Скачиваний:
39
Добавлен:
15.09.2014
Размер:
40.45 Кб
Скачать

Министерство образования Республики Беларусь

Учреждение образования

Белорусский Государственный Университет

Информатики и Радиоэлектроники

Кафедра ЭВМ

Отчет по лабораторной работе

Тема: «Работа с памятью»

Выполнил:

студент гр. 750501

Демидовец А.Г.

Проверил:

Одинец Д.Н.

Минск, 2009

1. Постановка задачи

Написать и отладить программу, которая демонстрирует запись и чтение данных в реальном, защищенном и виртуальном режиме ОЗУ -> HDD , HDD -> ОЗУ

Предусмотреть возможность ввода с клавиатуры последовательности символов,

отражения на экране дисплея текущего режима работы, содержимого заданных адресов ОЗУ и HDD.

Пересылку начинать осуществлять с конечного символа.

Интерфейс переключения между режимами разработать самостоятельно.

Область памяти для хранения массива определить самостоятельно

2. Листинг программы

#pragma inline

#include <stdio.h>

#include <conio.h>

void outputRegisters()

{

printf("\n Register CR0:\n ");

asm{

mov ebx,cr0

push ebx

push edx

mov cx,32 // number of operations

xor dl,dl

}

l1:

asm{

shl ebx,1 // shear left

adc dl,30h // add carry flag

mov ah,2h // output symbol

int 21h

mov bl,cl

dec bl

and bl,00000011b

cmp bl,0

jne after_space1

}

spase_print1:

asm{

mov dl,20h // output space

int 21h

}

after_space1:

asm{

xor dl,dl

loop l1

pop eax

pop ebx

}

printf("\n Register EFLAGS:\n ");

asm{

pushfd

pop ebx

push ebx

push edx

mov cx,32

xor dl,dl

}

l2:

asm{

shl ebx,1

adc dl,30h

mov ah,2h

int 21h

mov bl,cl

dec bl

and bl,00000011b

cmp bl,0

jne after_space2

}

spase_print2:

asm{

mov dl,20h // output space

int 21h

}

after_space2:

asm{

xor dl,dl

loop l2

pop eax

pop ebx

}

}

void protectedMode()

{

asm{

mov ax, 0x1687

int 0x2f

}

_AX=0;

outputRegisters();

}

void realMode()

{

asm{

mov bh, 0x07 // number of transfer function

mov ah, 0x4c // 4-th interruption

int 0x21

}

}

void main()

{

char a, t;

FILE *f;

char buf[128];

buf[0]=0;

clrscr();

puts("\n Hi, man!!!Memory is ready to work!\n");

while(1)

{

clrscr();

printf("\n Big menu:");

printf("\n 1. Real-virtual mode");

printf("\n 2. Protected mode");

printf("\n 0. Exit\n");

a=getch();

if(a!='0')

{

do

{

clrscr();

if (a=='1')

{

outputRegisters();

puts("\n\n Current mode = real-virtual!");

}

if (a=='2')

{

protectedMode();

puts("\n\n Current mode = protected!");

}

printf("\n\n Small menu: \n");

printf(" 1. From Input to RAM\n");

printf(" 2. From RAM to HDD\n");

printf(" 3. From HDD to RAM\n");

printf(" 4. Clear buffer\n");

printf(" 0. Back to big menu\n");

printf(" Buffer = %s", buf);

if( buf[0]=='\0' )

printf("***");

puts("");

t=getch();

switch(t)

{

case '1':

printf("\n Input info:\n ");

gets(buf);

break;

case '2':

f=fopen("av4.txt","w+");

fputs(buf,f);

fseek(f,0,SEEK_SET);

fclose(f);

break;

case '3':

f=fopen("av4.txt","r+");

fgets(buf,128,f);

fseek(f,0,SEEK_SET);

fclose(f);

break;

case '4':

buf[0]=0;

break;

}

}while(t!='0');

}

if(a=='0')

{

realMode();

return;

}

}

}

5

Соседние файлы в папке 5 память