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?
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 :-)
Mites on BC++ 5.01, miten siis niitä tehdään sillä?
Osaan tehdä vain Assemblyllä suojatussa tilassa :-(
Niin ja onnistuuko sen ohjelmoiminen Visual C++:lla. Tietääkseni pitäisi.. Mutta todellakin miten siihen suojattuun tilaan sitten pääsee?
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?
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.
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ä.
Käytä Watcomin C++:aa Suosittelen
lainaus:
Keskustelu - Ohjeet
Viestin kirjoittaminen
Älä herättele yli kuukauden vanhaa aihetta ilman hyvää syytä.
Tämä ei ollut hyvä syy.
Aihe on jo aika vanha, joten et voi enää vastata siihen.