...

Листинг программы что это такое

Листинг основной программы. Листинг программы Что такое листинг программы

Листинг основной программы. Листинг программы Что такое листинг программы

Share on Facebook Share
Share on Twitter Tweet
Share on Google Plus Share
Share on Pinterest Share
Send email Mail

При компиляции программы можно задать параметр «l» (listing):

Тогда кроме файла с объектным кодом sum. objбудет создан файл с листингомsum. lst:

  • 1 ;sum. asm – программа, вычисляющая S=A+B
  • 2 0000 data segment
  • 3 0000 0001 a dw 01h
  • 4 0002 0002 b dw 02h
  • 5 0004 . s dw ?
  • 6 0006 data ends
  • 7 0000 code segment
  • 8 assume ds:data
  • 9 0000 BA 0000s begin: mov dx, data
  • 10 0003 8E DA mov ds, dx
  • 11 0005 A1 0000r mov ax, a
  • 12 0008 03 06 0002r add ax, b
  • 13 000C A3 0004r mov s, ax
  • 14 000F B8 4C00 mov ax, 4C00h
  • 15 0012 CD 21 int 21h
  • 16 0014 codeends
  • 17 endbegin

Листинг — это таблица, содержащая четыре столбца:

Адрес внутри сегмента, т. е. от его начала (смещение).

Содержимое памяти по данным адресам. В сегменте данных — это значения переменных, в сегменте кода — это машинные коды команд.

Комментарии в листинге также сохраняются, просто здесь они для экономии места опущены.

Из листинга видно, что командам процессора соответствуют только строки 9-15. Остальные строки соответствуют т. н. директивам ассемблера.

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

команды — информация для процессора;

директивы — информация для самого ассемблера, как скомпилировать программу: как перевести команды на машинный язык и как разместить данные.

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

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

segment — директива объявления начала сегмента;

dw (define word) — директива определения данных (выделения и инициализации области памяти) размером 16 бит;

ends (end segment) — директива объявления конца сегмента;

assume — директива назначения сегменту сегментного регистра;

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

Есть также следующие директивы определения данных:

db (define byte) — директива определения области памяти в 8 бит;

dd (define double word) — директива определения области памяти в 32 бита.

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

386 — используются несистемные команды процессора i80386;

386p- используются все команды процессораi80386, в том числе системные.

Строки 3-5 содержат директивы определения переменных A, BиS. В совокупности строки 3-5 и 9-15 содержат информацию для процессора — программу, включающую команды и данные. Они непосредственно отображаются на память компьютера.

Var n1, n2: Longint;

Function Quantity(x: Longint): Byte;

Var k: Byte;

Writeln(«Введите два числа»);

k1:=Quantity(n1);

k2:= Quantity(n2);

Writeln(«Одинаковое количество цифр»)

Writeln(«В первом числе цифр больше»)

Writeln(«Во втором числе цифр больше»);

Лекция № 17. Нетрадиционное использование пользовательских подпрограмм. Рекурсия

В ряде алгоритмов решения задач требуется вызов подпрограммы из раздела операторов той же самой подпрограммы.

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

if keypressed then halt; — для прерывания зависания, если таковое произойдет. Keypressed – это функция, возвращающая результат true, если на клавиатуре была нажата клавиша, и false – в противном случае.

Пример 1. Рассмотрим программу вычисления элементов ряда Фибоначчи с использованием рекурсивной процедуры.

procedure fibon(n,fn1,fn:integer);

if n > 0 then

writeln(fn1+fn);

fibon(n-1,fn,fn1+fn);

var n,a,b: integer;

write(«введите число элементов ряда Фибоначчи: «);

write(«. следующими за двумя данными числами: «);

Пример 2. Программа, которая выводит на экран цифры целого положительного числа в обратном порядке.

procedure revers(n:integer);

If keypressed then halt;

Write(n mod 10);

if (n div 10) <> 0 then

Revers (n div 10);

// Вывод строки в стандартный поток вывода

cout Share on Facebook Share

Листинг (программирование)

Исхо́дный код (также исхо́дный текст) — текст компьютерной программы на каком-либо языке программирования. В обобщённом смысле — любые входные данные для транслятора.

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

