Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Передача параметров в стеке





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

push parameter1; поместить параметр в стек

push parameter2

call procedure

add sp,4; освободить стек от параметров

[...]

procedure proc near

push bp

mov bp,sp

(команды, которые могут использовать стек)

mov ax,[bp+4]; считать параметр 2.

; Его адрес в сегменте стека ВР + 4, потому что при выполнении

; команды CALL в стек поместили адрес возврата - 2 байта для процедуры

; типа NEAR (или 4 - для FAR), а потом еще и ВР - 2 байта

mov bx,[bp+6]; считать параметр 1

(остальные команды)

рор bp

ret

procedure endp

Параметры в стеке, адрес возврата и старое значение ВР вместе называются активационной записью функции.

Проблемы

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

Также стоит отметить, что некоторые регистры часто имеют системное назначение и их использование ограничено.

 

17. Предложение языка ассемблера: директивы.

Директивы являются указаниями Ассемблеру о том, как проводить ассемблирование. Директив м.б. великое множество. В 1-ом приближении мы рассмотрим лишь несколько практически обязательных директивы (мнемоники директив везде - условные, в конкретных Ассемблерах те же по смыслу директивы могут иметь другие мнемоники).

EQU Определение имени. Перед этой директивой обязательно стоит имя. Операнд этой директивы определяет значение имени. Операндом может быть и выражение, вычисляемое при ассемблировании. Имя может определяться и через другое имя, определенное выше. Как правило, не допускается определение имени со ссылкой вперед.
DD Определение данных. Выделяются ячейки памяти и в них записываются значения, определяемые операндом директивы. Перед директивой может стоять метка/имя. Как правило, одной директивой могут определяться несколько объектов данных. В конкретных Ассемблерах может существовать либо одна общая директива DD, тогда тип данных, размещаемых в памяти определяется формой записи операндов, либо несколько подобных директив - для разных типов данных. В отличие от других,, эта директива приводит непосредственной к генерации некоторого выходного кода - значений данных.
BSS Резервирование памяти. Выделяются ячейки памяти, но значения в них не записываются. Объем выделяемой памяти определяется операндом директивы. Перед директивой может стоять метка/имя.
END Конец программного модуля. Указание Ассемблеру на прекращение трансляции. Обычно в модуле, являющемся главным (main) операндом этой директивы является имя точки, на которую передается управление при начале выполнения программы. Во всех других модулях эта директива употребляется без операндов.

 

18. Предложения языка ассемблера: команды.

Операнды команд.
Константы - могут представлять непосредственные операнды или абсолютные адреса памяти. Применяются 10-ные, 8-ные, 16-ные, 2-ные, символьные константы.
Непосредственные операнды - записываются в сам код команды.
Имена - адреса ячеек памяти. При трансляции Ассемблер преобразует имена в адреса. Способ преобразования имени в значение зависит от принятых способов адресации. Как правило, в основным способом адресации в машинных языках является адресация относительная: адрес в команде задается в виде смещения относительно какого-то базового адреса, значение которого содержится в некотором базовом регистре. В качестве базового могут применяться либо специальные регистры (DS, CS в Intel) или регистры общего назначения (S/390).
Литералы - записанные в особой форме константы. Концептуально литералы - те же имена. При появлении в программе литерала Ассемблер выделяет ячейку памяти и записывает в нее заданную в литерале константу. Далее все появления этого литерала Ассемблер заменяет на обращения по адресу этой ячейки. Таким образом, литеральные константы, хранятся в памяти в одном экземпляре, независимо от числа обращений к ним.
Специальный синтаксис - явное описание способа адресации (например, указание базового регистра и смещения и т.п.).

 

19. Предложения языка ассемблера: коментарии.

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

 

20. Представление данных в IBM PC: алфавитно-цифровые данные

