delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/11/17/22:58:25

Message-ID: <01BE1264.A6BD3580@PLUM.engr.rendition.com>
From: Jay Tseng <jay DOT tseng AT rendition DOT com>
To: "Eli Zaretskii (E-mail)" <eliz AT is DOT elta DOT co DOT il>
Cc: "Djgpp AT Delorie. Com (E-mail)" <djgpp AT delorie DOT com>,
"'jay DOT tseng AT rendition DOT com'" <jay DOT tseng AT rendition DOT com>
Subject: Inline Assembly to access control registers C0 and C3
Date: Tue, 17 Nov 1998 19:58:30 -0800
MIME-Version: 1.0
Reply-To: djgpp AT delorie DOT com

------ =_NextPart_000_01BE1264.A6C4D6A0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Eli,


Help needed.

I wrote C code with inline assembly. It accesses control registers CR0 =
and CR3. The code is as shown after this message. The problem is that it =
runs under WINDOWS DOS environment but fails when runs under pure DOS =
environment  with error message "Exiting due to signal SIGSEGV, General =
Protection Fault at eip=3D........".   I use djgcc version 2.1 and =
compiled the code with  " gcc -fomit-frame-pointer -m386 -Wall ".  =
Inside the code, I intentionally created v_test0 and v_test3 =
corresponding to v_getCR0 and v_getCR3 respectively with minor changes. =
In  DOS environment,  v_test0 and v_test3 went through but failed when =
v_getCR0 is encountered. Any idea? By the way the processor is a  =
Pentium-s 166.

Thanks,

Jay
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
#include <stdio.h>

unsigned long result=3D0;


void=20
v_test0()
{

	__asm__ __volatile__
	(
	 "movl $0x11111111, %eax\n"
	 "movl %eax, _result\n"
	);
	return;
}
void=20
v_getCR0()
{

	__asm__ __volatile__
	(
	 "movl %cr0, %eax\n"
	 "movl %eax, _result\n"
	);
	return;
}

void
v_test3()
{

	asm volatile
	(
	 "movl $0x22222222, %0\n"
	 : "=3Db" (result)
	 :=20
	 : "%ebx" , "memory"
	);
	return;
}
void
v_getCR3()
{

	asm volatile
	(
	 "movl %%cr3, %0\n"
	 : "=3Db" (result)
	 :=20
	 : "%ebx" , "memory"
	);
	return;
}

#define disable() __asm__ __volatile__ ("cli");



void main()
{
  =20
	disable();
	v_test0();
	printf("result=3D0x%x\n", result);
	v_test3();
	printf("result=3D0x%x\n", result);
	v_getCR0();
	printf("result=3Dcr0=3D0x%x\n", result);
	v_getCR3();
	printf("result=3Dcr3=3D0x%x\n", result);

	return;
}

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

=20

------ =_NextPart_000_01BE1264.A6C4D6A0
Content-Type: application/octet-stream; name="junk.c"
Content-Transfer-Encoding: base64

I2luY2x1ZGUgPHN0ZGlvLmg+DQoNCnVuc2lnbmVkIGxvbmcgcmVzdWx0PTA7DQoNCg0Kdm9pZCAN
CnZfdGVzdDAoKQ0Kew0KDQoJX19hc21fXyBfX3ZvbGF0aWxlX18NCgkoDQoJICJtb3ZsICQweDEx
MTExMTExLCAlZWF4XG4iDQoJICJtb3ZsICVlYXgsIF9yZXN1bHRcbiINCgkpOw0KCXJldHVybjsN
Cn0NCnZvaWQgDQp2X2dldENSMCgpDQp7DQoNCglfX2FzbV9fIF9fdm9sYXRpbGVfXw0KCSgNCgkg
Im1vdmwgJWNyMCwgJWVheFxuIg0KCSAibW92bCAlZWF4LCBfcmVzdWx0XG4iDQoJKTsNCglyZXR1
cm47DQp9DQoNCnZvaWQNCnZfdGVzdDMoKQ0Kew0KDQoJYXNtIHZvbGF0aWxlDQoJKA0KCSAibW92
bCAkMHgyMjIyMjIyMiwgJTBcbiINCgkgOiAiPWIiIChyZXN1bHQpDQoJIDogDQoJIDogIiVlYngi
ICwgIm1lbW9yeSINCgkpOw0KCXJldHVybjsNCn0NCnZvaWQNCnZfZ2V0Q1IzKCkNCnsNCg0KCWFz
bSB2b2xhdGlsZQ0KCSgNCgkgIm1vdmwgJSVjcjMsICUwXG4iDQoJIDogIj1iIiAocmVzdWx0KQ0K
CSA6IA0KCSA6ICIlZWJ4IiAsICJtZW1vcnkiDQoJKTsNCglyZXR1cm47DQp9DQoNCiNkZWZpbmUg
ZGlzYWJsZSgpIF9fYXNtX18gX192b2xhdGlsZV9fICgiY2xpIik7DQoNCg0KDQp2b2lkIG1haW4o
KQ0Kew0KICAgDQoJZGlzYWJsZSgpOw0KCXZfdGVzdDAoKTsNCglwcmludGYoInJlc3VsdD0weCV4
XG4iLCByZXN1bHQpOw0KCXZfdGVzdDMoKTsNCglwcmludGYoInJlc3VsdD0weCV4XG4iLCByZXN1
bHQpOw0KCXZfZ2V0Q1IwKCk7DQoJcHJpbnRmKCJyZXN1bHQ9Y3IwPTB4JXhcbiIsIHJlc3VsdCk7
DQoJdl9nZXRDUjMoKTsNCglwcmludGYoInJlc3VsdD1jcjM9MHgleFxuIiwgcmVzdWx0KTsNCg0K
CXJldHVybjsNCg0KfQ0KDQo=

------ =_NextPart_000_01BE1264.A6C4D6A0--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019