Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основные команды целочисленной арифметики




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

МОДЕЛИ ПАМЯТИ

ОЗУ

ЛЕКЦИЯ 5

 

РЕГИСТР УКАЗАТЕЛЯ СТЕКА (SP->Stack Pointer)

Используется при работе со стеком при вызове подпрограммы.

РЕГИСТРЫ ИНДЕКСА

SI->Source Index

Используется в паре с регистром DS для работы над строками.

DI->Destination Index

Также используется для работы со строками,массивами использует регистр ES.

 

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

СЕГМЕНТНАЯ ОРГАНИЗАЦИЯ ПАМЯТИ

Начиная с первых моделей и кончая современными моделями в архитектуру Intel процессоров заложена идея сегментной организации памяти. Для 16разрядных процессоров размер сегмента не мог превышать 64 кб.

При загрузке выполняемой программы в памяти ОС инициализирует как минимум 3 сегментных регистра: CS->команды,DS->данные,SS->стек. Для выполняемой программы обязательно имеют сегмент.CODE (CS).

ТАБИЛЦА

Tiny используется для создания программы в виде.СОМ файла.

Остальные модели используется для создания.ЕХЕ файлов.

Модель Huge преодолевает ограничение длины сегмента 64 кб.

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

1. логический(виртуальный) адрес

2. Линейный адрес

3. Физический адрес

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

Процессор узнает адрес следующей выполняемой команды анализируя содержимое 2х регистров: CS и IP. Сегменты жестко не привязываются к определенным адресам памяти. А смещение для каждой команды величина строго постоянная. Содержимое регистра IP видно из анализа листинга. При загрузке программы адрес сегмента выравнивается на границу параграфа(16 байт). Т.е. адрес параграфа должен быть четным числом кратным 16 и в 16м коде заканчиваться на 0.

Пример:

Пусть содержимое CS следующее:

<CS>=3DA0h

Пусть содержимое <IP>=11FAh

Необходимо вычислить адрес вычисляемой команды. Для этого необходимо знать тип процессора и разрядность адресной шины.

Вариант 1:

Адресная шина 20-и разрядная

Выравнивание на параграф:

3DA00h

CS+IP=3EBFAh

Вариант 2:

Адресная шина 24-и разрядная

3DA000h

CS+IP=3DB1FA

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

КОМАНДЫ ПЕРЕСЫЛКИ И ОБМЕНА ИНФОРМАЦИЕЙ

MOV-> MOVE OPERAND FROM\TO SYSTEM REGISTER

Команда содержит 2 операнда и синтаксис ее следующий:

MOV Destination,Source

Информация из источника пересылается (копируется) в приемник.

Только кратно байту.

Возможные сочетания:

 

DESTINATION SOURCE ПРИМЕР
Регистр R8   R16 Регистр R8   R16 MOV AL(младший байт регистра AX),DH (старший DX) mov ax,dx
Регистр R8 Памят M8 k DB 10 MOV CL,K

 

Лаба 2

Стыковка CPP модуля и ASM модуля.

Для стыковки СРР модуль и ASM модуль должны удовлетворять определенным требованиям.

Требования к СРР:

1. Имена внешних переменных и функций необходимо описывать как глобальные

2. Имена внешних функций должны быть уникальным

3. Для внешних функций необходимо использовать так называемый спецификатор сборки (extern 'C'{прототип функции}). Этот спецификатор используется для интерпретации как C, а не CPP.

4. Константы должны быть локальными

5. Вызов внешней функции выполняется по правилам принятым в СРР

Требования к ASM:

1. Для модели памяти следует установить тип памяти LARGE с обязательным указанием языка программирования С, а не СРР (model LARGE, C)

2. Внешние переменные которые передаются из СРР модуля разрешается описывать как в сегменте данных так и сегменте кода при помощи директивы Extrn C х:тип

3. Описание констант необходимо повторить. Они должны быть локальными и могут распологаться в сегменте кода или в сегменте данных.

4. Внешние переменные должны быть описаны при помощи дерективы Public с обязательным указанием языка С, а не СРР (Public C имя_внешней_функции)

 

Описание разрешается выполнять в стиле MASM или Ideal

Ideal -> CODESEG DATASEG

MASM ->.Code.Data

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

1. Выполняется компиляция ASM модуля с обязательным указанием ключа 'ml'

Tasm имя.asm /lm /l ->obj и lst

2. Стыковка модулей, сборка программы и создание исполняемого ЕХЕ файла

bcc -ml name1.cpp name2.obj -> name1.exe

Пример

В примере выполняется ввод 2х переменных

int a; unsigned char b;

x=a;

z=b;

cout<<x<<"\n"<<z;

Программа состоит из 2х модулей. Главный на СРР второй на ASM в виде внешней функции с именем prim(). Программа выполняет ввод данных дважды. В первый раз это делает срр модуль, а потом это повторяет ASM модуль. Что бы убедиться в работоспособности ASM модуля перед вызовом функции prim переменные x и z зануляются.

 

Исходник главного модуля на СРР

 

#include <iostream.h>

#include <limits.h>

 

extern "C"

{void prim (void);}

//объявление переменных как глобальных

int x,a;

unsigned char b,z;

//объявление главной функции

void main (void)

{

cout<<endl<<"Input a";

cin>>a;

x=a;

cout<<endl<<"Input b";

cin>>b;

z=b;

//результат работы срр модуля

cout<<"\n---C++ PROCESSING---\n";

cout<<"x="<<x<<"\n"<<"z="<<z;

//зануление

x=0;

z=0;

//вызов ASM модуля

prim();

//результат работы ASM модуля

cout<<"===ASSEMBLER_PROCESSING===\n";

cout<<"x="<<x<<"\n";

cout<<"z="<<z<<"\n";

}

 

ИСХОДНИК ASM МОДУЛЯ

;asm модуль prim.asm

title prim

model LARGE,C

DATASEG;объявление сегмента данных

;x,a - word

Extrn C a:word, x:word

;z,b - byte

Extrn C b:byte, z:byte

CODESEG;объявление сегмента кода

Public C prim

prim proc far

mov ax,a

mov bl,b

mov x,ax

mov z,bl

ret

prim endp

end

 

Лекция 6

 

     
     
     
     
     
     
     
     

 

Исключения

· В качестве приемника нельзя использовать регистр CS

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

· Нельзя пересылать прямо содержимое сегментных регистров, необходимо использовать буфер (аккумулятор)

КОМАНДА ОБМЕНА ДАННЫМИ (Exchange)

XCHG - меняет местами содержимое 2х операндов

xchg Приемник,источник

Возможное сочетание операндов, такие же как и в MOV, но без констант

Команда загрузки адреса (относительно сегмента)LEA-> Load Effective Address

LEA Приемник,источник

Приемник - регистр, источник - память

a dw?

LEA di,a

Эту команду можно реализовать с помощью MOV

x dw 1000

Mov bx,offset x

Смещение всегда видно в листинге программы

 

Арифметические команды(целочисленная арифметика)

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




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 371; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.