assembly 使用串行端口在汇编x86中发送16位数据

u4dcyp6a  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(42)

我正在做一个多人游戏,在2台电脑上工作,他的通信是通过两个COM端口,想法是我想发送和接收16位数据,但最高值是8,所以我需要划分他们,但它是造成我的错误

recieve proc
        mov data_in, 0 ; variable to store data
        mov dx , 03F8H 
        in al , dx 
        mov bl, al  
        mov byte ptr data_in, bl
        mov cx,200 ; just delay
        kk:loop kk
        mov dx , 03F8H
        in al , dx 
        mov bh, al  
        mov byte ptr data_in + 1, bh
        ret
recieve endp

个字符

zaqlnxep

zaqlnxep1#

当接收被调用时,它如何知道数据是可用的?它应该在阅读接收保持寄存器之前检查接收数据可用标志。
对于延迟循环,它应该读取接收数据可用标志以等待下一个字节变为可用,而不是循环固定的迭代次数。200次迭代远远不够。

receive proc
        call receive_byte
        mov byte ptr data_in, al
        call receive_byte
        mov byte ptr data_in + 1, al
        ret
receive endp

receive_byte proc
    receive_wait:   
        mov dx, 03F8H + 5
        in al, dx
        test al, 1
        jz receive_wait

        mov dx, 03F8H
        in al, dx 
        ret
receive_byte endp

字符串
发送类似,但它检查发送保持寄存器空标志。

transmit proc
        mov cl, byte ptr data_out
        call transmit_byte
        mov cl, byte ptr data_out + 1
        call transmit_byte
        ret
transmit endp

transmit_byte proc
    transmit_wait:
        mov dx, 03F8H + 5
        in al, dx
        test al, 1 << 5
        jz transmit_wait

        mov dx, 03f8H
        mov al, cl
        out dx, al
        ret
transmit_byte endp

相关问题