as a procedural assignment , you can use assign and you may not use it .. but outside the procedure (always or initial) you can't assign a value to a signal without useing (assign)
=================================================
Hi,
In my knowledge, the "assign" statement is a "Procedural Continuous assignment".
For example, the output of a transparent latch will follow the data input when the latch is enabled, but when the latch is disabled, it must ignoew any changes on its data input and retain its last output value until it is again enable.
I think the "assign" statement models this behavior.