eax is a 32-bit register.
To force the mov instruction to move only single byte, make it use an
8-bit register.
In addition to the 32-bit registers, the x86 instruction set has 16-bit
and 8-bit registers. The 16-bit registers are ax, bx, cx, dx, si, and
di. Note that they overlap with the 32-bit registers (they are the
low-order half of the corresponding 32-bit register), so, for example,
writing to eax will overwrite ax. The 8-bit registers are al, ah, bl,
bh, cl, ch, dl, ch. Again, these overlap with the 16-bit registers (they
are the low-order and high-order byte of the corresponding register).
Therefore, to force a move of a single byte, use:
mov al, 97
mov [memory_address + 4], al
Or, without using a register, you can use the "byte" prefix to tell nasm
to treat a value as a byte:
mov byte [memory_address + 4], 97
or
mov [memory_address + 4], byte 97
Ondřej