diff --git a/asm.m4 b/asm.m4
index ee2be4fc4bc79e8382505fabee7a5ef189bd3fa4..99c72c01fc2604f63fcbae3aec87da2621ea68b9 100644
--- a/asm.m4
+++ b/asm.m4
@@ -34,9 +34,18 @@ define(<STRUCT>,
 <define(SPREFIX<_>$1, SOFFSET)dnl
  define(<SOFFSET>, eval(SOFFSET + ($2)))>)dnl
 
+dnl UCHAR(name)
+define(<UCHAR>, <STRUCT(<$1>, 1)>)dnl
+
 dnl UNSIGNED(name)
 define(<UNSIGNED>, <STRUCT(<$1>, 4)>)dnl
 
+dnl Offsets in arcfour_ctx
+STRUCTURE(ARCFOUR)
+  STRUCT(S, 256)
+  UCHAR(I)
+  UCHAR(J)
+
 dnl Offsets in aes_ctx and aes_table
 STRUCTURE(AES)
   STRUCT(KEYS, 4*60)
diff --git a/x86/arcfour-crypt.asm b/x86/arcfour-crypt.asm
index 74a65a9474d0984978207bacce0252a2a0e6407e..5c87ff8c2007f8c3a1c46f7def794c769e2004b5 100644
--- a/x86/arcfour-crypt.asm
+++ b/x86/arcfour-crypt.asm
@@ -55,8 +55,8 @@ C Register usage:
 	movl	32(%esp), %esi
 	addl	%esi, %edx		C  Keep src + length
 	
-	movzbl  256(%ebp), %eax		C  i
-	movzbl  257(%ebp), %ebx		C  j
+	movzbl  ARCFOUR_I (%ebp), %eax	C  i
+	movzbl  ARCFOUR_J (%ebp), %ebx	C  j
 .Lloop:
 C	incb	%al
 	incl	%eax
@@ -80,8 +80,8 @@ C	andl	$0xff, %ebx
 	cmpl	%esi, %edx
 	jne	.Lloop
 
-	movb	%al, 256(%ebp)		C  Store the new i and j.
-	movb	%bl, 257(%ebp)
+	movb	%al, ARCFOUR_I (%ebp)		C  Store the new i and j.
+	movb	%bl, ARCFOUR_J (%ebp)
 .Lend:
 	popl	%edi
 	popl	%esi