Inline assembly under FreeBSD
unga888 at yahoo.com
Mon Apr 7 12:53:05 UTC 2008
--- Ivan Voras <ivoras at freebsd.org> wrote:
> Wojciech Puchar wrote:
> >> asm("pushfl; stc; int $0x13; setc %%al;
> >> : "+a" (ax), "+b" (bx), "=c" (cx), "+d"
> >> : : "esi", "edi");
> >> if ((u8)ax)
> >> return -1; /* No extended information
> >> else
> >> return 1; /* Extended information
> available */
> >> }
> >> When it is executing the int $0x13, it crashes
> >> "Program received signal SIGBUS, Bus error."
> >> Could you guys give me a helping hand to identify
> >> what's the problem?
> >> Input and return values are at:
> >> http://en.wikipedia.org/wiki/INT_13
> > you are in 32-bit mode
> To be a little bore verbose: FreeBSD and all other
> modern operating
> systems run in some variation of "protected mode",
> as opposed to DOS
> which ran in "real mode". When you run any program
> as a user in such an
> operating system, the program doesn't have direct
> access to hardware,
> and the many other low-level details of the program
> execution are very
> much different than in DOS. Specifically in this
> case, you cannot call
> DOS and BIOS interrupts from protected mode.
> If you need to do something with raw data on a disk
> drive, there are
> ways to do it (see g_open(3) on recent versions of
> FreeBSD) but the user
> executing the program needs sufficient
> privileges/rights for the
> operation to be successful.
Thanks Ivan and Wojciech for replies. So protected
mode is the issue. I'll read more on g_open(3).
You rock. That's why Blockbuster's offering you one month of Blockbuster Total Access, No Cost.
More information about the freebsd-questions