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

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

asm / lab03_listing.textile

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Cannot retrieve contributors at this time
207 lines (140 sloc) 21.4 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

Лабораторная работа №3. Работа с файлом листинга

Краткие теоретические сведения

Права доступа к файлам

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

Что такое листинг? Разбор листинга на Амазон

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

Набор прав доступа задается тройками битов и состоит из прав на чтение, запись и исполнение файла. В символьном представлении он выглядит как строка rwx , где вместо любого символа может стоять дефис. Буква означает наличие права (установлен в единицу второй бит триады r — чтение, первый бит w — запись, нулевой бит х — исполнение), а дефис означает отсутствие права (нулевое значение соответствующего бита). Очевидно, что эти три бита могут быть записаны еще и как восьмеричное число. Так, права доступа r-х (чтение и исполнение без записи) понимаются как три двоичные цифры 101 или как восьмеричная цифра 5. Численное представление прав доступа называется абсолютным, или двоичной маской.

Полная строка прав доступа в символьном представлении устроена так:

В абсолютном представлении права владельца являются старшей цифрой восьмеричного числа, права группы — средней
и права остальных — младшей. Так, права rwxr-x—x выглядят как двоичное число 111 101 001, или восьмеричное 751.

Команда изменения прав доступа chmod понимает как абсолютное, так и символьное указание прав.

Свойства (атрибуты) файлов и каталогов можно вывести на терминал с помощью команды ls с ключом -l :

$ls -I /home/debugger/README -rwxr-xr— 1 debugger users 0 Feb 14 19:08 /home/debugger/README

Назначим файлу /home/debugger/README права rw-r , то есть разрешим себе чтение и запись, группе только чтение, остальным пользователям — ничего:

$cd ~ # переход в свой домашний каталог $chmod 640 README # 110 100 000 == 640 $ls -1 README -rw-r 1 debugger users 0 Feb 14 19:08 /home/debugger/README

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

Что такое Листинг на Amazon? Из чего состоит Листинг? Бизнес Онлайн, Торговля на Амазон


$chmod go+x README $ls -1 README -rw-r-x—x 1 debugger users 0 Feb 14 19:08 /home/debugger/README

Формат символьного режима:

Возможные значения аргументов команды представлены в таблице:

u g о а + – = r w x s t u g о Говорим компилятору, что код 32-битный 2 section .data 3 00000000 48656C6C6F20776F72- hello: db ‘Hello world!’,10 4 00000009 6C64210A 5 helloLen: equ $-hello ; Длина строки 6 7 section .text 8 global _start 9 ; чтобы линкер смог метку найти и сделать точкой входа в программу. 10 11 start: 12 00000000 B804000000 mov eax,4 ; Системный вызов для записи (sys_write) 13 00000005 BB01000000 mov ebx,1 ; Описатель файла 1 — стандартный вывод 14 0000000A B9[00000000] mov ecx,hello ; Адрес строки hello в ecx 15 0000000F BA0D000000 mov edx,helloLen ; helloLen — это константа 16 ; mov edx,[helloLen] для получения действительного значения 17 00000014 CD80 int 80h ; Вызов ядра 18 19 00000016 B801000000 mov eax,1 ; Системный вызов для выхода (sys_exit) 20 0000001B BB00000000 mov ebx,0 ; Выход с кодом возврата 0 (без ошибок) 21 00000020 CD80 int 80h ; Вывозов ядра

Читайте также:
Программа ани диск что это такое

