>>> def mygen():
...  while 1:
...   val = (yield 10)
>>> __import__('dis').dis(mygen)
 2      0 SETUP_LOOP       10 (to 13)
 3   >>  3 LOAD_CONST        1 (10)
       6 YIELD_VALUE    
       7 STORE_FAST        0 (val)
       10 JUMP_ABSOLUTE      3
    >>  13 LOAD_CONST        0 (None)
       16 RETURN_VALUE    
(参考: ttp://www.python.jp/doc/2.4/lib/bytecodes.html)
直前のnext()やsend()が値を返した直後はYIELD_VALUEまで実行されている。
send(arg)を呼ぶとargをTOSに積んでSTORE_FAST以降を実行。
だからval=argになって次のYIELD_VALUEまで進んで値を返す...ということじゃないかな。
next()を呼んだときはTOSにNoneを積むから、next()はsend(None)と等価だと思う。
>>> def mygen2():
...  while 1:
...   yield 10
 2      0 SETUP_LOOP        8 (to 11)
 3   >>  3 LOAD_CONST        1 (10)
       6 YIELD_VALUE    
       7 POP_TOP      
       8 JUMP_ABSOLUTE      3
とにかく2.5ではnext()を呼ぶとTOSに何かを積むらしい。2.4ではYIELDの前後はこうだった。
 3   >>  3 LOAD_CONST        2 (10)
       6 YIELD_VALUE    
       7 JUMP_ABSOLUTE      3