592

Интерпретатор фиксированной XML-структуры в SQL-запросы

Курсовая

Информатика, кибернетика и программирование

XML, в отличие от HTML, дает возможность сохранения данных в обычном текстовом формате, при этом любой человек или программа, имеют возможность читать и обрабатывать XML-документы. С помощью любого текстового редактора на любой платформе можно просмотреть документ и внести в него необходимые изменения.

Русский

2013-01-06

130 KB

16 чел.

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ИНСТИТУТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ

Курсовая работа

Интерпретатор фиксированной XML-структуры в SQL-запросы.

Выполнили:

студенты группы А-13-09

Ладанова Евгения

Ефанов Алексей

Преподаватель:

Пашинцев Владимир

Дмитриевич

Москва, 2012

ВВЕДЕНИЕ

Язык XML привлек к себе уже достаточно много внимания со стороны разработчиков и пользователей Интернет. Сегодня количество приверженцев этой новой технологии стремительно возрастает. Несмотря на то, что XML очень молод и отдельные компоненты этого языка находятся еще в стадии доработки, уже сегодня появляются новые языки, созданные на основе XML, возникают многочисленные Web-сервера, использующие эту технологию для организации хранящейся на них информации.

XML, в отличие от HTML, дает возможность сохранения данных в обычном текстовом формате, при этом любой человек или программа, имеют возможность читать и обрабатывать XML-документы. При этом не требуется специальное программное обеспечение для того, чтобы получить доступ к таким данным.

Таким образом, обеспечивается совместимость при передаче структурированных данных между различными системами обработки информации, преимущественно при передаче таких данных через Интернет.

С помощью любого текстового редактора на любой платформе можно просмотреть документ и внести в него необходимые изменения.  XML позволяет сохранять в текстовых файлах структурированные данные. В итоге получаются текстовые файлы, которые структурированы таким образом, что они:

- точно выражены

- расширяемы

- платформо-независимы

XML — это не язык программирования, и не нужно быть программистом, чтобы использовать или изучать его. Компьютеру намного легче создавать и читать данные XML, обеспечивая при этом однозначность их структуры. XML позволяет избежать типичных ошибок при проектировании языков: он является расширяемым, независим от платформы, включает поддержку интернационализации и локализации. XML также полностью совместим с Unicode.

В качестве языка, на котором мы реализуем реляционную базу данных, мы выбрали SQL. Он является   современным   универсальным   программным   средством управления данными. С помощью SQL можно динамически изменять и расширять структуру базы данных даже в то время, когда пользователи обращаются к ее содержимому. Это большое преимущество перед языками статического определения данных, которые запрещают доступ к базе данных во время изменения ее структуры.

Таким образом, SQL обеспечивает максимальную гибкость, так как дает базе данных возможность адаптироваться к изменяющимся требованиям, не прерывая работу приложения, выполняющегося в реальном масштабе времени.

Преимущества языка SQL, на которые стоит обратить внимание, следующие:

· независимость от конкретных СУБД;

· переносимость с одной вычислительной системы на другую;

· наличие стандартов;

· поддержка со стороны компании Microsoft (протокол ODBC);

· реляционная основа;

· высокоуровневая структура, напоминающая английский язык;

· возможность выполнения специальных интерактивных запросов:

· обеспечение программного доступа к базам данных;

· возможность различного представления данных;

· полноценность как языка, предназначенного для работы с базами данных;

· возможность динамического определения данных;

· поддержка архитектуры клиент/сервер.

ЧАСТЬ I. ПОСТАНОВКА ЗАДАЧИ.

ОПРЕДЕЛЕНИЯ КЛЮЧЕВЫХ ПОНЯТИЙ

Для начала дадим определения основных понятий, с которыми будем сталкиваться по ходу данной работы.

XML (англ. eXtensible Markup Language — расширяемый язык разметки) — рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML). XML является упрощённым подмножеством языка SGML.

