Make sure it isn't a memory reference accidentally. Since your gdb output seems like at&t, it would normally show a $ for immediates. As such, it's suspicious that what you really have is loading bx with the content of memory at address 0xb800. Can you check the machine code?
The machine code is 0xb8001e8b
Indeed, that's machine code for loading from memory. Looking at the as86 manual, you can see:
# Prefix for immediate operands. mov ax,#1234 Immediate value, ax becomes 1234.As such, you should prefix your immediates with a # sign. Note this applies to all immediates.
While this fixes the problem you asked about, see @amdn's answer for other issues you have.