Masz, wersja pod fasma dzialajaca tak jak tego oczekujesz... od lat nie pisalem pod innym assemblerem i nie mam zamiaru zmieniac swoich przyzwyczajen. Z tego co wiedze to nie masz zbytniego pojecia o dzialaniu trybu rzeczywistego - segmenty /w sumie ja tez mam spore zaleglosci - ostatnio pod RM pisalem ze 2 lata temu bootloader/. BTW co piszesz, ze potrzebujesz tak nietypowe rozwiazania jak call miedzysegmentowy? W praktyce kazdy normalny program da sie pod RM napisac bez tego... chyba, ze piszesz wirusa :>
format MZ
entry main:start
stack 100h
segment text
tekst db "Hello, world!", 0ah, 0dh, "$"
write_text:
mov dx, tekst
mov ah, 09h
int 21h
retf
segment main
start:
mov ax, text
mov ds, ax
mov word [esp-4], write_text
mov word [esp-2], ax ; text
call far [esp-4] ; m16:16
mov ax, 4C00h
int 21h
Zadowolony?
Zapomnialbym... Zapoznaj sie z manualami intela - najlepiej bedzie jezeli zamowisz sobie w formie papierowej /oczywiscie sa darmowe/. Jak zamowic? Spojrz do gory i w prawo - jest tam taka opcja jak szukaj :> A powaznie to kiedys juz o zamawianiu pisalem.
p.s. Kodu wpakowanego do segmentu danych zmienna bym nie nazwal... ale to tak na marginesie ;)