Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.

Презентация:



Advertisements
Похожие презентации
Язык ASSEMBLER Команды пересылки данных Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Advertisements

Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Числа со знаком и дополнительный код Синтаксис FASM Для записи отрицательного числа в программе на ассемблере используется символ -, например: x db -5.
Адресация Адресация Уточним понятие "адресация". Адресация (по Э. Таненбауму) – процесс определения местоположения операндов команды МП (их адреса). Адрес.
Директивы сегментации. Упрощенные директивы сегментации. Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Уровни организации ЭВМ. Машинный уровень Лекция 5.
Регистры общего назначения – сумматор, регистр данных, адресный регистр и т.д. Арифметико- логическое устройство Устройство управления
Микропроцессорные системы Программы и инструменты Это описание предполагает, что транслятор wavrasm правильно установлен на компьютер, на котором происходит.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 3 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size.
Генерация кода Преобразование дерева операций в код на языке ассемблера Ассемблер процессоров типа Intel 80x86 Code – функция перевода узла в команды ассемблера.
Архитектура ЭВМ Практика 2. Основы ассемблера..
Арифметическиеи логические команды языка Ассемблер. Битовые команды.
Архитектура ЭВМ Практика 5. Программирование циклов.
Intel архитектура IA16 Основа большинства современных компьютеров.
Микропроцессоры и микропроцессорные системы. 1. Пересылка данных MOV приемник, источник- Пересылка данных Базовая команда пересылки данных. Копирует содержимое.
Лекция 6. Способы адресации в микропроцессорных системах.
Тема 2. Способы адресации и система команд МП. Непосредственная адресация Суть способа. Требуемые данные (#data ̶ непосредственный операнд, константа)
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Программирование на языке ассемблер (Assembler)
Транксрипт:

Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.

Пример программы

Формат команды ассемблера Любая команда на языке ассемблера соответствует следующему формату: [метка] [команда/директива] [операнды][;комментарии] Примеры: СтрокаМетка Команда/ директива ОперандыКомментарии lbl1: mov AX,BX ;комментlbl1movAX, BXкоммент sum DW 3 ;сохранить 3 в sumsumDW3сохранить 3 в sum begin:begin-нет- add ax,[_a]-нет-addax, [_a]-нет- ;прибавить к AX значение\ по адресу [_a] -нет- прибавить к AX значение по адресу [_a]

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

Примеры меток В нашей программе используются следующие метки: x,y,z,u,w,v,begin.

Команды и директивы Команды и директивы определяют действия, которые должны быть выполнены в строке с ассемблерным кодом. Мнемоника каждой команды (int, mov, add) позволяет определить, какой машинный код необходимо загрузить в микропроцессор для выполнения. Если в строке указана директива, то генерация машинных кодов не производится.

Примеры команд и директив В нашей программе используются следующие директивы:.MODEL,.STACK,.DATA,.CODE, DW. В нашей программе используются следующие команды: MOV, IMUL, SUB, CWD, IDIV, ADD, INT

Операнды Определяют непосредственные значения, регистры, фрагменты памяти и другие элементы, которыми манипулируют команды. Количество операндов однозначно определяется кодом команды: push ax – один операнд; mov ax, bx – два операнда.

Типы операндов Регистровые – задаются как имя_регистра или [имя_регистра]. имя_регистра – значение операнда хранится в указанном регистре. Например: push ax ;заносит в стек значение регистра AX [имя_регистра] – значение операнда хранится в памяти, адрес которой хранится в указанном регистре. Например: mov ax,[bx] ;сохранить в AX значение из памяти ;по адресу, хранящемуся в регистре BX

Типы операндов (2) Константы – неизменяемые значения: mov AX, 1000 Выражения – это формулы, которые после своего вычисления дают константы. В выражениях можно использовать различные арифметические (унарные и бинарные), сдвиговые, логические, и другие операторы. Метки – позволяют обращаться к нужному элементу памяти, продолжить выполнение программы с заданной строки и т.п.

Пример программы Вводные комментарии и директивы Область определения данных Область определения кода программы

Вводные директивы:.MODEL.MODEL – определение используемой модели памяти: tiny - код и данные вместе занимают 1 сегмент до 64 килобайт; small – код занимает 1 сегмент до 64 килобайт, данные занимают 1 сегмент до 64 килобайт; compact, medium, large, huge – для более больших программ.

Вводные директивы:.STACK.STACK – определение размера стека. Например,.STACK 100h определяет, что в программе будет использоваться стек размером 256 (100h) байт. После использования данной директивы, в регистр SS загружается сегментный адрес области стека, а в SP заносится значение 100h. Директива.STACK без параметра определяет размер стека равным 1024 (400h) байт.

Директива.DATA.DATA служит для задания начала сегмента данных программы. Адрес сегмента автоматически заносится в Поэтому, чтобы получить доступ к данным в сегменте.DATA необходимо занести в базовый сегментный регистр DS значение этого символа: mov mov DS, AX

Объявление данных Для объявления данных используются следующие директивы: DB – 1 байт для данного DW – 2 байта (слово) для данного или смещения в памяти; DD – 4 байта (двойное слово) для данного или адреса в памяти. DF, DP – 6-и байтовый указатель; DQ – 8 байт для данного DT – 10 байт для данного.

Объявление данных Типы данных: Числа десятичные – числа без суффикса или с суффиксом d ( 10, 128d ); двоичные – c суффиксом b ( 101b, 1101b ); восьмеричные –с суффиксом o или q ( 125o, 37q ); шестнадцатеричные – c суффиксом h и должны начинаться с цифры от 0 до 9 ( 0AAh, 553h ). Вещественные числа задаются с помощью директив DD, DQ, DT.

Объявление данных Типы данных: Символы Для получения ASCII-кода символа его надо заключить в одинарные ( ) или двойные ( ) кавычки. Например: my_byte DB D ;в выделенный байт записан ;ASCII-код символа D

Команда mov mov - это основная команда пересылки данных. Она реализует самые разнообразные варианты пересылки. Командой mov нельзя осуществить пересылку из одной области памяти в другую. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения. Например (y := x): mov ax,x mov y,ax mov,

Команда mov (продолжение) Нельзя загрузить в сегментный регистр значение непосредственно из памяти. Поэтому для выполнения такой загрузки нужно использовать промежуточный объект: mov mov ds,ax Нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр. Выполнить такую пересылку можно, используя в качестве промежуточных все те же регистры общего назначения. Вот пример инициализации регистра es значением из регистра ds: mov ax,ds mov es,ax

Другие команды пересылки данных xchg – команда обмена значений двух данных xchg, lea, Адрес lea – это команда для загрузки эффективного адреса источника в приёмник.

Классификация арифметических команд

Арифметические команды Двоичное сложение: inc - операция инкремента (+1); add, - сложение, результат сохраняется в ; adc, - сложение, с учетом флага переноса cf. Двоичное вычитание: dec - операция декремента (-1); sub, - вычитание, результат сохраняется в ; sbb, - вычитание, с учетом флага переноса cf.

Арифметические команды (2) Двоичное умножение: mul - операция умножения чисел без знака (только положительных): ax := al* или dx:ax := ax * imul - операция умножения чисел со знаком (старший бит – знаковый).

Арифметические команды (3) Двоичное деление: div - операция деления чисел без знака (только положительных): al := ax/ ah := или ax := dx/ax * dx := idiv - операция деления чисел со знаком (старший бит – знаковый);

Команды преобразования данных neg - изменение знака; cbw - операция преобразования байта al в слово ax с учетом знака: ax := 00h+al ;если AL >= 0 ax := FFh+al ;если AL < 0 cwd – преобразование слова ax в двойное слово dx:ax с учетом знака: dx:ax := 0000h+ax ;если AX >= 0 dx:ax := FFFFh+ax ;если AX < 0

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

Варианты (c 1 по 6) Вариант ВыражениеТест1Тест2 1 y = 1; w = 4; u = 3; v = 5; z = 2 y = 12; w = -2; u = 2; v = 3; z = y = 2; w = 3; u = 10; v = 5; z = 18 y = 2; w = 3; u = 10; v = -2; z = 18 3 y = 1; w = 4; u = 2; v = 5; z = 3 y = -2; w = 4; u = 2; v = 5; z = 3 4 y = 12; w = 4; u = 8; v = 2; z = 10 y = 12; w = 4; u = 8; v = 2; z = y = 10; w = 8; u = 4; v = 3; z = 2 y = 10; w = 40; u = 4; v = 3; z = 2 6 y = 5; w = 3; u = 2; v = 3; z = 1 y = 5; w = 3; u = -10; v = 3; z = 1

Варианты (c 7 по 12) Вариант ВыражениеТест1Тест2 7 y = 1; w = 5; u = 3; v = 4; z = 2 y = 1; w = -12; u = 3; v = 4; z = 2 8 y = 5; w = 1; u = 3; v = 2; z = 4 y = 15; w = 1; u = 3; v = 2; z = 4 9 y = 2; w = -1; u = 8; v = 5; z = 3 y = 2; w = -1; u = 8; v = 5; z = y = 8; w = 5; u = 4; v = 1; z = 2 y = 8; w = 15; u = 4; v = 1; z = 2 11 y = 12; w = 3; u = 2; v = -2; z = -10 y = 12; w = 3; u = 2; v = -2; z = y = 12; w = 30; u = 20; v = -20; z = -100 y = 12; w = 30; u = 20; v = -20; z = 100

Отчет должен содержать: 1.Номер варианта, условие задачи 2.Текст программы с комментариями. 3.Результат тестирования программы (значения исходных данных и полученные результаты в шестнадцатеричной и десятичной системе счисления).