|
|||
| Разделы сайта | Cтатьи. |
Статистика сайта.
Посещений за день: 192 Баннеры. Статистика в картинках. |
|
|
|
Основы языка программирования 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). | |||