Ha! Isn't funny how we overlook the obvious? When you pointed DX at 0002, you forgot that your program actually loads at 0100. Just change
to
BTW, here's how to use debug to get a decent listing (ok, pathetic listing, but we're using "debug")
-u100,101
139A:0100 EB0C JMP 010E
-d102,10d
139A:0100 68 65 6C 6C 6F 20-77 6F 72 6C 64 24 hello world$
-u10e,122
139A:010E BA0200 MOV DX,0002
139A:0111 B409 MOV AH,09
139A:0113 CD21 INT 21
139A:0115 B44C MOV AH,4C
139A:0117 CD21 INT 21
139A:0119 0200 ADD AL,[BX+SI]
139A:011B B409 MOV AH,09
139A:011D CD21 INT 21
139A:011F B44C MOV AH,4C
139A:0121 CD21 INT 21