Hello, Actually, I am not a AT&T syntax guy, so I am not pretty sure but outw command stands for out word. Since al is not a word-length register you cannot use with outw, you have to use it either with outb or you have to declare data variable as an uint16_t .
And then, since outl means out long, you have to use either outb if your data is a uint8_t variable or have to declare data as an uint32_t.