Path: utzoo!mnetor!uunet!husc6!purdue!i.cc.purdue.edu!j.cc.purdue.edu!ray From: ray@j.cc.purdue.edu (Ray Moody) Newsgroups: comp.sys.ibm.pc Subject: Bug in TurboC version 1.0 Message-ID: <6374@j.cc.purdue.edu> Date: 7 Feb 88 05:21:58 GMT Reply-To: ray@j.cc.purdue.edu (Ray Moody) Organization: Purdue University Lines: 94 Keywords: inportb This is a posting for a friend. Please reply to c13@s.cc.purdue.edu, not me. Ray -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Well, after spending at least 5 hours in a nightmare debugging session, I have found what I am sure is a bug in TurboC V1.0. The problem is that in between doing two inportb's (macro version) the compiler did a push dx and then never popped it off!! If I delete the push dx, it works fine. Is this a known bug in the compiler?!? If so, has this been fixed in the new version of TurboC ?? I would appreciate any help on this subject! Roy C Riggs c13@s.cc.purdue.edu Just in case it is relevant: AT clone, 12Mhz Hercules graphics 30M hard drive 360K drive 512K base 1024K expansion DAS-8 a/d convertor DOS 3.2 TurboC V1.0 The source and the asm follow: /* test program that crashes due to bug in TurboC V1.0 */ /* WARNING: you will have to reboot after running this */ #include main() { printf("test %d\n", inportb(768) + inportb(769)); } /* test.asm created by tcc -S test.c */ /* it has not been edited in ANY way, the bug is 4 lines after ;Line 8 */ name test _text segment byte public 'code' dgroup group _data,_bss assume cs:_text,ds:dgroup,ss:dgroup _text ends _data segment word public 'data' _d@ label byte _data ends _bss segment word public 'bss' _b@ label byte _bss ends _text segment byte public 'code' ; Line 7 _main proc near ; Line 8 mov dx,768 in al,dx mov ah,0 push dx mov dx,769 push ax in al,dx mov ah,0 pop bx add bx,ax push bx mov ax,offset _s@ push ax call near ptr _printf pop cx pop cx ; Line 9 @1: ret _main endp _text ends _data segment word public 'data' _s@ label byte db 116 db 101 db 115 db 116 db 32 db 37 db 100 db 10 db 0 _data ends _text segment byte public 'code' extrn _printf:near public _main _text ends end