Назначение

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

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

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

Программисты часто переносят исходный код из одного проекта в другой, что носит название повторного использования кода (Software reusability).

Исходный код — важнейший компонент для процесса портирования программного обеспечения на другие платформы. Без исходного кода какой-либо части ПО, портирование либо слишком сложно, либо вообще невозможно.

Организация

Исходный код некоторой части ПО (модуля, компонента) может состоять из одного или нескольких файлов. Код программы не обязательно пишется только на одном языке программирования. Например, часто программы, написанные на языке Си, с целью оптимизации, содержат вставки кода на языке ассемблера. Также возможны ситуации, когда некоторые компоненты или части программы пишутся на различных языках, с последующей сборкой в единый исполняемый модуль при помощи технологии известной как компоновка библиотек (library linking).

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

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

Качество

В отличие от человека, для компьютера нет «хорошо написанного» или «плохо написанного» кода. Но то, как написан код, может сильно влиять на процесс сопровождения ПО. О качестве исходного кода можно судить по следующим параметрам:

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

Неисполняемый исходный код

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

В таких случаях исходным кодом считается форма данной работы, предпочтительная для её редактирования. В лицензиях, предназначенных не только для ПО, она также может называться версией в «прозрачном формате». Это может быть, например:

  • для файла, сжатого с потерей данных — версия без потерь;
  • для рендеравекторного изображения или трёхмерной модели — соответственно, векторная версия и модель;
  • для изображения текста — такой же текст в текстовом формате;
  • для музыки — файл во внутреннем формате музыкального редактора;
  • и наконец, сам файл, если он удовлетворяет указанным условиям, либо если более удобной версии просто не существовало.

См. также

  • Рефакторинг
  • Стандарт оформления кода
  • Свободное программное обеспечение
  • Эзотерические языки программирования
  • Пример: Программа Hello world

Ссылки

Wikimedia Foundation . 2010 .

Основные сведения о листинге и его структуре

Листинг (распечатка) программы на ассемблере используется как при создании ассемблерных программ, так и в качестве источника информации для квалифицированных программистов при отладке и оптимизации программ, написанных на языках высокого уровня. Ни один другой компилятор и его листинг не дает программисту такого количества полезной технической информации, как ассемблер. Ведь одна из основных целей использования языков высокого уровня — как раз желание избежать не очень существенных технических подробностей. Но если программист хочет разобраться с подробностями созданной программы, то большинство отладчиков могут распечатать объектный эквивалент созданной программы на языке ассемблера. Эти распечатки позволяют программисту оценить качество программы и являются весьма полезными при ее оптимизации.

Листинг состоит из 2-х частей: из листинга программы и сводной информации о сегментах и идентификаторах программы.

Листинг программы имеет три столбца, в которых отображаются команды исходной ассемблерной программы и соответствующие им объектные коды:

  • левый столбец содержит шестнадцатеричное значение смещения адреса команды (счетчик команд — IP) от начала сегмента;
  • правый столбец содержит операторы и псевдооператоры ассемблера (команды и директивы программы);
  • в средней части размещены коды: для сегмента стека и сегмента данных — числа, запоминаемые в соответствующих ячейках памяти; для сегмента команд это коды машинных команд МП, соответствующих операторам ассемблера.

Сводная информация о сегментах и идентификаторах дает подробную их характеристику.

В конце листинга приводятся сообщения об ошибках в программе.

Ниже приводится алгоритм (рис. 18.2), программа вычисления квадратного корня числа n и листинг этой программы.

TITLE SQR.ASM ; Извлечение корня квадратного

stacksg segment para stack ‘Stack’

; назначить область памяти для стека

datasg segment para ‘Data’

vv db ‘введите аргумент n (до 64 тыс.) $’

viv db 10,13,’значение корня = $’

При подготовке материала использовались источники:
https://cs-neo.ru/listing-osnovnoi-programmy-listing-programmy-chto-takoe-listing/
https://dic.academic.ru/dic.nsf/ruwiki/1007751
https://studfile.net/preview/7620707/page:16/

Оцените статью