Below is how I would build the flow. This is assuming your List is using the default versions with Major versions.
This flow should cater for the following:
- If you create a new item and don't add the Assignee, or you edit an existing item and either leave the Assignee blank, or remove the existing Assignee, then the flow won't run at all.
- If you do have an Assignee, it will check to see if it's changed since the last flow run, and only continue if it has changed.
For this example, I'm using the following list that has a column of type Person called Assignee and set to optional.

Below is the full flow. I'll go into each of the actions.

When an item is created or modified will trigger the flow.

I've added a Trigger Condition to the trigger above so that it will only run if there is a value for Assignee (not empty). To add the Trigger Condition, go into Settings, then Add to add the condition. The expression used in this example is below which effectively says if the Assignee is not empty then run the flow.
@equals(empty(triggerOutputs()?['body/Assignee']), false)


Next, we use Get changes for an item or a file (properties only) to get the values prior to the current version of the item. This allows us to see what values have changed. In particular, we can check if the Assignee value was changed. We pass in the ID and Triger Window Start Token as shown below.


Condition is then used to apply further checks. We only want to send the email if the Assignee was added when we created a new item, or it was changed from what it was previously. We don't want to send an email if it was the same as what it was before.
We need two conditions here. One to cater for new items just created, and one for items that were modified. If either of these conditions are true (OR) then we send the email.
The first condition checks if the current version is 1.0 which means it's a new item just created. The expression used here is below, which effectively converts the version number to a float so we can test to see if it's equal to 1.0.
float(triggerOutputs()?['body/{VersionNumber}'])
The second condition checks if the Assignee column has changed since the last time a flow ran for this item.
Note that we use OR since we are looking to see if EITHER of the conditions are true.

If the result of the Condition is true (at least one of the conditions evaluated to true) we go into the Yes branch and Send an email.

----------------------------------------------------------------------
If I've answered your question, please mark the post as Solved.
If you like my response, please consider giving it a Thumbs Up.