![]() |
|||
Разделы сайта | Cтатьи. |
Статистика сайта.
Посещений за день: 93 Баннеры. Статистика в картинках. |
|
|
Основы языка программирования C86.
В основе языка C86 лежит подмножество стандарного C. Далее кратко изложены основные возможности языка, основные принципы его применения.
MASM mus.asm ; или TASM mus.asm ; LINK mus.obj ; TLINK mus.obj ; EXE2BIN mus.exe mus.com EXE2BIN mus.exe mus.com Естественно, все эти действия можно объединить в .BAT файл: файл m86.bat: файл t86.bat : ================ ================ MASM %1 ; TASM %1 ; LINK %1 ; TLINK %1 ; EXE2BIN %1.EXE %1.COM EXE2BIN %1.EXE %1.COM DEL %1.OBJ DEL %1.EXE DEL %1.EXE DEL %1.OBJ DEL %1.MAP ...... При успешной компиляции (ошибок 0) C86 возвращает ERRORLEVEL 0. В случае ошибок компиляции возвращаетя ERRORLEVEL 1. для компиляции PROG.C: 86 prog файл 86.bat: ==================== c86 %1.c %1.asm if ERRORLEVEL 1 goto err_find echo ОШИБОК НЕТ !!! m86 %1 goto exit :err_find echo !!! Обнаружены ОШИБКИ !!! :exit В С86 предусмотрены два типа данных : тип char и тип int (а также указатели на эти типы). Например: int ivar; /* целая переменная */ int iarr[12]; /* целочисл. массив */ int *iptr; /* указатель на int */ char cvar; /* символьная перем.*/ char carr[12]; /* массив символов */ char *cptr; /* указатель на char*/ При этом на переменную типа int выделяется 2 байта, на переменную типа char 1 байт. В C86 не предусмотрена возможность определения новых типов. В C86 включены следующие директивы препроцессора: Первая директива применяется для замены констант на мнемоническое имя для облегчения разработки текста программы. Например: #define TWO 2 /* в дальнейшем в теле программы можно пользоваться */ /* именем TWO вместо константы 2 */ #define MAXCOL 79 .... Вторая директива служит для подключения в процессе компиляции внешнего файла, имя которого указывается после: #include extend.c /* прочитать и оекомпилировать текст,хранящийся в */ /* файле extend.c */ #include outdec.c .... Новыми и оригинальными являются директивы #asm xor ax,ax mov al,mode1 int 10h ;установить режим экрана ....... #endasmМатематические действия.
{ a1=a2+1; a3++; write(d2); } if(условие) условный оператор, условия:
например: if(xx==22) write(dd1) else write(dd2); if((yy>2)&(xx<=33)) { read(ff); a1=a1+ff; write(a1); } else { ch1=getchar(); if(ch1=0) a1=a1+1; }Оператор цикла. while(условие) для прерывания тела цикла служит оператор break. Для ускоренного перехода в цикле к заголовку служит оператор continue. Например: ii=1; while (ii++<22) { if(getchar()==32)continue; /* следующие операторы в случае */ /* выполнения continue не выполняются */ gotoxy(10,22); /* какие-то действия */ write(ii); if(getchar()==27)break; /* если сработает break - окажемся за */ /* пределами цикла */ }Подпрограммы. Как и в обычном Си возможно объявление функций. Если из функции необходимо вернуть какое-либо значение необходим оператор return. Например: addfunc(a1,a2) /* имя функции */ int a1,a2; /* принимаемые переменные */ { /* тело функции */ char mm; /* локальные переменные */ int ff; mm=0; mm=mm+a1; ff=a2 << 1; ff=a1 / mm; return(ff); /* возвратить в вызывающую функцию значение ff */ } Примечание: Передача значений в функцию осуществляется через стек, возврат значения осуществляется через регистр Ax. Оператор return прерывает работу функции и возвращает значение в вызывающую функцию. >> |
||
BitByByte, 2000г. (2025). |