Kак настроить сегменты в watcom C. Проблема том что я не получить валидный адрес данных, кроме локальных данных с ними все в порядке. Проект прикреплен к теме. Код (Text): .286 p .model tiny assume nothing DGROUP group _BSS,CONST,CONST2,_DATA,DATA,STRINGS,STACK extern _cstart_ :proc _TEXT segment byte public 'CODE' assume CS:_TEXT assume DS:DGROUP public myrtn_ org 100h myrtn_ proc push bp mov bp,sp call _cstart_ mov sp,bp pop bp ret myrtn_ endp _TEXT ends _DATA segment 'DATA' _data_ db 100h dup(?) _DATA ends DATA segment 'DATA' data_ db 100h dup(?) DATA ends CONST segment 'DATA' cnt_ db 100h dup(?) CONST ends CONST2 segment 'DATA' cnt2_ db 100h dup(?) CONST2 ends STRINGS segment 'DATA' str_ db 100h dup(?) STRINGS ends _BSS segment 'BSS' bss_ db 100h dup(?) _BSS ends STACK segment 'STACK' ; bss_ db 100h dup(?) STACK ends end myrtn_ Код (Text): #include "precomp.h" #include "TextMode.h" void _cstart(void){ BREAK_POINT; InitTextMode(); TextOut(sdf); // передает не правильный адрес __asm{ xor eax,eax int 16h }; typedef struct __TEXTPAGE{ struct XY{ unsigned char x; unsigned char y; }; unsigned char attr; } TEXTPAGE,*PTEXTPAGE; #define _TEXTPAGE struct __TEXTPAGE #define TEXTPAGE _TEXTPAGE #define CountPage 7 #define TextMode8025 0x03 TEXTPAGE TextPages[CountPage]; char ActivePage; int strlen(char*str); void memcpy(void *dest,void *source,int size); void memset(void *dest,int size,char fill); int strlen(char*str){ char *p; p = str; while(*p) ++p; return p - str; }; void memcpy(void *dest,void *source,int size){ while(size--){ *((char*)dest)++ = *((char*)source)++; }; }; void memset(void *dest,int size,char fill){ while(size--) *((char*)dest)++ = fill; }; void InitTextMode(){ ActivePage = 0; memset(TextPages,sizeof(TextPages),0); __asm{ mov ax,TextMode8025 int 10h }; }; void TextOut(char*text){ //text указывает не понятно куда ((!!! int len; TEXTPAGE pos; memcpy(&pos,&TextPages[GetActivePage()],sizeof(TEXTPAGE)); len = strlen(text); __asm{ push es mov ax,ds mov es,ax mov cx,len mov bp,text lea bp,[pos] mov WORD PTR dx,[bp + 0] mov BYTE PTR bl,[bp + 2] mov bp,[text] mov ax,0x1301 // 13h function, update cursor pos int 10h pop es }; };