选D,这句话的意思是:昨天晚上史密斯先生没有给我打电话,但是他本应该打的。是对过去的虚拟,这件是没有发生,所以用should+have done。
选B,他过去常常呼我,过去的一个习惯性动作,可他昨晚没有呼我表惊讶
D,本应该做而没有做
D.should have对过去的虚拟,省略done和宾语
D.should have should have done 表示本应该做但没做