Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   Assembly (http://www.programmingforums.org/forum20.html)
-   -   Help with simple program (http://www.programmingforums.org/showthread.php?t=13218)

teencoder May 28th, 2007 2:40 AM

Help with simple program
 
Okay I'm done with school for a while and I decided to toy with systems programming after a crash course in assembly I decided to try something. The program boots but doesn't execute properly. I've examined my code but I haven't found any problem. So if you could help me I'd really appreciate. It was assembled in NASM.
:

[BITS 16]
ORG 0
mov AH,0x0
mov AL,0x0
int 0x10; enter 40x25 B/W text video mode
continue:
int 0x16;read key strokes
cmp AH,0x1C0D;test for an enter key stroke
je exit
mov AL,AH
int 10;display character
jmp continue
exit:
mov AH,0x0
int 19;warm boot
times 510-($-$$) db 0x0;fill up empty bytes
dw 0xAA55;make bootable

The program boots initializes the video mode but on a key press does nothing after a few key strokes it starts beeping with the keystrokes. The enter key does not trigger a warm boot. Any suggestions would be appreciated

grimpirate May 28th, 2007 5:26 PM

I'll refer you to the following posts I started here where I had similar inquiries and problems and also to a tutorial I posted on another forum:Hope that helps ya, also I like to use the FASM compiler but that's a personal preference, however, their forum has lots of info
http://flatassembler.net/

teencoder May 29th, 2007 2:28 AM

Thanks I tried to fix a few things but it's still broke and I have no clue where. Guess this is what I get for diving in headfirst if anyone could take a look I'd appreciate it.
:

[BITS 16]
ORG 0
jmp initiate
nop
times 59 db 0xFF
initiate:
mov AH,0x0
mov AL,0x0
int 0x10;set video
jmp main
main:
continue:
int 0x16;read keyboard
cmp AH,0x5A; test for enter key
je end; close
mov AL,AH
mov AH,0x0E
mov BH,1
int 10;display character
mov AH,0
jmp continue;
end:
jmp terminate
terminate:
mov AH,0x0;
int 19;
times 510-($-$$) db 0x0
dw 0xAA55;make bootable


grimpirate May 29th, 2007 12:44 PM

Where exactly does the program fail? Does it not accept the enter key at all? I suggest before trying to accept input, trying to output something beforehand. Also, some of your labels and instructions like jmp main and main: are unecessary, as is the jmp terminate with the terminate: label right after.
Also check out this post at the flatassembler page
http://board.flatassembler.net/topic.php?t=6088
That program prints Hello World! waits for a key press and when a key is entered it powers down, which I think is sort of what you're trying to achieve.

DaWei May 29th, 2007 1:40 PM

:

end:
jmp terminate
terminate:

Look at this and apply a little thought. Execution normally proceeds to the next instruction. A branch or call modifies that. Jumping to the next instruction is just a waste (as mentioned in Grim's post).

Now suppose you remove the worthless jump. The end and terminate labels now represent the same address. That doesn't consume any code or take any time, but what the hell good is it, except for introducing confusion?

I don't care how many trees you kill. Use a pencil and paper to solidify your thoughts. Trace lines from here to there. Disentangle spaghetti. Better to kill a tree than an innocent person when your critical code goes south.


All times are GMT -5. The time now is 2:45 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC