Program Of Microprocessor 8086

АРХИТЕКТУРА МИКРОПРОЦЕССОРА i8086. Структурная схема микропроцессора i8086. I представлена структурная схема микропроцессора 8086, в состав которого входят: устройство управления (УУ), арифметико-логическое устройство (АЛУ), блок преобразования адресов и регистры. Устройство управления дешифрирует коды команд и формирует необходимые управляющие сигналы. Арифметико-логическое устройство осуществляет необходимые арифметические и логические преобразования данных. В блоке преобразования адресов формируются физические адреса данных, расположенных в основной памяти. Загрузите Assembly 8086 1.0.4 на Aptoide прямо сейчас! ✓ без вирусов и вредоносных программ ✓ без доплат. Язык ассемблера микропроцессора Intel 8086 является довольно сложным, что в первую очередь объясняется сегментной организацией памяти и одновременной адресацией четырех сегментов. В языке имеется более 100 базовых символических команд, в соответствии с которыми ассемблер генерирует более 3800 машинных команд. Помимо регистров микропроцессора 8086, дополнительно введены следующие регистры, предназначенные для мультипрограммирования: слово состояния машины (16 бит) для хранения дополнительных бит состояния, связанных с расширенными возможностями процессора 80286, например, бита разрешения защиты, определяющего, в реальном или защищённом режиме работает процессор.

АРХИТЕКТУРА МИКРОПРОЦЕССОРА i8086 4.1. Структурная схема микропроцессора i8086 На рис.

I представлена структурная схема микропроцессора 8086, в состав которого входят: устройство управления (УУ), арифметико-логическое устройство (АЛУ), блок преобразования адресов и регистры. Устройство управления дешифрирует коды команд и формирует необходимые управляющие сигналы. Арифметико-логическое устройство осуществляет необходимые арифметические и логические преобразования данных. В блоке преобразования адресов формируются физические адреса данных, расположенных в основной памяти. Наконец, регистры используются для хранения управляющей информации: адресов и данных. Всего в состав микропроцессора i8086 входит четырнадцать 16-битовых регистров (см. 1): a) четыре регистра общего назначения (регистры данных): AX - регистр-аккумулятор, BX - базовый регистр, СХ - счетчик, DX - регистр-расширитель аккумулятора; б) три адресных регистра: SI - регистр индекса источника, DI - регистр индекса результата, BP - регистр-указатель базы; в) три управляющих регистра: SP - регистр-указатель стека, IP - регистр-счетчик команд, регистр флагов; г) четыре сегментных регистра: CS - регистр сегмента кодов, DS - регистр сегмента данных' E S - регистр дополнительного сегмента данных, SS - регистр сегмента стека.

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

Физический адрес формируется из 16-битового смещения и содержимого 16-битового сегментного регистра, сдвинутого влево на 4 бита (см. Для размещения программ и данных в основной памяти выделяются специальные области - сегменты. Адреса этих областей хранятся в специальных сегментных регистрах. Каждый из четырех сегментных регистров используется для хранения адреса определенного сегмента (см. 3): ¨ сегмента кодов, т. Области программ; ¨ сегмента данных, т. Области размещения данных; ¨ дополнительного сегмента данных, используемого некоторыми командами; ¨ сегмента стека, т.

Области размещения стека. Стек представляет собой специальным образом организованную область памяти, допускающую последовательную запись элементов данных длиной 2 байта (слово) и чтение их в порядке, обратном порядку записи. Для хранения адреса последнего слова, занесенного в стек, служит регистр-указатель стека S Р (см. 4, где а - текущее состояние стека, б - запись X, в - чтение X). 4 Стек используется для временного хранения данных и адресов, например при вызове подпрограмм, когда в стек заносится адрес возврата и значения параметров, передаваемых в подпрограмму. Формат команд микропроцессора 8086 позволяет указывать в команде только один операнд, размещенный в основной памяти, т.

Одной командой нельзя, например, сложить содержимое двух ячеек памяти, Принципиально допускается 8 способов задания смещения (исполнительного адреса) операндов, размещенных в основной памяти: SI + DI + BP + B Х + BP + SI + BP + D I + BX + SI + BX + DI + Во всех случаях исполнительный адрес операнда определяется как сумма содержимого указанных регистров и индексного смещения, представляющего собой некоторое число (одно- или двухбайтовое). Выполнение программы Содержимое регистров С S и IP, в которых хранится базовый адрес сегмента кодов и смещение очередной команды относительно начала сегмента, определяет физический адрес команды, которая должна быть выполнена на следующем шаге. По указанному адресу из основной памяти считывается команда и пересылается в микропроцессор. Команда длиной от 1 до 8 байт помещается в очередь команд, откуда поступает в устройство управления, где дешифрируется. Если при выполнении команды требуются данные, расположенные в основной памяти, то специальным полем кода команды определяется способ адресации и вычисляется исполнительный, и затем и физический адрес данных. Данные, считанные из основной памяти по указанному адресу, пересылаются в регистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается либо в регистры, либо (в соответствии с командой) в какую-либо область основной памяти.

Program

Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае в регистр IP заносится исполнительный адрес команды, которая должна выполняться следующей. Приведем два примера: a + bx и b р + si + 6. В первом случае исполнительный адрес операнда определяется суммой содержимого регистра b х и индексного смещения, заданного символическим именем ' а', а во втором - суммой содержимого регистров bp, si и индексного смещения, равного 6. Длина операнда может определяться: а) кодом команды - в том случае, если используемая команда обрабатывает данные определенной длины, что специально оговаривается; б) объемом регистров, используемых для хранения операндов (1 или 2 байта); в) специальными указателями byte ptr (1 байт) и word ptr (2 байта), которые используются в тех случаях, когда длину операнда нельзя установить другим способом. Например, mov byte ptr x, 255 т. Операнд пересылается в поле с именем ' х' и имеет длину I байт. Команды пересылки / преобразования данных 1.

Команда пересылки данных. MOV, используется для пересылки данных длиной I или 2 байта из регистра в регистр, из регистра в основную память, из основной памяти в регистр, а также для записи в регистр или основную память данных, непосредственно записанных в команде.

Все возможные пересылки представлены на рис. 6 Приведем примеры: а) mov ax, bx- пересылка содержимого регистра bx в регистр ax; б) mov cx, exword - пересылка 2 байт, расположенных в поле exword, из основной памяти в регистр cx; в) mov si, 1000 - запись числа 1000 в регистр si; г) mov word ptr di +515, 4 - запись числа 4 длиной 2 байта в основную память по адресу di +515. Для загрузки 'прямого' адреса в сегментный регистр используются две команды пересылки: mov ax, code mov ds, ax 2. Команда обмена данных. ХCHG, организует обмен содержимого двух регистров (кроме сегментных) или регистра и поля основной памяти.

Например: xchg bx, cx - обмен содержимого регистров bx и сх. Команда загрузки исполнительного адреса. LEA, вычисляет исполнительный адрес второго операнда и помещает его в поле, на которое указывает первый операнд. Приведем примеры: а) lea bx, exword - в регистр bx загружается исполнительный адрес exword; б) lea bxdi +10 - в регистр bx загружается адрес l0-го байта относительно точки, на которую указывает адрес в регистре di. Команды загрузки указателя.

L DS, LЕS, Команда LDS загружает в регистры D S: указатель (: ), расположенный по адресу, указанному во втором операнде. Команда LЕS загружает указатель по адресу, расположенному во втором операнде, в регистры ЕS:. Например: lds si, exword т. Слово (2 байта) по адресу exword загружается в si, а по адресу exword+ 2 - в ds. Команда записи в стек. PUSH организует запись в стек слова, адрес которого указан в операнде. Например; p ush dx - запомнить содержимое регистра dx в стеке.

Команда восстановления из стека. POP организует чтение из стека последнего слова и помещает его по адресу, указанному во втором операнде. Например: pop dx - восстановить содержимое регистра dx из стека. Команды сложения. ADD, ADC, устанавливают флаги четности, знака результата, наличия переноса, наличия переполнения. Ilo команде A D D выполняется сложение двух операндов.

Результат записывается по адресу первого операнда. По команде А DC также выполнятся сложение двух операндов, но к ним добавляется еще значение, записанное в бите переноса, установленном предыдущей командой сложения. 7 показаны возможные способы размещения слагаемых, где а - операнды - слова, б - операнды - байты. Приведем пример сложения двух 32-разрядных чисел: mov ax, value1 add value2,ax mov ax, value1+2 adc value 2+2, ax Исходные числа находится в основной памяти по адресам value 1 и value 2, а результат записывается по адресу value 1.

Команды вычитания. SUB, SBB, устанавливают флаги четности, знака результата, наличия заема, наличия переполнения. При выполнении операции по команде SUB заем не учитывается, а по команде SBB - учитывается. Ограничения на местоположение операндов такие же, как и у команды сложения.

Команда изменения знака. NEG знак операнда изменяется на противоположный. Команда добавления единицы. INC значение операнда увеличивается на единицу. Команда вычитания единицы. D E C значение операнда уменьшается на единицу.

Команда сравнения. СМ P, выполняется операция вычитания без записи результата и устанавливаются признаки во флажковом регистре. Команды умножения.

I М UL устанавливают флаги наличия переноса или переполнения. По команде MU L числа перемножаются без учета, и по команде - I М UL с учетом знака (в дополнительном коде). 8 (где а - операнды - слова, б - операнды - байты) приведены возможные способы размещения сомножителей и результата (один из сомножителей всегда расположен в регистре-аккумуляторе. Рассмотрим пример: imul word ptr c Здесь содержимое основной памяти по адресу ' с' длиной слово умножается на содержимое регистра ax. Младшая часть результата операции записывается в регистр a х, а старшая часть - и регистр dx.

Команда деления. DI V I DIV По команде DI V операция деления выполняется без учета, а по команде I DIV - с учетом знака (в дополнительном коде). 9 приведены возможные способы размещения делимого, делителя и результата (а - операнды - слова, б - операнды - байты). Команда преобразования байта в слово, а слова - в двойное слово. CBW CWD По команде CBW число из al переписывается в ax (дополнение выполняется знаковыми разрядами). Аналогично по команде CW D число из ax переписывается в два регистра dx и ax.

Команды передачи управления. Команда безусловного перехода. JMP имеет три модификации в зависимости от длины ее адресной части: short - при переходе по адресу, который находится на расстоянии -128.127 байт относительно адреса данной команды (длина адресной части 1 байт); near ptr - при переходе по адресу, который находится на расстоянии З2 Кбайта (-32768.32767 байт) относительно адреса данной команды (длина адресной части 2байта); far ptr - при переходе по адресу, который находится на расстоянии превышающем 32 Кбайта (длина адресной части 4 байта). При указании перехода к командам, предшествующим команде перехода, ассемблер сам определяет расстояние до метки перехода и строит адрес нужной длины. При указании перехода к последующим частям программы необходимо ставить указатели short, near ptr и far ptr.

В качестве адреса команды перехода используются метки трех видов: а): n ор ( nор - команда 'нет операции'); б) label near (для внутрисегментных переходов); в) label far (для внесегментных переходов). Примеры: а) jmp short b - переход по адресу b; б) jmp bx - переход по адресу в регистре bx (адрес определяется косвенно); в) a: пор - описание метки перехода ' a '; г) b label near - описание метки перехода ' b'. Команды условного перехода. Мнемоника команд условного перехода: JZ - переход по 'ноль'; J E - переход по 'равно'; JN Z - переход по 'не нуль'; J NE - переход по 'не равно'; JL - переход по 'меньше'; JNG, J LE - переход по 'меньше или равно '; JG - переход по 'больше'; JNL, J GE - переход по 'больше или равно '; JA - переход по 'выше' (беззнаковое больше); JNA, JBE - переход по 'не выше'(беззнаковое не больше); JB - переход по 'ниже' (беззнаковое меньше); JNB, JAE - переход по'не ниже' (беззнаковое не меньше).

Все команды имеют однобайтовое поле адреса, следовательно, смешение не должно превышать -128.127 байт. Если смещение выходит за указанные пределы, то используется специальный прием: вместо программируется jz zero jnz continue jmp zero continue. Команды организации циклической обработки.

В качестве счетчика цикла во всех командах циклической обработки используется содержимое регистра cx. 1) Команда организации цикла. LOOP при каждом выполнении уменьшает содержимое регистра cx на единицу и передает управление по указанному адресу, если cx не равно 0: mov cx, loop count; загрузка счетчика beginloop:.

Loop beginloop Примечание. Если перед началом цикла в регистр cx загружен 0, то цикл выполняется 35536 раз. 2) Команда перехода по обнуленному счетчику. JCXZ передает управление по указанному адресу, если содержимое регистра cx равно 0. Например: mov cx, loop count; загрузка счетчика jcxz endofloop; проверка счетчика beginloop:. Loop beginloop endofloop.

3) Команды организации цикла с условием. L ООР E LOOPNE уменьшают содержимое на единицу и передают управление по указанному адресу при условии, что содержимое cx отлично от нуля, но L ООР E дополнительно требует наличия признака 'равно', а LOOPNE - 'не равно', формируемых командами сравнения. Например: mov cx, loop count; загрузка счетчика jcxz endofloop; проверка счетчика beginloop:.

Cmp al, 100; проверка содержимого al loopne begin loop; возврат в цикл, если cx ¹ 0 и al ¹ 100 endofloop. Команды вызова подпрограмм.

1) Команда вызова процедуры. C A L L осуществляет передачу управления по указанному адресу, предварительно записав в стек адрес возврата. При указании адреса процедуры так же как и при указании адреса перехода в командах безусловного перехода, возникает необходимость определить удаленности процедуры от места вызова: а) если процедура удалена не более чем на -128.127 байт, то специальных указаний не требуется; б) если процедура удалена в пределах 32 к6ант, то перед адресом по процедуры необходимо указать near ptr, в) если процедура подпрограмма удалена более, чем на 32 кбайта, то перед адресом процедуры необходимо записать far ptr. Например: call near ptr p - вызов подпрограммы ' р'. Текст процедуры должен быть оформлен в виде: ргос.

Тело процедуры. End Здесь указатель удаленности также служит дли определения длины адресов, используемых при обращении к процедуре: near - при использовании двухбайтовых адресов, far - при использовании четырехбайтовых адресов. 2) Команда возврата управления. RET извлекает из стека адрес возврата и передает управление по указанному адресу. Если в команде указано значение счетчика, то после восстановления адреса возврата указанное число добавляется к содержимому регистра-указателя стека. Последний вариант команды позволяет удалить из стека параметры, передаваемые в процедуру через стек. Команды обработки строк.

Команды обработки строк используются для организации циклической обработки последовательностей элементов длиной I или 2 байта. Адресация операндов при этом выполняется с помощью пар регистров: DS: SI - источник, ES: DI - приемник. Команды имеют встроенную корректировку адреса операндов согласно флагу направления D: 1 - уменьшение адреса на длину элемента, 0 - увеличение адреса на длину элемента. Корректировка выполняется после выполнения операции. Установка требуемого значения флага направления выполняется специальными командами: ST D - установка флага направления в единицу, CLD - сброс флага направления в ноль.

1) Команда загрузки строки LO DS. LO DSB (загрузка байта), LO DSW ( загрузка слова). Команда загружает байт в А L или слово в AX. Для адресации операнда используются регистры DS: S I 2) Команда записи строки STOS.

STOSB ( запись байта), ST OSW (запись слова) записывает в основную память содержимое A L или АX соответственно. Для адресации операнда используются регистры ES: DI.

3) Команда пересылки MOVS. MOVSB (пересылка байта), МО VSW (пересылки слова) пересылает элемент строки из области, адресуемой регистрами DS: SI, в область, адресуемую регистрами Е S: DI. 4) Команда сканирования строки SCAS.

Microprocessor

SCASB (поиск байта), SCAS W (поиск слова). По команде содержимое регистра AL или АХ сравниваются с элементом строки, адресуемым регистрами DS: SI и устанавливается значение флажков в соответствии с результатом DI - AL или DI - AX. 5) Команда сравнения строк CMPS. СMPSB (сравнение байт), С MPS W (сравнение слов) элементы строк, адресуемых парами регистров DS: SI и ES: DI, сравниваются и устанавливаются значения флажков в соответствии с результатом DI- SI. 6) Префиксная команда повторения. REP позволяет организовать повторение указанной команды CX раз. Например: rep stosb Здесь поле, адресуемое парой регистров ES: DI длиной CX заполняется содержимым AL.

7) Префиксные команды 'повторять, пока равно' и 'повторять, пока не равно'. REPE RE PNE - логическое НЕ; AND, - лигическое И; OR, - логическое ИЛИ; XOR, - исключающее ИЛИ; TEST, - И без записи результата. Операнды байты или слова. Выделить из числа в AL первый бит: and al, B 2. Команды сдвига., Счетчик записывается в регистр СL. Если счетчик равен 1, то его можно записать в команду. Коды команд сдвига: SAL - сдвиг влево арифметический; SHL - сдвиг влево логический; SAR - сдвиг вправо арифметический; SHR - сдвиг вправо логический; ROL - сдвиг влево циклический; ROR - сдвиг вправо циклический; RCL - сдвиг циклический влево с флагом переноса; RCR - сдвиг циклический вправо с флагом переноса.

Умножить число в AX на 10: mov bx, ax shl ax, 1 shl ax, 1 add ax, bx shl ax, 1 5.8. Команды ввода - вывода.

Обмен данными с внешней средой осуществляемся с помощью следующих команд: IN, (ввод из порта в регистр). IN, D X (ввод из порта, номер которого указан в регистре D X в регистр); OUT, (вывод содержимого регистра в порт), OUT D X, ( вывод содержимого регистра в порт, номер которого указан в регистре DX). В качестве регистра можно указать AL или AX (соответственно будет обрабатываться байт или два байта). Порт отождествляется с некоторым внешним устройством (0.255). Однако при организации ввода - вывода помимо самой операции необходимо осуществить ряд дополнительных действий, например, проверить готовность устройства. В связи с этим для типовых устройств разработаны стандартные программы организации ввода - вывода, которые вызываются по команде прерывания int 21 h.

В таблице 1 приведен перечень основные функции, реализуемые подпрограммами ввода - вывода, и их коды. Код функции должен передаваться в подпрограмму в регистре AH. Код функции Функция 01 Ввод с клавиатуры одного символа в регистр AL (с проверкой на Ctrl-Break, с ожиданием, с эхо) 02 Вывод одного символа на экран дисплея из регистра DL (с проверкой на Ctrl-Break) 06 Непосредственный ввод - вывод: ввод в регистр AL (без ожидания, без эхо, без проверки на Ctrl-Break, регистр DL должен содержать 0FFH), вывод из регистра DL (без проверки на Ctrl-Break). Программирование ветвлений. Ветвления программируются с использованием команд условной и безусловной передачи управления. J else jmp com else: com: Пример.

Написать процедуру вычисления X = max ( A, B ): max proc near mov ax, A cmp ax, B; сравнение A и B jl less; переход по меньше mov X, ax jmp continue; переход на конец ветвления less: mov ax, B mov X, ax continue: ret max endp 2. Программирование циклических процессов.

Программирование циклических процессов осуществляется с использованием либо команд переходов, либо - в случае счетных циклов - с использованием команд организации циклов. A) программирование итерационных циклов (цикл-пока): с ycl: cmp. Jne com jmp cycl com. Написать процедуру суммирования чисел от 1 до 10, используя итерационный цикл. Sum proc near mov ax, 0; обнуление суммы mov bx, 1; первое слагаемое cycl: cmp bx, 10; слагаемое больше 10 jg continue; выход из цикла add ax, bx; суммирование inc bx; следующее число jmp cycl; возврат в цикл continue: ret; выход, сумма - в ax sum endp a) программирование счетных циклов: mov cx, N cycl: loop cycl com.

Написать процедуру суммирования чисел от 1 до 10, используя счетный цикл. Sum proc near mov ax, 0; обнуление суммы mov bx, 1; первое слагаемое mov cx, 10; загрузка счетчика cycl: add ax, bx; суммирование inc bx; следующее число loop cycl; возврат в цикл continue: ret; выход, сумма - в ax sum endp 3.

Моделирование одномерных массивов. Массив во внутреннем представлении - это последовательность элементов в памяти, например: A dw 10,13,28,67,0,-1; массив из 6 чисел длиной слово.

8086

Программирование обработки выполняется с использованием адресного регистра, в котором хранится либо адрес текущего элемента, либо его смещение относительно начала массива. При переходе к следующему элементу адрес (или смещение) увеличивается на длину элемента. Написать процедуру, выполняющую суммирование массива из 10 чисел размером слово. Вариант 1 (используется адрес): Вариант 2 (используется смещение): summas proc summas proc mov ax, 0 mov ax, 0 lea bx, MAS mov bx, 0 mov cx, 10 mov cx, 10 cycl: add ax, bx cycl: add ax, MAS bx add bx, 2 add bx, 2 loop cycl loop cycl ret ret summas endp summas endp Второй вариант позволяет получать более наглядный код и потому является предпочтительным. В том случае, если элементы просматриваются непоследовательно, адрес элемента может рассчитываться по его номеру: Aисп = Aначала+(-1). Полученный по формуле адрес записывается в один из адресных регистров ( BX, BP, DI, SI) и используется для доступа к элементу.

Написать процедуру, которая извлекает из массива, включающего 10 чисел размером слово, число с номером n (n£10). Nmas proc mov bx, N; номер числа dec bx; вычитаем 1 sal bx, 1; умножили на длину (сдвинули влево на 1) mov ax, MAS bx ; результат в ax ret nmas endp 4.

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

Написать процедуру определения максимального элемента матрицы A(3,5). Mахм atr proc mov bx, 0; смещение 0 mov cx, 14; счетчик цикла mov ax, A; заносим первое число cycl: cmp ax, A bx +2; сравниваем числа jge next; если больше, то перейти к следующему mov ax, Abx+2; если меньше, то запомнить next: add bx, 2; переходим к следующему числу loop cycl ret; результат в ax mахм atr endp Просмотр по строкам при необходимости фиксировать завершение строки и просмотр по столбцам выполняются в двойном цикле: по строкам - во внешнем цикле, по столбцам - во внутреннем или наоборот. В этом случае обычно отдельно формируются смещения строки и столбца. Определить сумму максимальных элементов столбцов матрицы A(3,5). Mахм atr proc mov ax, 0; обнуляем сумму mov bx, 0; смещение элемента столбца в строке mov cx, 5; количество столбцов cycl 1: push cx; сохраняем счетчик mov cx, 2; счетчик элементов в столбце mov dx, A bx ; заносим первый элемент столбца mov si, 10; смещение второго элемента столбца cycl 2: cmp dx, A bx + si ; сравниваем jge next; если больше или равно - к следующему mov dx, A bx + si ; если меньше, то сохранили next: add si, 10; переходим к следующему элементу loop cycl 2; цикл по элементам столбца add ax, dx; просуммировали макс. Элемент pop cx; восстановили счетчик. Add bx, 2; перешли к следующему столбцу loop cycl 1; цикл по столбцам ret; результат в ax mахм atr endp 5.

Преобразования ввода-вывода. При программировании операций ввода-вывода на ассемблере приходится вручную осуществлять преобразования чисел из символьного представления во внутренний формат (двоичный с фиксированной точкой, отрицательные числа записаны в дополнительном коде) и обратно. Для облегчения преобразования во внутренний формат целесообразно оговорить возможные варианты ввода чисел в символьном виде. При этом также используется то, что при добавлении цифры к числу справа число меняется следующим образом::=.10+. Обратное преобразование из внутреннего формата в символьный для вывода результатов обычно использует стандартное правило перевода числа из двоичной системы счисления в десятичную: деление на 10 с выделением остатков. В этом случае десятичные цифры получаются в обратном порядке. Если среди вводимых или выводимых чисел могут быть отрицательные, то необходимо предусмотреть специальную проверку и преобразовывать отрицательные числа в дополнительный код при вводе и в прямой при выводе.

