Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Suojattu tila

Sivun loppuun

KemXy [03.07.2003 14:51:44]

#

Miten tehdään suojatussa tilassa toimivia ohjelmia(DOS:lle C/C++ kielellä) ja miten niiden ohjelmointi eroaa "tavallisista ohjelmista"? Soveltuuko Open Watcom C/C++ kyseiseen tarkoitukseen?

thefox [03.07.2003 15:13:59]

#

Ainakin vanhemmilla Watcomeilla käännettiin nimenomaan suojatussa tilassa toimivia ohjelmia.

Päällimmäinen ero on segmenttihärveleiden poistuminen -- muistia on useimmiten kätevä käsitellä lineaarisesti. Myös poikkeuskäsittelijöitä voi käyttää ja konetta on vaikeampi saada solmuun :-)

Olli Vanhoja [03.07.2003 22:22:51]

#

Mites on BC++ 5.01, miten siis niitä tehdään sillä?
Osaan tehdä vain Assemblyllä suojatussa tilassa :-(

KemXy [05.07.2003 10:37:05]

#

Niin ja onnistuuko sen ohjelmoiminen Visual C++:lla. Tietääkseni pitäisi.. Mutta todellakin miten siihen suojattuun tilaan sitten pääsee?

Olli Vanhoja [05.07.2003 12:30:49]

#

page	66,132
			.386p
			stack	segment	stack use16
					dd	100 dup(0)
			stack	ends
			data segment use16
			gdt		dd	0
					dd	0
			code_desc	dd	0000ffffh
					dd	00cf9a00h
			data_desc	dd	0000ffffh
					dd	00cf9200h
			ret_desc	dd	0000ffffh
					dd	00cf9a00h
			gdt_label	label	fword
			gdt_limit	dw	4*8-1
			gdt_base	dd	?
			protected_code_address	dd	0
						dw	08h
			data ends
			code segment para public use16 'code'
			assume cs:code,ds:data,ss:stack
	start:
			mov	ax,data
			mov	ds,ax
					; setup gdt
			mov	eax,0
			mov	ax,data
			shl	eax,4
			add	eax,offset gdt
			mov	gdt_base,eax
					; runtime fixup of far jump into pmode
			mov	eax,0
			mov	ax,code32
			shl	eax,4
			add	eax,offset protected_code
			mov	protected_code_address,eax
					; runtime fixup for far jump back to rmode
			mov	eax,0
			mov	ax,code32
			mov	es,ax
			mov	word ptr es:[4],18h

			cli
			db	66h
			lgdt	gdt_label
			smsw	ax
			or	ax,1
			lmsw	ax
			jmp	next
	next:		jmp	fword ptr protected_code_address
	ret_real:	smsw	ax
			and	ax,0fffeh
			lmsw	ax
			jmp	far ptr s16
	s16:
			mov	ax,4c00h
			int	21h
	code		ends
	code32		segment	use32
			assume	cs:code32
	sto:
			jmp	far ptr ret_real
	protected_code:
			mov	ax,10h
			mov	ds,ax
			mov	ebx,0b8000h
			mov	ax,0741h
			mov	ecx,80*25
	st1:
			mov	[ebx],ax
			add	ebx,2
			loop	st1
			jmp	sto

	code32		ends
			end	start

Tollee tais olla assemblyllä, mut ei taida toimii yhdistettynä c++ ohjelmaan joten muakin kiinnostais toi, et miten pääsee c++:sas?

thefox [07.07.2003 02:50:25]

#

lainaus:

Niin ja onnistuuko sen ohjelmoiminen Visual C++:lla. Tietääkseni pitäisi.. Mutta todellakin miten siihen suojattuun tilaan sitten pääsee?

Jos Visual C++:lla Win32-roskaa koodaat niin sinun ei tietenkään tarvitse huolehtia suojattuun tilaan siirtymisestä, Windows kun pyörii suojatussa tilassa.

Olli: kyllä tuollaiset on järkevintä kirjoittaa nimenomaan asmilla, ja kyllä ne aina saa toimimaan yhteen myös C/C++-ohjelman kanssa.

Olli Vanhoja [07.07.2003 19:03:29]

#

lainaus:

lainaus:

Niin ja onnistuuko sen ohjelmoiminen Visual C++:lla. Tietääkseni pitäisi.. Mutta todellakin miten siihen suojattuun tilaan sitten pääsee?

Jos Visual C++:lla Win32-roskaa koodaat niin sinun ei tietenkään tarvitse huolehtia suojattuun tilaan siirtymisestä, Windows kun pyörii suojatussa tilassa.

Olli: kyllä tuollaiset on järkevintä kirjoittaa nimenomaan asmilla, ja kyllä ne aina saa toimimaan yhteen myös C/C++-ohjelman kanssa.

Hmm.. kokeiltu on mut se pääs jotenki aina kaatumaan :-S.
Yritin kyl tehä sille, et pistettäs PM ja A20 jo bootloaderis, mut en saanu kääntymään joten nyt tuo homma suoriteteaan heti freeDOSin käynnistyttyä.

DumTom [29.10.2003 22:52:54]

#

Käytä Watcomin C++:aa Suosittelen

thefox [30.10.2003 19:18:17]

#

lainaus:

Keskustelu - Ohjeet
Viestin kirjoittaminen
Älä herättele yli kuukauden vanhaa aihetta ilman hyvää syytä.

Tämä ei ollut hyvä syy.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta