problem opening a file

johnny_b_30's Avatar, Join Date: May 2009
Newbie Member
I write a program in C but i have not the right to use the standard library. I want to open a file so i use an assembly procedure that i have write, open_file. Here is what i mean:
At C code part:
Code:
                        int fp;
                        int open_file(char* filename);
                ....
                         fp = open_file(filename);

Assembly part:
                 ....
 global open_file

    open_file:

        push bp
        mov bp,sp
        push bx
        push dx

        mov ah, 0x3d

        mov al, 0x00        ; read-only

        mov bx, [bp + 4]    ; file_name segment in DS

        mov ds, bx

        mov dx, [bp + 6]    ; file_name offset in DX

        int 0x21                 ; open file




        jc open_error    ; if carry is set file could not open
        mov  handler, ax
        pop       dx
        pop        bx
        pop        bp
        ret        4

  open_error:

        mov ah,1
        pop dx
        pop bx
        pop bp

        ret        4
The problem is that when i execute my program, when it comes to the part of opening the file it aborts. What do you think is wrong? Other functions that i wrote in such a way, for example function that prints a string or clear the monitor, works well.

I would appreciate your help. Thanks a lot for your time

Last edited by shabbir; 15May2009 at 20:18.. Reason: Code blocks
0
SaswatPadhi's Avatar, Join Date: May 2009
~ Б0ЯИ Τ0 С0δЭ ~
( I had mis-read your post first )
I will look into the ASM code and tell you later.

Last edited by SaswatPadhi; 15May2009 at 20:21..
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
If you're allowed to use the BIOS then it's fairly easy; just write a program in C that does the same, then step through it at the assembler level using the debugger. That'll show you what the standard library does, then you can use that for inspiration.
0
johnny_b_30's Avatar, Join Date: May 2009
Newbie Member
when i try to use the debugger(ddd), i cannot debug and it returns me the message "Program exited with code 0176. You can't do that without a process to debug"
0
johnny_b_30's Avatar, Join Date: May 2009
Newbie Member
ok finally i did that, but when it comes for the function that opens the file, simply refers to it as fopen, so i cannot see what fopen does in assembly language
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
You need to use a debugger that will work at the assembly level and will allow you to step through individual assembly instructions.

See Section 8.6 of the gdb manual; this seems relevant.
http://sourceware.org/gdb/current/on...b_9.html#SEC64

There's also an apparently relevant section in the ddd documentation:
http://www.gnu.org/manual/ddd/html_m...el%20Debugging

RTFM!