From: ams AT ludd DOT luth DOT se (Martin Str|mberg) Newsgroups: comp.os.msdos.djgpp Subject: Some assembly questions Date: 16 Mar 1999 18:51:44 GMT Organization: University of Lulea, Sweden Lines: 53 Message-ID: <7cm980$f69$1@news.luth.se> NNTP-Posting-Host: queeg.ludd.luth.se X-Newsreader: TIN [UNIX 1.3 950824BETA PL0] To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com How do I set or clear the carry flag? I _think_ "andl %%eax, %%eax" clears it (and "orl %%eax, %%eax" too). How do I inhibit the gcc generated pre- and postlude to c functions? Like if I have: int eax; void my_interrupt_handler(void) { /* Get eax. */ asm("" : "=a" (eax) : /* No input. */ ); /* Do some c stuff. */ asm("sti" "\n iret" : /* No output. */ : /* No input. */ ); } This generates (-S switch to gcc): pushl %ebp movl %esp,%ebp pushl %esi pushl %ebx /* Here comes my code from above.*/ movl %eax,_eax /* The c stuff in assembly. */ sti iret If I am not completely misstaken my iret will probably wreck havoc on the stack, won't it? Shostakovich, String Quartet No. 15, MartinS