Строки в первой части листинга имеют следующую структуру (рис. [pic:l3]):

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

  • «Номер строки» представляет собой номер строки файла листинга. Номера строк особенно полезны при работе с перекрестными ссылками. Учтите, что номера строк в поле «номер строки» — это не номера строк исходного модуля. Например, при расширении макрокоманды или включении файла отсчет строк продолжается, хотя текущая строка в исходном файле остается той же. Чтобы перевести номер строки (сгенерированный, например, при создании перекрестных ссылок), вы должны найти соответствующую строку в листинге, а затем (по номеру или на глаз) найти ее в исходном файле.
  • «Адрес» — это смещение машинного кода от начала текущего сегмента.
  • «Машинный код» представляет собой действительную последовательность шестнадцатеричного значения байт и слов, которые ассемблируются из соответствующей исходной строки программы. Например, инструкция int 80h начинается по смещению 00000014 в сегменте кода. Информация справа от данной инструкции — это машинный код, в который ассемблируется инструкция, то есть инструкция int 80h ассемблируется в CD80 (в шестнадцатеричном представлении). CD80 — это инструкция на машинном языке, вызывающая прерывание ядра.
  • Наконец, поле «исходный текст программы» — это просто строка исходной программы вместе с комментариями. Некоторые строки на языке ассемблера (например, строки, содержащие только комментарии) не генерируют никакого машинного кода, и поля «смещение» и «исходный текст программы» в таких строках отсутствуют. Тем не менее номер строки им присваивается.

Описание инструкции вычитания

Схема команды целочисленного вычитания sub выглядит следующим образом:

sub операнд_1, операнд_2

работы команды включает два действия:

  • выполнить вычитание: операнд_1 = операнд_1 — операнд_2 ;
  • установить флаги.

Флаги, устанавливаемые командой, подробнее рассматриваются ниже.

Команды условного перехода

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

Мнемоника перехода (от одной до трёх букв) связана со значением анализируемых флагов (или регистра CX), либо со способом формирования этих флагов. Чаще всего программисты формируют флаги, проверяя отношение между двумя операндами op1 op2 , для чего выполняется команда вычитания или команда сравнения. Команда сравнения имеет мнемонический код операции cmp и такой же формат, как и команда вычитания:

Она и выполняется точно так же, как команда вычитания — за исключением того, что разность не записывается на место первого операнда. Таким образом, единственным результатом команды сравнения является формирование флагов, которые устанавливаются так же, как и при выполнении команды вычитания.

Программист по своему желанию может трактовать результат вычитания (сравнения) как производимый над знаковыми или же беззнаковыми числами. От этой трактовки может зависеть, будет ли один операнд считаться большим, чем другой, или же нет. Так, например, рассмотрим два коротких целых числа 0FFh и 01h — с учетом того, что отрицательные числа представляются процессором в дополнительном коде. Если числа знаковые, 0FFh = -1 < 01h = 1, а если беззнаковые, то 0FFh = 255 >01h = 1.

Читайте также:
Wolfenstein что это за программа

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

Мнемокод условие перехода
Флаги Смысл
ja/jnbe CF or ZF=0 выше /не ниже и не равно
jae/jnb CF=0 выше или равно/не ниже
jb/jnae CF=1 ниже/не выше и не равно
jbe/jna CF or ZF=1 ниже или равно/не выше
je/jz ZF=1 равно/нуль
jne/jnz ZF=0 не равно/не нуль
jg/jnle (SF xor OF) or ZF=0 больше/не меньше и не равно
jge/jnl SF xor OF=0 больше или равно/не меньше
jl/jnge (SF xor OF)=1 меньше/не больше и не равно
jle/jng ((SF xor OF) or ZF)=1 меньше или равно/не больше
jp/jpe PF=1 есть паритет/паритет четный
jnp/jpo PF=0 нет паритета/паритет нечетный
jc CF=1 перенос
jnc CF=0 нет переноса
jo OF=1 переполнение
jno OF=0 нет переполнения
jns SF=0 знак +
js SF=1 знак —

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

Примечание: термины «выше» («a» от англ. «above») и «ниже» («b» от англ. «below»)применимы для сравнения беззнаковых величин (адресов), а термины «больше» («g» от англ. «greater») и «меньше» («l» от англ. «lower») используются при учете знака числа. Таким образом, мнемонику инструкции ja/jnbe можно расшифровать как «jump (переход) if above (если выше) / if not below equal (если не меньше или равно)».

