[C/ASM] C programma afsluiten met ASM instructies*

Pagina: 1
Acties:

  • michiel100
  • Registratie: November 2000
  • Laatst online: 30-08 18:52
edit: op verzoek vraagstelling anders.

Bij het afsluiten van m'n C programma (Dus wanneer het programma het eind van main routine bereikt heeft) gaat het programma niet terug naar dos, maar herstart het programma.

Misschien gaat er iets niet goed wanneer ik de interruptvector van de gebruikte systeemtimer terugzet.

De vraag is, welke asm instructies voert de computer uit wanneer het een C-programma verlaat?

was:
Ik ben bezig met een programma dat met de systeemtimer werkt.

Om de x milisecondes moet het iets doen. Nu is het probleem dat wanneer ik het programma wil afsluiten, de interruptvector terugzet, het programma regelmatig opnieuw opstart in plaats van afsluit, en soms crasht (computer vast laat lopen).

Om uit te zoeken wat er mis gaat wil ik graag weten hoe C een programma terug naar DOS laat gaan. Ik kan het nergens vinden. Heb al gezocht dus...

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
return 0;
of
return 1;

afhankelijk of het programma goed of niet goed afgesloten werd.

https://fgheysels.github.io/


  • michiel100
  • Registratie: November 2000
  • Laatst online: 30-08 18:52
Ik bedoel meer met welke asm instructies. :D

Verwijderd

michiel100 schreef op 17 oktober 2002 @ 11:13:
Ik bedoel meer met welke asm instructies. :D
Hoe kunnen wij zoiets ruiken? Je vraagt hoe je dat doet in C, maar wilt antwoord in assembly :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
En waarom wil je het in assembly doen?

https://fgheysels.github.io/


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

starter: maak eerst je probleem eens goed duidelijk svp

Doet iets met Cloud (MS/IBM)


  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
Titel even gemod.

https://fgheysels.github.io/


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Als ik het me goed herinner kun je in DOS met int 21h (AH=4Ch, AL=exit code) een programma afsluiten maar dan los je je probleem volgens mij alleen op door de symptomen weg te halen. Bovendien doet C zelf al zoiets dus ik denk dat je je probleem ergens anders moet zoeken.

www.madwizard.org


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:51
Anders gebruik je een debugger ...?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 29-08 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

int 0x20 kan overigens ook gebruikt worden om een programma af te sluiten...

maar welke interrupt gebruik je als timer? 0x08 of 0x1C?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:51
Ik vind het niet echt een verbetering, eigenlijk. De enige betekenis die ik eraan kan verbinden, is dat de topic starter een C programma wil afsluiten met assembly instructies, en dat is helemaal niet de bedoeling.

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Als je een .com bestand maakt en int 20h gebruikt om af te sluiten moet CS het segment adres van de PSP hebben, heb je die misschien veranderd?

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
Soultaker schreef op 17 oktober 2002 @ 18:57:
[...]

Ik vind het niet echt een verbetering, eigenlijk. De enige betekenis die ik eraan kan verbinden, is dat de topic starter een C programma wil afsluiten met assembly instructies, en dat is helemaal niet de bedoeling.


Hoezo niet? Dat kon ik toch uitmaken uit z'n eerste 2 of 3 posts. Dat het om een C programma gaat, en dat hij dat programma wil laten afsluiten adhv asm ? :?

Ah, ik zie nu dat hij z'n beginpost ge-edit heeft. Dat veranderd de zaak natuurlijk.
Alhoewel ik er toch nog van maak dat hij wil weten welke asm-instructies er moeten uitgevoerd worden om een programma af te sluiten.

https://fgheysels.github.io/


  • Defspace
  • Registratie: Mei 2000
  • Laatst online: 27-08 11:17

Defspace

Administrator

xor ax, ax
mov ah, 04Ch
int 21

;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 29-08 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

Defspace schreef op 18 oktober 2002 @ 00:14:
xor ax, ax
mov ah, 04Ch
int 21

;)


lees de draad voor je blaat

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

whoami schreef op 17 oktober 2002 @ 11:02:
return 0;
of
return 1;

afhankelijk of het programma goed of niet goed afgesloten werd.
Maar dat is nog niet het eind van je programma. Zodra je main() eindigt gaat je programma terug naar de functie(s) die main() heeft aangeroepen. Meestal zijn die te vinden in je CRT libraries en de daarbij horende dependencies. Kijk voor de grap maar eens wat een windows programma allemaal doet voor main() en na die laatste return. Dat is best veel...

Verwijderd

oisyn : mocht int 0x20 niet alleen maar gebruikt worden om een .com te verlaten? Dus niet om een .exe te verlaten?

Verwijderd

Doe je in je programma iets met assembly code? Of gebruik je alleen C code?
Ik kan me voorstellen dat er iets mis gaat omdat je wazige pointerconstructies gebruikt i.c.m. het verkeerde memory model of dat je in assembly met je stack klooit (danwel je CS of SS register)...
Het is al wel weer enige tijd geleden overigens dat ik met interrupts onder dos aan de slag was (dus mocht ik onzin uitkramen neem het me dan niet al te kwalijk ;) )

Verwijderd

Ik dacht dat int 0x20 alleen gebruikt kon worden voor .com bestanden, om .exe bestanden af te sluiten moet je iets van int 0x21 hebben, maar ik zou niet weten met welk AX

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 29-08 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

volgens mij kan int 0x20 kan ook door .exe's gedaan worden (maar op cs:0000 moet wel de PSP staan, dus bij .exe's van >64k hoeft dat niet het geval te zijn)

http://www.delorie.com/djgpp/doc/rbinter/id/82/24.html

wel is het zo dat alleen een .com programma kan een ret doen om het programma af te sluiten. Dat komt omdat bij opstart van een .com programma de word 0x0000 op de stack wordt gepushed. Aangezien op adres cs:0x0000 de PSP staat, die begint met de instructie int 0x20, sluit dat je programma af

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1