SQL (Structured Query Language — «язык структурированных запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на исчислении кортежей.

Интерпретатор - программа, анализирующая и тут же выполняющая  построчно команды, по мере поступления её исходного кода на вход.

ПОСТАНОВКА ЗАДАЧИ

      В наше время компьютеры все глубже проникают в различные отрасти , и возникает необходимость хранения информации в базах данных, но не всегда существует возможность прямого доступа к базе. Поэтому, наиболее оптимальным решением при использовании баз данных, не требующих работы в реальном времени, является накапливание информации, до тех пор, пока не появится возможность их непосредственного занесения в базу. В качестве «накопителя», впоследствии именуемого буфером,  удобно использовать файл, в котором данные будут представлены в виде XML-структуры. Так же необходимо предусмотреть возможность редактирования хранящейся информации.

В своей работе мы попытаемся реализовать программу на языке С#, позволяющую производить добавление информации фиксированной структуры в XML файл, ее редактирование, удаление и интерпретацию в SQL-запросы.

В качестве примера  реализации фиксированной структуры, мы выбрали базу, хранящую информацию о студентах.

ОПИСАНИЕ ВХОДНЫХ ДАННЫХ.

В качестве входных данных выбраны следующие информационные поля, записываемые в файл буфера:

№ студенческого билета – уникальный идентификационный номер студента, присваиваемый студенту при поступлении и указанный в студенческом билете. Тип данных: целое положительное число.

Фамилия, Имя, Отчество – поля, обязательные к заполнению. Тип данных: строковый.

Пол, Факультет, Группа - поля, не обязательные к заполнению. Тип данных: строковый.

Возраст - поле, не обязательное к заполнению. Тип данных: целое положительное число.


ОПИСАНИЕ ВЫХОДНЫХ ДАННЫХ (РЕЗУЛЬТАТОВ).

Результатом работы программы является текстовый файл, содержащий SQL запросы, полученные при интерпретировании файла с входными данными.

Пример:

Содержимое файла с XML- структурой:

<student>

<nomer_stud_bilet>3</nomer_stud_bilet>

<Familiya>Черных</Familiya>

<Imya>Светлана</Imya>

<Otchestvo>Игоревна</Otchestvo>

<Age>20</Age>

<Pol>Ж</Pol>

<Fakultet>АВТИ</Fakultet>

<Gruppa>А-01-09</Gruppa>

</student>

Выходные данные:

CREATE TABLE Students (

stud_bil INT(5) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,

Familiya CHAR(20) DEFAULT '' NOT NULL,

Imya CHAR(20) DEFAULT '' NOT NULL,

Otchestvo CHAR(20) DEFAULT '',

Age INT(2) UNSIGNED ZEROFILL DEFAULT '00',

Pol CHAR(20) DEFAULT '' ,

Fakultet CHAR(20) DEFAULT '',

Gruppa CHAR(20) DEFAULT '' )

INSERT INTO Students VALUES

(3,'Черных','Светлана','Игоревна',20,'Ж','АВТИ','А-01-09');


ЧАСТЬ II. РЕШЕНИЕ

Наша программа ориентирована, прежде всего, на пользователя. Для удобства вся информация вводится в форме, где указаны обязательные и необязательные поля. Затем, уже из формы информация записывается в файл в виде XML-структуры. Информацию в этом файле можно редактировать, добавлять и удалять. И основное действие с файлом – это перевод в SQL-запросы, что и является поставленной задачей.

Выбранная нами фиксированная XML-структура файла представлена ниже:

<student>

 <nomer_stud_bilet></nomer_stud_bilet>

 <Familiya></Familiya>

 <Imya></Imya>

 <Otchestvo></Otchestvo>

 <Age></Age>

 <Pol></Pol>

 <Fakultet></Fakultet>

 <Gruppa></Gruppa>

</student>

Создание  файла с данной структурой происходит следующим образом:

  1.  Пользователь выбирает файл, в который нужно произвести запись данных и затем вводит данные в поля на форме.
  2.  При нажатии на кнопку ДОБАВИТЬ происходит проверка на наличие введенного номера зачетной книжки, если он был введен, то происходит проверка на существование данного студента в базе, если данный студент уже существует, или номер студенческого билета не был введен, то выводится соответствующее сообщение.
  3.  Если пункт 2 был выполнен корректно, то происходит проверка на наличие данных в полях, обязательных к заполнению, если нужные поля не заполнены, выводится сообщение об ошибке.
  4.  Если обязательные поля заполнены, происходит считывание  информации с полей и запись соответствующих тегов в файл.

private void Add_student(object sender, EventArgs e)

       {

           Form4 fr4;

           if (textBox1.Text == "")

           {

               fr4 = new Form4();

               fr4.label1.Text = "Не введен номер студенческого билета";

               fr4.ShowDialog();

           }

           else

           {

               if (Student.Validation(textBox1.Text,FilePath))

               {

                   fr4 = new Form4();

                   fr4.label1.Text = "Студент с таким номером студ.билета уже существует";

                   fr4.ShowDialog();

               }

               else

               {

                   if (textBox2.Text == "")

                   {

                       fr4 = new Form4();

                       fr4.label1.Text = "Не введена фамилия студента";

                       fr4.ShowDialog();

                   }

                   else

                   {

                       if (textBox3.Text == "")

                       {

                           fr4 = new Form4();

                           fr4.label1.Text = "Не введено имя студента";

                           fr4.ShowDialog();

                       }

                       else

                       {

                           if (textBox4.Text == "")

                           {

                               fr4 = new Form4();

                               fr4.label1.Text = "Не введено отчество студента";

                               fr4.ShowDialog();

                           }

                           else

                           {

                               sw1 = new StreamWriter(FilePath, true);

                               sw1.WriteLine("<student>");

                               sw1.WriteLine("<nomer_stud_bilet>" + textBox1.Text + "</nomer_stud_bilet>");

                               sw1.WriteLine("<Familiya>" + textBox2.Text + "</Familiya>");

                               sw1.WriteLine("<Imya>" + textBox3.Text + "</Imya>");

                               sw1.WriteLine("<Otchestvo>" + textBox4.Text + "</Otchestvo>");

                               if (textBox6.Text != "")

                               {

                                   sw1.WriteLine("<Age>" + textBox6.Text + "</Age>");

                               }

                               if (textBox5.Text != "")

                               {

                                   sw1.WriteLine("<Pol>" + textBox5.Text + "</Pol>");

                               }

                               if (textBox7.Text != "")

                               {

                                   sw1.WriteLine("<Fakultet>" + textBox7.Text + "</Fakultet>");

                               }

                               if (textBox8.Text != "")

                               {

                                   sw1.WriteLine("<Gruppa>" + textBox8.Text + "</Gruppa>");

                               }

                               sw1.WriteLine("</student>");

                               sw1.WriteLine();

                               sw1.Close();

                               textBox1.Text = "";

                               textBox2.Text = "";

                               textBox3.Text = "";

                               textBox4.Text = "";

                               textBox5.Text = "";

                               textBox6.Text = "";

                               textBox7.Text = "";

                               textBox8.Text = "";

                               

                           }

                       }

                   }

               }

           }

       }

Удаление информации о студенте осуществляется следующим образом:

  1.  Осуществляется поиск записи в файле с заданным параметром.
  2.  Найденная запись о студенте удаляется.

 public static void DeleteStudent(string target, string FilePath)

       {

           string[] readText = File.ReadAllLines(FilePath);

           for (int i = 0; i < readText.Length; i++)

           {

               if (readText[i] == "<student>")

               {

                   i++;

                   string[] data = readText[i].Split(new char[] { '<', '>' });

                   data = Delete(data, 0);

                   if (data[1] == target)

                   {

                       while (readText[i] != "</student>")

                       {

                           readText = Delete(readText, i);

                       }

                       readText = Delete(readText, i - 1);

                       readText = Delete(readText, i - 1);

                       readText = Delete(readText, i - 1);

                       break;

                   }

               }

           }

           File.WriteAllText(FilePath, string.Join(Environment.NewLine, readText));

           StreamWriter sw1 = new StreamWriter(FilePath, true);

           sw1.WriteLine();

           sw1.Close();

       }

Редактирование информации в файле происходит следующим образом:

  1.  Осуществляется поиск записи в файле с заданными параметрами, так как один из параметров в нашей структуре уникальный (номер студенческого билета), то поиск ведется именно по нему.
  2.  Найденная запись о студенте удаляется и записывается новая информация.
  3.  Если не заполнены обязательные поля, выдается сообщение об ошибке.

public static Stud FindStudent(StreamReader sr1, string find)

       {

           bool flag = false;

           Stud res = new Stud();

           while (sr1.Peek() != -1 && flag != true)

           {

               Stud st = new Stud();

               st.flag = false;

               st = Student.LoadStudent(sr1);

               if (st.nom_stud == find)

               {

                   flag = true;

                   st.flag = true;

                   res = st;

               }

           }

           return res;

       }

public static void EditingStudent(Stud st, string target, string FilePath)

       {

           DeleteStudent(target, FilePath);

           StreamWriter sw1 = new StreamWriter(FilePath, true);

           sw1.WriteLine();

           sw1.WriteLine("<student>");

           sw1.WriteLine("<nomer_stud_bilet>" + st.nom_stud + "</nomer_stud_bilet>");

           sw1.WriteLine("<Familiya>" + st.familiya + "</Familiya>");

           sw1.WriteLine("<Imya>" + st.imya + "</Imya>");

           sw1.WriteLine("<Otchestvo>" + st.otchestvo + "</Otchestvo>");

           if (st.age != "")

           {

               sw1.WriteLine("<Age>" + st.age + "</Age>");

           }

           if (st.pol != "")

           {

               sw1.WriteLine("<Pol>" + st.pol + "</Pol>");

           }

           if (st.fakultet != "")

           {

               sw1.WriteLine("<Fakultet>" + st.fakultet + "</Fakultet>");

           }

           if (st.gruppa != "")

           {

               sw1.WriteLine("<Gruppa>" + st.gruppa + "</Gruppa>");

           }

           sw1.WriteLine("</student>");

           sw1.Close();

       }

Для решения поставленной задачи, интерпретирование XML-структуры в SQL-запросы, был использован метод рекурсивного спуска. Далее поясним в чем суть метода и его преимущества.

Метод рекурсивного спуска.

В лексическом анализе существуют  две модели анализаторов: автоматная и на «жесткой» логике. В анализаторе на «жесткой» логике лексика «зашита» в управляющие конструкции программы (ветвления, циклы), т.е. непосредственно в алгоритмическую часть. В результате анализатор настроен на единственный вариант лексики.

В автоматной модели лексика «зашита» в управляющие таблицы конечного автомата (КА), т.е. по существу является данными. Это позволяет настраивать анализатор на различные варианты лексики, но требует предварительной работы по проектированию самого КА и построению его управляющих таблиц, либо наличия языка формального языка описания лексики и транслятора с него.

Мы выбрали модель анализатора на «жесткой» логике, так как рассматриваемая нами структура данных является фиксированной.

Мы используем метод рекурсивного спуска, основанный на «зашивании» правил грамматики непосредственно в управляющие конструкции распознавателя. Идеи нисходящего разбора, в нем полностью сохраняются:

·        происходит последовательный просмотр входной строки слева-направо;

·        очередной тег входной строки является основанием для выбора одной из правых частей правил группы при замене текущего нетерминала;

·         обнаружение нетерминала в правой части рекурсивно повторяет этот же процесс.

В методе рекурсивного спуска они претерпевают следующие изменения:

·        каждому нетерминалу соответствует отдельная процедура (функция), распознающая (выбирающая и «закрывающая») одну из правых частей правила, имеющего в левой части этот нетерминал (т.е. для каждой группы правил пишется свой распознаватель);

·        во входной строке имеется указатель (индекс) на текущий «закрываемый символ». Этот символ и является основанием для выбора необходимой правой части правила. Сам выбор «зашит» в распознавателе в виде конструкций if или switch.

·        просмотр выбранной части реализован в тексте процедуры-распознавателя путем сравнения ожидаемого тега правой части и текущего тега входной строки;

·        если в правой части ожидается терминальный символ и он совпадает с очередным символом входной строки, то символ во входной строке пропускается, а распознаватель переходит к следующему символу правой части;

·        несовпадение терминального символа правой части и очередного символа входной строки свидетельствует о синтаксической ошибке;

·        если в правой части встречается нетерминальный символ, то для него необходимо вызвать аналогичную распознающую процедуру (функцию).

Метод рекурсивного спуска позволяет отойти от канонической формы представления формальных грамматик и проектировать распознаватель частично на содержательном уровне, что делает его более естественным и «читабельным». Это касается, прежде всего, синтаксических конструкций повторения, которые в тексте распознавателя могут быть заменены обычными циклами типа while  или for.  Для этого, группу правил, которая реализует такой цикл, нужно реализовать в виде одного распознавателя, записав в нем соответствующий программный цикл. В теле цикла должна быть часть распознавателя, соответствующая повторяющейся конструкции, а условия продолжения и ограничения цикла должны проверяться соответствующими терминалами.

Второе упрощение заключается в частичном отказе от проверки выбирающих символов в некоторых группах правил. Как известно, явные выбирающие символы имеют место для S-правил. Для аннулирующих правил и правил, начинающихся с нетерминала, их необходимо вычислять. В том случае, если такое правило в группе – единственное, его выбор можно осуществлять по принципу «от противного», т.е. если не встречается ни один из выбирающих символов S-правил. Правда, при этом теряются ветви программы, ответственные за обнаружение ошибок, хотя это поправимо: ошибки могут быть обнаружены правилами более высокого уровня.

Достоинствами метода является естественность написания процедур синтаксического анализа, последовательность вызова которых в программе совпадает с последовательностью нисходящего вывода. Данный метод исключительно удобен при построении интерпретаторов и генераторов кода, когда в процессе синтаксического анализа производится анализ семантики выражения или его интерпретация.

Реализация этого метода в нашей работе:

public static Stud LoadStudent(StreamReader sr1)

       {

           Stud st = new Stud();

           string start = sr1.ReadLine();

           if (start == "<student>")

           {

               string temp = sr1.ReadLine();

               while (temp != "</student>")

               {

                   string[] data = temp.Split(new char[] { '<', '>' });

                   if (data.Length > 0)

                   {

                       data = Delete(data, 0);

                       if (data[0] == "nomer_stud_bilet" && data[2] == "/nomer_stud_bilet")

                       {

                           st.nom_stud = data[1];

                       }

                       else

                       {

                           if (data[0] == "Familiya" && data[2] == "/Familiya")

                           {

                               st.familiya = data[1];

                           }

                           else

                           {

                               if (data[0] == "Imya" && data[2] == "/Imya")

                               {

                                   st.imya = data[1];

                               }

                               else

                               {

                                   if (data[0] == "Otchestvo" && data[2] == "/Otchestvo")

                                   {

                                       st.otchestvo = data[1];

                                   }

                                   else

                                   {

                                       if (data[0] == "Age" && data[2] == "/Age")

                                       {

                                           st.age = data[1];

                                       }

                                       else

                                       {

                                           if (data[0] == "Pol" && data[2] == "/Pol")

                                           {

                                               st.pol = data[1];

                                           }

                                           else

                                           {

                                               if (data[0] == "Fakultet" && data[2] == "/Fakultet")

                                               {

                                                   st.fakultet = data[1];

                                               }

                                               else

                                               {

                                                   if (data[0] == "Gruppa" && data[2] == "/Gruppa")

                                                   {

                                                       st.gruppa = data[1];

                                                   }

                                               }

                                           }

                                       }

                                   }

                               }

                           }

                       }

                   }

                   temp = sr1.ReadLine();

               }

           }

           return st;

       }

Для упрощения ориентирования в объектно-ориентированном представлении результатов работы алгоритмов, приведём описание структуры классов с помощью UML диаграммы классов1.

1 В UML (англ. Unified Modeling Language – унифицированный язык моделирования) диаграмма классов является типом диаграммы статической структуры. Она описывает структуру системы, показывая её классы, их атрибуты и операторы, а также взаимосвязи этих классов.  

ЧАСТЬ III. ТЕСТИРОВАНИЕ

В силу специфики результатов работы программы автоматизация процесса её тестирования не представляется возможной. Для проверки работоспособности и устойчивости был проведен ряд тестов, позволяющий оценить корректность выполнения каждой операции в количестве пяти штук на каждую. При совершении пользователем действий, не предусмотренных программой, выводятся соответствующие сообщения с указанием причины ошибки.

В ходе тестирования необрабатываемых ошибок выявлено не было.


ЗАКЛЮЧЕНИЕ

       В наше время компьютеры все глубже проникают в различные отрасти , и возникает необходимость хранения информации в базах данных, но не всегда существует возможность прямого доступа к базе. Поэтому, наиболее оптимальным решением при использовании баз данных, не требующих работы в реальном времени, является накапливание информации, до тех пор, пока не появится возможность их непосредственного занесения в базу. В качестве «накопителя», впоследствии именуемого буфером,  удобно использовать файл, в котором данные будут представлены в виде XML-структуры. Так же необходимо предусмотреть возможность редактирования хранящейся информации.

В своей работе мы представили программу на языке С#, позволяющую производить добавление информации фиксированной структуры в XML файл, ее редактирование, удаление и интерпретацию в SQL-запросы.

Список литературы.

  1.  Ахо Альфред В., Лам Моника С., Сети Рави, Ульман Джеффри Д. Компиляторы: принципы, технологии и инструментарий, 2-е изд. : Пер. с англ. – М. : ООО «И. Д. Вильямс», 2008 – 1184 с. : ил. – Парал. тит. англ.

  1.  


 

А также другие работы, которые могут Вас заинтересовать

37008. Робота із утилітою SiSoftware Sandra 1.59 MB
  SiSoftwre Sndr розроблена для роботи в ОС Windows 32. Запускаємо програму SiSoftwre Sndr. Ознайомлюймось з меню програми SiSoftwre Sndr.
37009. Файлова система NTFS 1.45 MB
  Ім’я робочої групи домену в який входить комп’ютер MSHOME Ім’я користувача dmin Характеристики комп’ютера: Процесор 1.6GHz Оперативна пам'ять 512Mб Об’єм жорсткого диска 80Gb Моделі мережевих пристроїв внутрішніх і зовнішніх Reltek RTL8139 810x Fmily Fst Ethernet NIC 10 100 mb s Наявність локальної мережі Ні Наявність глобальної мережі Так Операційна система Microsoft Windows XP Порядок виконання роботи: 1.txt рис1 Рис 1 1.
37010. Створення консольних додатків. Обробка розгалужених обчислювальних процесів на мові програмування C# 31.5 KB
  Індивідуальні завдання. Дано порядковий номер факультету вивести на екран його назву. Дан порядковый номер месяца вывести на экран количество месяцев оставшихся до конца года. Дан порядковый номер дня месяца вывести на экран количество дней оставшихся до конца месяца.
37011. Команди переходів 142 KB
  Теоретична частина Команди цієї групи дозволяють міняти послідовність виконання команд програми. Команди переходів і виклику підпрограм є однією із складових процесу прийняття рішень. Команди переходів і виклику підпрограм провіряють значення розрядів регістра ознак і визначають слідуючий крок виконання програми в залежності від результату провірки.
37012. Команди виклику підпрограм і повернення з підпрограм 194 KB
  Коли здійснюється звернення до підпрограми то на початку виконання вона реалізує запам’ятовування поточного значення лічильника команд точка повернення. Коли виконання підпрограми закінчується то за допомогою команди повернення мікропроцесору вказується що початкове значення лічильника команд потрібно взяти з пам’яті. Для запам’ятовування точки повернення використовується стек куди записується адреса команди слідуюча за адресою команди виклику підпрограми. Безумовний виклик підпрограми При виконанні даної команди виклик підпрограми...
37013. НЕПРЯМЕ ВИМІРЮВАННЯ ОПОРУ РЕЗИСТОРА З ВИКОРИСТАННЯМ АМПЕРМЕТРА І ВОЛЬТМЕТРА 54 KB
  Схема підключення амперметра і вольтметра при вимірюванні опору; а метод вольтметра б метод амперметра. Вимірювальний опір визначається із формули: Rx = U U Ix = U Ixr Ix 1 Таким чином чим більший опір амперметра тим більша похибка вимірювання. Точність вимірювання при цьому методі буде визначатись сумою похибок амперметра і вольтметра.
37014. Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт 234 KB
  Таким чином відрізняють три головних сегмента програми яким відповідають сегментні регістри процесора типу INTEL 8086: CS code segment тобто сегмент інструкцій програми; DS dt segment тобто сегмент даних які визначені користувачем; SS stck segment тобто сегмент стеку. Регістривказівники РВ IP interrupt point – адреса за якою на даний час припинено виконання програми або лічильник команд. Цей регістр безпосередньо зв'язаний з арифметикологічним пристроєм АЛП мікропроцесора який реалізує виконання команд програми на...