In reply to sylvainb:
This seems very readable to me:
function bit[31:0] assign_value (
bit [31:0] initial_value,
bit [31:0] assigned_field,
int lsb,
int msb);
assign_value = initial_value;
for(int index=lsb; index <= msb; index++) assign_value[index] = assigned_field[index-lsb];
endfunction : assign_value