I guess I'll take a stab at it. Correct me if I get the syntax wrong.
LD E, (1000)
LD D, 0 ; DE holds 0 extended value
LD B, (1001)
LD HL, 0 ; Clear partial result
Loop:
SRL B ; Leasy significant bit is in Carry, Z (Zero flag) is set accordingly
JR NC, SkipAdd-$
ADD HL, DE
SkipAdd:
; Now we want to shift the multiplicand left. But only suitable 16 bit opcode is ADD HL, ss
EX DE, HL
ADD HL, HL
EX DE, HL
JR NZ, Loop-$ ; Repeat while B is nonzero (note that only the SRL instruction affects the Z flag)
LD (1002), HL ; Write the result to memory
RET
The part the shifts DE left is sick, but oh well. Doesn't really seem to be a better way. At least none that I can see with my meager experience with the Z80.