Para delimitar o conjunto de instruções que constituem um procedimento utilizam-se as directivas PROC e ENDP. Se, em conjunto com cada uma destas directivas usarmos um nome (label), podemos invocar o procedimento usando esse label. A directiva PROC indica o inicio do procedimento e a directiva ENDP o fim.
Suponhamos que pretendíamos implementar um procedimento para calcular a média entre dois bytes. As fronteiras do procedimento poderão ser estabelecidas da seguinte forma:
MEDIA PROC NEAR
<conjunto de instrucoes que constituem o procedimento MEDIA>
MEDIA ENDP
Sempre que precisamos de executar a sequência de instruções contida num procedimento usamos a instrução CALL. É esta instrução que indica ao processador qual o endereço da primeira instrução do procedimento. A instrução RET tem que aparecer no fim do procedimento para indicar ao processador que deve voltar ao programa chamador e executar a instrução que está imediatamente a seguir à instrução CALL.
A instrução CALL do 8086 tem o seguinte formato:
CALL <destino>
Quando executada, esta instrução, executa duas operações. Primeiro armazena o endereço da instrução que está imediatamente a seguir à instrução CALL. Este endereço é chamado o endereço de retorno porque é o endereço para o qual a execução volta depois do procedimento ser executado. Se a instrução CALL invoca um procedimento dentro do mesmo segmento de código então diz-se que estamos perante um call do tipo near. Nesse caso só é necessário armazenar o conteúdo do registo IP, uma vez que o valor do registo CS se mantém inalterado. Se a instrução CALL invoca um procedimento noutro segmento de código então é necessário armazenar o conteúdo do registo CS e do registo IP. A segunda operação da instrução CALL consiste em alterar o conteúdo do registo IP, e por vezes também o do registo CS, em função do <destino>. O novo par CS e IP deverá apontar para a primeira instrução do procedimento.
A maior parte dos programas invoca os procedimentos usando o próprio nome (label). Neste caso diz-se que estamos perante um call directo. No entanto à semelhança do que acontece com a instrução JMP, pode haver calls directos e indirectos e calls intra ou inter-segmento.
A instrução RET do 8086 não tem operandos.
Como já foi dito, quando é executada a instrução CALL, o endereço de retorno é armazenado. Caso se trate de um call do tipo near esse endereço é constituído apenas pelo valor do IP. A instrução RET, quando executada, vai buscar esse valor e carrega-o de novo no registo IP.