мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
asm:c_lesson1 [10/11/2010 18:46] arabusovasm:c_lesson1 [12/02/2014 20:55] (текущий) arabusov
Строка 1: Строка 1:
 ====== Урок 1 ====== ====== Урок 1 ======
 Керниган (автор UNIX) говорил: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво». Разработка Си стала результатом того, что его будущие авторы любили компьютерную игру, подобную популярной игре Asteroids (Астероиды). Они уже давно играли в неё на главном сервере компании, который был недостаточно мощным и должен был обслуживать около ста пользователей. Томпсон и Ритчи посчитали, что им не хватает контроля над космическим кораблём для того, чтобы избегать столкновений с некоторыми камнями. Поэтому они решили перенести игру на свободный PDP-7, стоящий в офисе. Однако этот компьютер не имел операционной системы, что заставило их её написать. В конце концов, они решили перенести эту операционную систему ещё и на офисный PDP-11, что было очень тяжело, потому что её код был целиком написан на ассемблере. Было вынесено предложение использовать какой-нибудь высокоуровневый портативный язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Би, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11. Поэтому они и остановились на разработке языка Си. Проведём аналогии языка Си с Паскалем. Керниган (автор UNIX) говорил: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво». Разработка Си стала результатом того, что его будущие авторы любили компьютерную игру, подобную популярной игре Asteroids (Астероиды). Они уже давно играли в неё на главном сервере компании, который был недостаточно мощным и должен был обслуживать около ста пользователей. Томпсон и Ритчи посчитали, что им не хватает контроля над космическим кораблём для того, чтобы избегать столкновений с некоторыми камнями. Поэтому они решили перенести игру на свободный PDP-7, стоящий в офисе. Однако этот компьютер не имел операционной системы, что заставило их её написать. В конце концов, они решили перенести эту операционную систему ещё и на офисный PDP-11, что было очень тяжело, потому что её код был целиком написан на ассемблере. Было вынесено предложение использовать какой-нибудь высокоуровневый портативный язык, чтобы можно было легко переносить ОС с одного компьютера на другой. Язык Би, который они хотели сначала задействовать для этого, оказался лишён функциональности, способной использовать новые возможности PDP-11. Поэтому они и остановились на разработке языка Си. Проведём аналогии языка Си с Паскалем.
-      Действие             Паскаль           Си +      Действие               Паскаль                Си 
-      начало программы     begin             +       
-      конец программы      end               +  начало      программы       begin                  
-      пустой оператор                      +    
-      описание переменной  var i:integer;    int i; +  конец       программы       end                    
-      типы данных+       
-          целый +  пустой       оператор                            
-          +       
 +  описание   переменной       var i:integer;         int i; 
 +      
 +  описание      функции       function name (i:      int name (int i); 
 +                              integer): integer; 
 +                               
 +  описание    процедуры       procedure    name      void name (int i); 
 +                              (iinteger); 
 +                              
 +  блок      операторов,       begin                  { 
 +  мыслимый          как       ;                      ; 
 +  один         оператор       end                    } 
 +        
 +  оператор присваивания       :                    = 
 +   
 +  включение     модулей       uses CRT;              #include <conio.h>
 Пример хэллоуворлда: Пример хэллоуворлда:
 +   #include <stdio.h>
 +   int main ()
 +   {
 +       printf ("Hello, world!\n");
 +       return 0;
 +   
  
-    #include <stdio.h> 
-     
-    int main () 
-    { 
-        printf ("Hello, world!\n"); 
-        return 0; 
-    } 
-     
 ===== Практическое занятие ===== ===== Практическое занятие =====
-Задание: скомпилировать в DOSBox программу helloc.c - хэллоуворлд и сравнить с аналогичной программой на ассемблере +<code bash>gcc -c hello.c -o hello.o -Wall -Wextra -ansi -pedantic -O2 
-      +gcc hello.o -o hello -Wall -Wextra 
 +./hello</code>