Задание для выполнения

  1. Написать программу, работающую по следующему алгоритму:
    • вывести на экран запрос о времени дня, например, «Полдень прошел?»;
    • принять с клавиатуры ответ (Y/N);
    • если было введено N выдать сообщение «Доброе утро», в противном слу- чае — «Добрый день».
    • Получить файл листинга и внимательно ознакомиться с его форматом и содержимым.
    • В любой инструкции с двумя операндами удалить один операнд и проассемблировать программу с получением файла листинга. Какие выходные файлы создаются в этом случае? Что добавляется в листинге?
    • Подробно объяснить содержимое трех строк файла листинга по выбору.
    • Получить имя владельца и числовой код прав доступа для файлов, сгенерированных в результате выполнения работы. Расшифровать права доступа.
    • Изменить права доступа к исполняемому файлу, запретив его выполнение. Попытаться выполнить файл.
    • Разрешить выполнение исходного текста программы как исполняемого файла. Попытаться выполнить его и объяснить результат.
    1. Каким образом в Unix-подобных ОС определяются права доступа к файлу?
    2. Как ОС определяет, является ли файл исполняемым? Как регулировать права на чтение и запись?
    3. Как разграничить права доступа для различных категорий пользователей?
    4. Для чего нужен файл листинга? В чем его отличие от текста программы?
    5. Каков формат файла листинга? Из каких частей он состоит? Каково назначение первой части?
    6. Как в программах на ассемблере можно выполнить ветвление?

    Источник: github.com

    Подскажите, пожалуйста, что такое листинг программы?

    Подскажите пожалуйста, что такое SingleInstane?
    Подскажите пожалуйста, что такое SingleInstane?

    Подскажите пожалуйста что такое функциональное значение?
    Есть некая функция. Если одним из аргументов этой функции является другая функция, то это.

    подскажите пожалуйста что это такое яша выдает?
    http://yandex.ru/yandsearch?p=2https://www.cyberforum.ru/pascalabc/thread384554.html» target=»_blank»]www.cyberforum.ru[/mask_link]

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

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

    Читайте также:
    Программа cisco webex что это

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

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

    l левый столбец содержит шестнадцатеричное значение смещения адреса команды (счетчик команд — IP) от начала сегмента;

    l правый столбец содержит операторы и псевдооператоры ассемблера (команды и директивы программы);

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

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

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

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

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

    stacksg segment para stack ‘Stack’

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

    datasg segment para ‘Data’

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

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

    Источник: studopedia.ru

    Практикум

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

    Если задан атрибут number, на данный листинг будут разрешены ссылки из других лекций курса. Номер отображается сразу после листинга. В зависимости от значения атрибута type , листинг помечается словом «Листинг» ( type=»listing» ) или «Пример» ( type=»example» ). Если задан атрибут title , его значение отображается там же. Текст листинга записывается «как есть», т.е. в теле листинга учитываются все пробелы и переводы строк.

    int main()

    Данный текст может быть отображен в виде:

    int main()
    Листинг 1.1. Простейшая программа на C

    Атрибут visible отвечает за отображение листинга на странице лекции. Если visible=»no» , листинг на странице не отображается, выводится только его название и ссылка , позволяющая открыть текст листинга в отдельном окне.

    Списки

    Для обозначения упорядоченных и неупорядоченных списков используется контейнер list :

    В зависимости от значения атрибута type список является упорядоченным ( type=»number» ) или неупорядоченным ( type=»none» , необязательно). Позиции упорядоченных списков нумеруются, в неупорядоченных списках каждая позиция помечается пулькой (точкой).

    Данный текст может быть отображен в виде:

    Данный текст может быть отображен в виде:

    Цитаты

    Блок текста отмечается как цитата при помощи тега . Если цитата содержит несколько абзацев текста, все абзацы выделяются в 1 тег . Примеры:

    Было бы ошибкой думать.

    Первый абзац цитаты

    Второй абзац цитаты

    Цитаты также можно использовать для отображения эпиграфа.

    Мсье Дюпюи [учитель математики] произносил напыщенные фразы об этом предмете, но ни разу не сказал этих простых слов: это разделение труда, которое, как и всякое другое разделение труда производит чудеса и позволяет уму сконцентрировать все свои силы только на одной стороне объектов, только на одном из их качеств.

    Вставки

    Блок текста отмечается как вставка при помощи тега inset > . У вставки может быть необязательный атрибут icon (предполагается картинка в левом верхнем углу вставки для акцентирования внимания). Значение атрибута icon – URL картинки. Примеры:

    Было бы ошибкой думать.

    Первый абзац вставки

    Второй абзац вставки

    Источник: intuit.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru