1. Emily fell asleep in class. She should have slept more than 7 hours at home.

2. Emily fell asleep in class. She shold have gone to bed early last night at home.

3. Emily fell asleep in class. She should have slept around 9 p.m. yesterday at home.

-----------
Are they all grammatical?

1 and 2 are correct. 3 is not.

Maybe you want to say: "She should have gone to bed around 9 p.m. last night."

To determine if the sentences are grammatically correct, we need to analyze the usage of verb tenses and the structure of the sentences:

1. "Emily fell asleep in class. She should have slept more than 7 hours at home."

This sentence is grammatically correct. It uses the past tense ("fell") to describe the action that already happened, and the modal verb "should have" to express a past obligation or expectation. The phrase "more than 7 hours" is a clear measurement of time.

2. "Emily fell asleep in class. She should have gone to bed early last night at home."

This sentence is also grammatically correct. It uses the past tense ("fell") and the modal verb "should have" to express a past expectation. The phrase "last night" clearly refers to the previous night, and "gone to bed early" describes the action that Emily should have taken.

3. "Emily fell asleep in class. She should have slept around 9 p.m. yesterday at home."

This sentence is grammatically correct as well. It uses the past tense ("fell") and the modal verb "should have" to express a past expectation. The phrase "around 9 p.m." indicates a specific time frame, and "slept" accurately represents the action that Emily should have taken.

In conclusion, all three sentences are grammatically correct, though they differ slightly in terms of the expectations and circumstances described.