汇编I/O操作指令

一、OUTx

在一个I/O的地址上写数据,关键字"a"表示,要在这条asm语句执行前,就把val的值放到eax寄存器中;关键字"Nd“表示,允许一个字节的常量值可以被汇编称为一个常量,这样就释放了edx让其他程序使用。

static inline void outb(uint16_t port, uint8_t val)
{
    
    
    asm volatile ( "outb %0, %1" : : "a"(val), "Nd"(port) );
    
}

二、INx

从一个I/O地址读取数据,把port上的数据读取到ret上,实际上就是把port上的数据提前放到eax上,然后把eax的指赋给ret

static inline uint8_t inb(uint16_t port)
{
    
    
    uint8_t ret;
    asm volatile ( "inb %1, %0"
                   : "=a"(ret)
                   : "Nd"(port) );
    return ret;
}

猜你喜欢

转载自blog.csdn.net/weixin_42557786/article/details/109777241
今日推荐