Там нет стандартного соглашения о вызове, который поддерживает возврат нескольких значений, так как не существует никакого способа сделать это в C.
В C, вы определения структуры (или, более общо, определенный пользователем тип) , выделить память для экземпляра этого типа, инициализировать его поля и вернуть указатель на него. (В качестве альтернативы, вы можете назначить вызывающей стороне память для структуры и передать указатель на нее.) Вы можете сделать то же самое на языке ассемблера.
Или вы можете определить пользовательское соглашение о вызове, а затем вернуть значения, как вам нравится. Например, вы можете вернуть их в определенные, определенные регистры по своему усмотрению. Или, вы могли бы заставить вызывающего абонента выделить необходимое количество места в стеке, а затем сохранить значения в этих слотах.
Пока вызывающая сторона вашей функции не знает и не придерживается своего соглашения о вызове, у вас нет проблемы. При написании полностью на ассемблере вы можете сделать это легко, но у вас возникнут проблемы, если вы попытаетесь связать этот код с C или любым другим языком.
Обратите внимание, что нет режима адресации формы '[sp + 4]'. Вы уверены, что знаете сборку 8086? – fuz
@fuz Это прощающая ошибка, x86 полон исторических, не-смысловых, артефактов. Я не думаю, что этого достаточно, чтобы рассказать о знании Коди ... –
Ух, совсем не уверен. Я пишу 32-битный ассемблерный код. Сожалею. –