I remember doing something very similar in my assembly class a few years back.
We were using the old 8086/8088 Intel Developer Boards (circa 1979), and I remember we had to use the "in" and "out": commands in order to communicate with the serial port.
Here's some examples:
MOV DX, 800EH ; Assigns the input port address to register DX
IN AL, DX ; Reads the input from port DX, and stores it into AL
MOV DATA_7, AL ; Moves the contents of AL into DATA_7
and here's one of the OUT command
MOV DX, 8000H ; Initialize the address of port 0
MOV AL, 00H ; Load data with bit 7 as logic 0
OUT DX, AL ; Output the data to port 0
Now, I'm pretty sure these examples work in MASM, and on the Intel 8086/8088 SDK. I got them from my old Assembly book written by Avtar Singh
I'm assuming they should work because Intel just built upon the 8086 instructions to make the x86 instructions we know today. Don't quote me on it though. It's been awhile so I'm a bit unsure. It can't hurt to try it though :)