Любая информация (числа, команды, алфавитно-цифровые записи и т. п.) представляется в компьютере в виде двоичных кодов. Отдельные элементы двоичного кода, принимающие значения 0 или 1, называются разрядами или битами. В старых компьютерах, рассчитанных на вычислительные задачи, минимальной единицей информации, доступной для обработки, была ячейка. Количество разрядов в ячейке было ориентировано на представление чисел и было различным в разных компьютерах (24 бита, 48 бит и т.д.). Однако такой большой размер ячеек был неудобен для представления символов, поскольку для представления символьной информации достаточно 5-8 байт. Это дает возможность представить от 32 до 256 символов. Поэтому минимальной единицей информации, обрабатываемой в современном компьютере, является байт, состоящий из восьми двоичных разрядов (битов). Каждый байт, расположенный в памяти компьютера, имеет свой адрес, который определяет его местонахождение и задается соответствующим кодом. Адреса памяти начинаются с нуля для первого байта и последовательно возрастают на единицу для каждого последующего. Производными единицами от байта являются килобайт (210 байт) – сокращение Кбайт или Кб, мегабайт (220 байт) – сокращение Мбайт или Мб, гигабайт (230 байт) – сокращение Гбайт или Гб и терабайт (240 байт) – сокращение Тбайт или Тб. Для представления чисел используются один или несколько последовательно расположенных байтов. Группы байтов образуют двоичные слова, которые, в свою очередь, могут быть как фиксированной, так и переменной длины. Форматы данных фиксированной длины (полуслово, слово и двойное слово) состоят соответственно из одного, двух и четырех последовательно расположенных байтов. Обращение к этим данным производится по адресу крайнего левого байта формата, который для слова должен быть кратен числу 2, а для двойного слова – числу 4. Формат данных переменной длины состоит из группы последовательно расположенных байтов от 1 до 256. Адресация таких данных производится, как и в форматах фиксированной длины, по адресу самого левого байта. В зависимости от характера информации используются форматы представления данных как фиксированной, так и переменной длины. Так, в форматах данных фиксированной длины обычно представляются двоичные числа, команды и некоторые логические данные, а в форматах данных переменной длины – десятичные числа, алфавитно-цифровая и некоторая логическая информация. В современных компьютерах применяются две формы представления чисел: с фиксированной точкой (запятой) и с плавающей точкой (запятой). Эти формы, кроме того, называются соответственно естественной и полулогарифмической. При представлении чисел с фиксированной точкой положение точки фиксируется в определенном месте относительно разрядов числа. В первых компьютерах точка фиксировалась перед старшим разрядом числа, поэтому представленные числа по абсолютной величине были меньше единицы. В современных компьютерах точку фиксируют справа от самого младшего разряда и поэтому могут быть представлены только целые числа. При этом используются два варианта представления целых чисел: со знаком и без знака. Для числа со знаком крайний слева разряд отводится под знак числа. В этом разряде записывается нуль для положительных чисел и единица – для отрицательных чисел. Числа без знака занимают все разряды числа, т.е. числа могут быть только положительными. Нумерация разрядов числа обычно ведется справа налево. В компьютерах числа с фиксированной точкой имеют три основных формата – один байт (полуслово), 16-разрядное слово (короткий формат) и 32-разрядное двойное слово (длинный формат).

21 Представление данных в IBM PC: Вещественные данные

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

Число́ одина́рной то́чности (англ. single precision, single) — широко распространенный компьютерный формат представления вещественных чисел, занимающий в памяти 32 бита (4 байта). Как правило, под ним понимают формат числа с плавающей запятой стандарта IEEE 754.

Числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр в диапазоне от 10^{-38} до примерно 10^{38}.

В современных компьютерах вычисления с числами с плавающей запятой поддерживаются аппаратным сопроцессором (FPU — англ. floating point unit). Однако во многих вычислительных архитектурах нет аппаратной поддержки чисел с плавающей запятой и тогда работа с ними осуществляется программно.

Число́ двойно́й то́чности (Double precision, Double) — компьютерный формат представления числа с плавающей запятой, занимающий в памяти 64 бита, или 8 байт. Как правило, обозначает числа с плавающей запятой стандарта IEEE 754.

Числа с плавающей запятой (двойной/одинарной/четверной точности) поддерживаются сопроцессором (в 80386 выполнен как отдельный модуль, начиная с 80486 является встроенным в главный процессор. Сопроцессор, хотя он сейчас и является частью главного процессора, принято называть FPU — Floating Point Unit, буквально Модуль Плавающей Запятой). В компьютерах, которые имеют 64-разрядные числа с плавающей запятой, большинство чисел хранятся в двойной точности, поскольку использование чисел одинарной точности обеспечивает почти такую же производительность. Но все вычисления в FPU осуществляются в 80-битном (расширенном, extended) представлении.

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

Числа двойной точности с плавающей запятой обеспечивают точность в 15—17 десятичных цифр и масштабы в диапазоне примерно от 10−308 до 10308

22 Представление данных в IBM PC: Двоично-десятичных чисел

двоично-десятичный формат (binary-coded decimal, BCD), используемый в ряде прикладных областей. В таком формате выдают данные некоторые измерительные приборы; он же используется КМОП-часами реального времени компьютеров IBM PC для хранения информации о текущем времени. В МП 86 предусмотрен ряд команд для обработки таких чисел.

Двоично-десятичный формат существует в двух разновидностях: упакованный и распакованный. В первом случае в байте записывается двухразрядное десятичное число от 00 до 99. Каждая цифра числа занимает половину байта и хранится в двоичной форме. Из рис. 4 можно заметить, что для записи в байт десятичного числа в двоично-десятичном формате достаточно сопроводить записываемое десятичное число символом h.

 

Рис. 4 Упакованный двоично-десятичный формат

В машинном слове или в 16-разрядном регистре можно хранить в двоично-десятичном формате четырехразрядные десятичные числа от 0000 до 9999 (рис.5).

 

Рис. 5 Запись десятичного числа 9604 в слове

Распакованный формат отличается от упакованного тем, что в каждом байте записывается лишь одна десятичная цифра (по-прежнему в двоичной форме). В этом случае в слове можно записать десятичные числа от 00 до 99 (см. рис. 6)

 

Рис. 6 Запись десятичного числа 98 в распакованном виде

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

23 Представление данных в IBM PC: Целые числа

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

Date: 2016-05-24; view: 827; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию