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
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.
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"
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
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/onlinedocs/gdb_9.html#SEC64 There's also an apparently relevant section in the ddd documentation: http://www.gnu.org/manual/ddd/html_mono/ddd.html#Machine-Level Debugging RTFM!