инструкции найдены в _sendrec.s

Я наткнулся на следующие инструкции, найденные в src/lib/i386/rts/_sendrec.s

В самом начале выписываются следующие утверждения.

SEND = 1

RECEIVE = 2

BOTH = 3

SYSVEC = 33

SRCDEST = 8
MESSAGE = 12

Как я могу интерпретировать приведенные выше утверждения? Например, SRCDEST = 8, должен ли я читать его, поскольку SRCDEST имеет значение 8. Если это так, следующее утверждение не имеет для меня никакого смысла. Если нет, то что такое SRCDEST, MESSAGE, BOTH? это встроенные функции? Если да, то где они определены в файле .s?

Судя по комментариям, eax = dest-src. Каковы значения dest и src? ebx = message pointer. Означает ли это, что ebx является ссылкой на базовый указатель? Что касается mov ecx, BOTH ! _sendrec(srcdest, ptr), что именно здесь происходит? ценю, если кто-нибудь может пролить свет на следующие утверждения или указать мне ссылку или две. искал в Интернете в течение нескольких дней и не повезло найти информацию. Спасибо за ваше время.

__sendrec:

mov eax, SRCDEST(ebp)   ! eax = dest-src

mov ebx, MESSAGE(ebp)   ! ebx = message pointer

mov ecx, BOTH       ! _sendrec(srcdest, ptr)

person comp101    schedule 10.07.2012    source источник


Ответы (1)


SEND, RECEIVE и BOTH — константы со значениями 1, 2 и 3 соответственно. Они представляют операцию, которую вы выполняете (1 означает «отправить», 2 означает «получить», а 3 означает «отправить и получить»).

Константы SRCDEST и MESSAGE представляют собой смещения в стеке, где хранятся значения, представляющие источник/назначение и сообщение.

SYSVEC — номер прерывания.

person Gabe    schedule 10.07.2012
comment
Спасибо за ваш быстрый ответ. SEND, RECEIVE и BOTH — это константы со значениями 1, 2 и 3 соответственно, а 3 означает как отправку, так и получение. move ecx, BOTH означает, что регистр счетчика имеет значение 3 или операцию, которая одновременно отправляет и получает. трудно разобраться в этом, когда собираешь кусочки. - person comp101; 10.07.2012
comment
Да, mov ecx, BOTH помещает значение 3 в ECX. Не думайте об этом как о регистре счетчика, так как он не всегда используется для подсчета. В этом случае он просто используется, чтобы сообщить ядру, должно ли оно отправлять или получать. - person Gabe; 10.07.2012
comment
спасибо за решение этой части для меня. еще не читал код ядра. Итак, я предполагаю, что когда выполняется mov ecx, ОБА выполняется, ядро ​​​​проверит значение, хранящееся в ecx. Если значение равно 3, ядро ​​будет выполнять операцию отправки и получения. Таким образом, SRCDEST(ebp) или MESSAGE(ebp) — это синтаксис, который указывает смещения от базового указателя, а не указателя кадра в стеке, где хранятся значения, представляющие источник/назначение и сообщение. - person comp101; 10.07.2012