Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
when you use "out dx,ax", what is actually done is sending al on IO[dx] and ah on IO[dx+1]. This is probably not what you want to do. If this was not a typo, I suggest you go back to the keyboard definitions and read it once again.
out 0x60,eax ; out 0x60,ax and out 0x60,al have definitely *NOT* the same behaviour.
Have peeked in to my own holy grail of assembly and found out:
al = 8 bit length
ax=16 bit length
eax=32 bit length
Some ports only accept a value which is 8 bits long - in these cases bochs kicks the code out and refuses to continue work. It is a box - what do you expect it to do else?*ggg*