I'm practicing sorting algorithms and I'm stuck on this silly issue.

I specifically don't understand how the array is partitioned to arrays that only contain single (sorted) element. I drew out a call stack example to illustrate my confusion.
void merge_sort(int A[], int start, int end) {
if (start < end) {
int mid = (start + end ) / 2;
merge_sort(A, start, mid);
merge_sort(A, mid + 1, end);
merge(A, start, mid, end);
}
}
the call stack should look something like this
merge_sort(A,0,5) A [9,7,8,3,2,1]
merge_sort(A,0,2) A [9,7,8]
merge_sort(A,0,1) A [9,7]
merge_sort(A,0,0) -> here the base case would fail, no?
in which case the array would not get partitioned into singleton arrays.