Скачиваний:
35
Добавлен:
15.09.2014
Размер:
2.66 Кб
Скачать
#pragma inline
#include <stdio.h>
#include <conio.h>

void Registers();
void protectedMode();
void realMode();

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')
				{
					Registers();
					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;
		}
	}
}

void Registers()
{
	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;
	Registers();
}

void realMode()
{
	asm{
		mov bh, 0x07 // number of transfer function
		mov ah, 0x4c // 4-th interruption
		int 0x21
	}
}
Соседние файлы в папке 5 память