При выполнении дальнего перехода в режиме реального адреса или виртуального, 8086 процессор переходит к сегменту кода и смещению, указанным целевым операндом. Здесь целевой операнд указывает абсолютный дальний адрес либо непосредственно с помощью указателя (ptr
16:16 или ptr
16:32), либо косвенно с помощью ячейки памяти (mem
16:16 или mem
16:32). При использовании метода указателя сегмент и адрес вызываемой процедуры кодируются в инструкции с использованием 4-байтового (16-битный размер операнда) или 6-байтового (32-битный размер операнда) непосредственного удаленного адреса. При косвенном методе целевой операнд указывает ячейку памяти, содержащую 4-байтовый (16-разрядный размер операнда) или 6-байтовый (32-разрядный размер операнда) дальний адрес. Дальний адрес загружается непосредственно в регистры CS и IP.
- title Автор: Довгополов Евгений Сергеевич
- .model small
- .stack 100h
- data segment public
- ____string db 0Ah, 0Dh, "Hello Assembly "
- ___________db World!$"
- data ends
- code segment public
- ____assume ds:data, cs:code
- ____main proc
- ________mov _____ax, seg data
- ________mov _____ds, ax
- ________mov ____ dl, 'D'
- ________call far ptr PrintChar
- ________lea _____dx, ds:[string]
- ________call far ptr PrintString
- ________mov _____ax, 4C00h
- ________int _____21h
- ____main endp
- code ends
- print_s segment public
- ____assume cs:print_s
- ____PrintChar proc far
- ________push ____ax
- ________mov _____ah, 02h
- ________int _____21h
- ________pop _____ax
- ________retf
- ____PrintChar endp
- ____PrintString proc far
- ________push ____ax
- ________mov _____ah, 09h
- ________int _____21h
- ________pop _____ax
- ________retf
- ____PrintString endp
- end main