Archived

This topic is now archived and is closed to further replies.

Birdman

Creating a file in asm

Recommended Posts

I''m trying to create a new file in asm, but the error sub keeps getting tripped. I can''t figure out why. I''m sure its something really dumb. Any help is appreciated. DOSSEG .MODEL SMALl .STACK 200h .DATA filename db "c:\tasm\texture.grp$" handle dw 0 filemessage db "Error.$" fileheader db "SG-texture" tname db [9] .CODE START: mov AH,3ch ;create the file mov CL,0 mov DX,seg filename mov DS,DX mov DX,offset filename int 21h mov handle,AX jnc cont3 call fileerror cont3: mov AH,40h ;write file header mov BX,handle mov CX,10 mov DX,seg fileheader mov DS,DX mov DX,offset fileheader cmp AX,10 jz cont1 call fileerror cont1: mov BX,0 ;get a texture name getname: mov AH,0 ;get a keypress int 16h cmp AH,28 ;check for enter jz finishedgetname cmp AH,0 ;check for no character jz getname push AX ;print the character mov DL,AL mov AH,2 int 21h pop AX cmp AH,14 ;check for backspace jnz contgetname dec BX jmp getname contgetname: inc BX ;add the keypress to the name cmp BX,10 jz finishedgetname mov tname[BX],AL jmp getname finishedgetname: mov AH,40h ;write the texture name mov BX,handle mov CX,10 mov DX,seg tname[0] mov DS,DX mov DX,offset tname[0] int 21h cmp AX,10 jz cont2 call fileerror cont2: endprog: mov AH,3eh ;close the file mov BX,handle int 21h mov AX,0003h ;end prog int 10h mov AX,4c00h int 21h Proc fileerror ;Dislay an error mov AX,seg filemessage ;display file error message mov DS,AX mov DX,offset filemessage mov AH,9 int 21h mov AX,0 ;wait for keypress int 16h jmp endprog ;end the program endp fileerror END START Look! There! Up in the sky! It''s Birdman! Da-du-du-daaaaah!

Share this post


Link to post
Share on other sites
NO! Those source tags didn''t work! I put in:

"" without the "s of course

blah blah

" and it didn''t do it!




Look! There! Up in the sky! It''s Birdman! Da-du-du-daaaaah!

Share this post


Link to post
Share on other sites
HEY! It took the source statements out of the post! Even though they were in ""s.

Okay, this is what I did:

(source) except I used <> brackets

blah blah blah

(/source)

Share this post


Link to post
Share on other sites
Use square brackets, duh.

[ source ] [ /source ] (minus the spaces).

I don''t know ASM well, so I can''t help you with that problem.

Share this post


Link to post
Share on other sites

First, Mauling Monkey: I know where the error is occuring. It happens on the create statement. I just disabled the other error calls and narrowed it down.

Second, heres the code in a more readable format:

By the way: this is for TASM 3.1



  
DOSSEG
.MODEL SMALl
.STACK 200h
.DATA
filename db "c:\tasm\texture.grp$"
handle dw 0
filemessage db "Error.$"
fileheader db "SG-texture"
tname db [9]
.CODE

START:
mov AH,3ch ;create the file
mov CL,0
mov DX,seg filename
mov DS,DX
mov DX,offset filename
int 21h
mov handle,AX
jnc cont3
call fileerror
cont3:

mov AH,40h ;write file header
mov BX,handle
mov CX,10
mov DX,seg fileheader
mov DS,DX
mov DX,offset fileheader
cmp AX,10
jz cont1
call fileerror
cont1:

mov BX,0 ;get a texture name
getname:
mov AH,0 ;get a keypress
int 16h
cmp AH,28 ;check for enter
jz finishedgetname
cmp AH,0 ;check for no character
jz getname
push AX ;print the character
mov DL,AL
mov AH,2
int 21h
pop AX
cmp AH,14 ;check for backspace
jnz contgetname
dec BX
jmp getname
contgetname:
inc BX ;add the keypress to the name
cmp BX,10
jz finishedgetname
mov tname[BX],AL
jmp getname
finishedgetname:

mov AH,40h ;write the texture name
mov BX,handle
mov CX,10
mov DX,seg tname[0]
mov DS,DX
mov DX,offset tname[0]
int 21h
cmp AX,10
jz cont2
call fileerror
cont2:

endprog:
mov AH,3eh ;close the file
mov BX,handle
int 21h
mov AX,0003h ;end prog
int 10h
mov AX,4c00h
int 21h

Proc fileerror ;Dislay an error
mov AX,seg filemessage ;display file error message
mov DS,AX
mov DX,offset filemessage
mov AH,9
int 21h
mov AX,0 ;wait for keypress
int 16h
jmp endprog ;end the program
endp fileerror
END START


Please help! Again, I''m sure its somehting stupid, but I can''t find it.




Look! There! Up in the sky! It''s Birdman! Da-du-du-daaaaah!

Share this post


Link to post
Share on other sites

  
mov AH,3ch ;create the file
mov CL,0
mov DX,seg filename
mov DS,DX
mov DX,offset filename
int 21h
mov handle,AX
jnc cont3

I assume you mean that section of code as your "create statement". According to my handy dandy assembly programmer''s guide, neither mov nor int instructions alter the carry flag, which is what jnc (Jump if No Carry) checks. So if you don''t alter the flag, I don''t know how you can check if the file was created successfully.

But again, if you say that the rest of your code is fine, I could be wrong.

Share this post


Link to post
Share on other sites
Hmm, really? I always though that int did something, depending on the call that could change the carry flag. According to a tutorial I have with open/close/create file stuff in it, that should work. If the carry is set, then AX tells the file error. But it could be wrong. But I know something is amiss, because later in the program I try to write to the file, but it always has a size of 0 bytes, no matter what I do.




Look! There! Up in the sky! It''s Birdman! Da-du-du-daaaaah!

Share this post


Link to post
Share on other sites