diff --git a/x86.h b/x86.h
index 5961d67a2deb3a21a66f899e323c84b56e3ab723..08e17980b3966a373af315c58c96a7f29a3f139d 100644
--- a/x86.h
+++ b/x86.h
@@ -12,7 +12,7 @@ inb(ushort port)
 static inline void
 insl(int port, void *addr, int cnt)
 {
-  asm volatile("cld; repne insl" :
+  asm volatile("cld; rep insl" :
                "=D" (addr), "=c" (cnt) :
                "d" (port), "0" (addr), "1" (cnt) :
                "memory", "cc");
@@ -33,12 +33,21 @@ outw(ushort port, ushort data)
 static inline void
 outsl(int port, const void *addr, int cnt)
 {
-  asm volatile("cld; repne outsl" :
+  asm volatile("cld; rep outsl" :
                "=S" (addr), "=c" (cnt) :
                "d" (port), "0" (addr), "1" (cnt) :
                "cc");
 }
 
+static inline void
+stosb(void *addr, int data, int cnt)
+{
+  asm volatile("cld; rep stosb" :
+               "=D" (addr), "=c" (cnt) :
+               "0" (addr), "1" (cnt), "a" (data) :
+               "memory", "cc");
+}
+
 static inline uint
 read_ebp(void)
 {