Написать процедуры ввода массива из n чисел размером слово и вывода того же массива. Числа должны вводиться каждое со своей строки, положительные числа должны вводиться без знака c первой позиции, отрицательные - со знаком в первой позиции. Вывод всех чисел должен осуществляться в одну строку через пробелы. Перед отрицательными числами необходимо выводить знак '-'. Составить тестирующую программу. Домашний очаг.:. История:.

Окружающий мир:. Справочная информация.:.:.:.:.:.

Техника.:. Образование и наука:. Предметы:. Мир:.:.

Бизнес и финансы:.:.:.

Микропроцессоры Intel 8086, Intel 80286 Intel 8086 (также известный как iAPX86) - первый 16-битный микропроцессор компании Intel, разрабатывавшийся с весны 1976 года и выпущенный 8 июня 1978 года. Процессор имел набор команд, который применяется и в современных процессорах, именно от этого процессора берёт своё начало известная на сегодня архитектура x86. Функциональная схема микропроцессора Intel 8086 (i8086) Микросхема 8086 представляет собой однокристальный высокопроизводительный 16-разрядный микропроцессор с фиксированной системой команд.

Микропроцессор предназначен для использования в качестве центрального процессорного устройства при построении средств вычислительной техники - от простейших одноплатных микроЭВМ до высокопроизводительных мультипроцессорных систем. Микропроцессор обладает высоким быстродействием, обеспечивает возможность прямой адресации памяти объемом до 1М байта, 65536 устройств ввода и 65536 устройств вывода. Для вычисления адресов операндов, размещенных в памяти, используется 24 режима адресации.

Микропроцессор имеет векторную структуру прерываний и обеспечивает обработку до 256 запросов прерываний трех типов: внешних, внутренних и программных. Архитектурной особенностью микропроцессора 8086 является наличие аппаратно-программных средств, позволяющих упростить построение мультипроцессорных систем на его основе. Эти средства обеспечивают синхронизацию работы нескольких независимых (выполняющих собственные потоки команд) процессоров, имеющих общие ресурсы, а также синхронизацию параллельной работы микропроцессора и сопроцессоров (специализированных процессоров, аппаратно реализующих команды сложных процедур).

Микропроцессор 8086 характеризуется двумя режимами работы - минимальным и максимальным, которые отличаются способом формирования сигналов обмена и соответственно возможностями реализуемых систем. Функциональная схема микропроцессора приведена на рис.1.

Структура микропроцессора 8086 ориентирована на параллельное выполнение функций выборки и выполнения команд и состоит из устройства сопряжения канала (УСК), устройства обработки (УО) и устройства управления и синхронизации. Устройство сопряжения канала предназначено для формирования физического адреса памяти, выборки команд из памяти и записи их в очередь команд, чтения операндов команд из памяти или регистров ввода/вывода, записи результатов выполнения команд в память или регистры ввода/вывода. В УСК входят: шесть 8-разрядных регистров очереди команд; четыре 16-разрядных сегментных регистра; 16-разрядный регистр адреса (указателя) команды; 16-разрядный регистр обмена; 16-разрядный сумматор адреса. Функциональная схема микропроцессора.

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

Системная настройка обеспечивается специальным выводом выбора режима MN/MX. Микропроцессор позволяет обрабатывать 256 типов прерываний с номерами от 0 до 255, которые делятся на внешние аппаратные, внутренние аппаратные и программные. Запросы на внешние прерывания формируются внешними по отношению к микропроцессору устройствами.

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

Запросы на внешние прерывания воспринимаются и обрабатываются после выполнения текущей команды. Внешние прерывания поступают на микропроцессор по двум внешним выводам (INT и NMI) и делятся на маскируемые и немаскируемые.