Скачиваний:
66
Добавлен:
02.05.2014
Размер:
593.41 Кб
Скачать

Отличия программы “Эмулятор МикроЭвм-580” от устройства Электроника-580

Внешний вид программы “Эмулятор МикроЭВМ-580” версия 1.00 представлен на рисунке 4.

Рисунок 4

По сравнению с устройством Электроника-580 в эмулятор добавлены следующие клавиши:

“Остановка” – остановка программы в момент ее исполнения с помощью “Run”. Служит для остановки зациклившихся программ.

“Методичка” – Вызывает текст документа “Методические указания к лабораторным работам по курсу “Организация ЭВМ и систем””.

“Текст трассировки” – вызывает окно с текстом трассировки (рисунок 5) в котором в последней строке отображается текущее состояние регистров. информация обновляется по мере выполнения команд. В регистре RKнаходится команда, которая была выполнена последней, рядом отображается ее мнемокод. При достижении 500 строк в окне “Текст трассировки” первые строка удаляется для избежания перегрузки вашего ПК.

“Просмотр памяти” – вызывает окно (рисунок 6), в которое осуществляется считывание памяти виртуальной Электроники-580.

“Сохранить” – сохраняет содержимое памяти и регистров виртуальной Электроники-580 в файл.

“Загрузить ” – загружает содержимое памяти и регистров виртуальной Электроники-580 из файла.

В эмулятор добавлена эффективная система поиска команд: поиска кода по мнемокоду и поиска мнемокода по коду. Достаточно набрать в соответствующем поле код или мнемокод и искомое будет выведено в соседнем поле. Мнемокод необходимо вводить большими буквами.

Рисунок 5

Рисунок 6

В программе "Эмулятор МикроЭВМ-580" рабочей является вся область памяти 0000-:-FFFF. В области 0000-:-003Fзаписаны микропрограммы вызываемые микрокомандойRST.

В программе "Эмулятор МикроЭВМ-580" при вводе любых символов (адрес, данные) в соответвующем поле не возникает символов “x”. Происходит лишь сдвиг старых символов. Таким образом исключаются все возможные ошибки Электроники-580.

Индикация регистров “С” и “Z” производится лишь при выполнении команд в окне трассировке.

При выполнении команды RSTпрограмма переспрашивает пользователя о необходимости сохранения результатов работы и необходимости сброса.

Система команд микроЭвм

Последовательность (закон) преобразования информации в ЭВМ задается программой. Программа размещается в ОЗУ в виде команд, представленных в машинных кодах. Представление программ в машинных кодах требует много времени на ввод команд и их проверку. Поэтому для уменьшения времени на программирование, вероятности ошибок кодирования, повышения наглядности представления команд для задания закона преобразования информации используется машинно-ориентированный язык Ассемблер. Поскольку различные микроЭВМ отличаются структурой и конструктивными особенностями, изменяется содержание и языка Ассемблер. Однако эти изменения имеют преемственность, а представление программы на языке Ассемблер позволяет получать наиболее короткие программы, занимающие меньший объем памяти по сравнению с программами, написанными на языках высокого уровня (БЕЙСИК, СИ). Программа, представленная в мнемонике Ассемблера, также должна быть оттранслирована, т.е. переведена и размещена в машинных кодах в ОЗУ . Для такого перевода необходима программа-транслятор, которой в мониторе УОУ не имеется. Поэтому, хотя в данной работе и изучается язык Ассемблер и команды представляются в его мнемонике, запись команд в ОЗУ осуществляется в шестнадцатеричной системе счисления вручную с клавиатуры УОУ.

Система команд микропроцессора КР 580 ВМ 80А приведена в таблице. 1. Команды условно разбиты на пять групп, в первом столбце таблицы представлены наименования команд в мнемонике Ассемблера, где

Ri, Rj {A ,B ,C ,D , E , H , L , M };

V - 8-битное данное [V(16)] ;

aa - 16-битный адрес памяти [aa(16)] ;

RP- регистровая пара B,C; D,E; H,L или указатель стека SP ;

ap - 8-битный адрес порта [ap(16)].

Во втором столбце таблицы указано содержание первого байта команды (ПБ), где Т означает ссылку на дополнение к таблице 1, в котором ПБ конкретизирован в зависимости от типа команды. В третьем столбце таблицы 1 размещена размерность команды в байтах, в четвертом - её функциональное назначение, в последующих столбцах указано содержание поименованных разрядов регистра F после выполнения команды :

" + " - возможно изменение в состояние, зависящее от результата выполнения команды ;

0 " - " - состояние не меняется ;

1 " 0 ", " 1 " - состояние нуля или единицы .

Таблица 1

Мнемоника ПБ Байт Описание команды RGF

Z S P СУ АС

Мнемоника ПБ Байт Описание команды RGF

Z S P СУ АС

Дополнение к таблице 1

1. Команды передачи данных

Первая группа команд в таблице 1 обеспечивает выполнение операций размещения, обмена, загрузки и перемещения данных. Число команд - 84 . Наибольшее число команд пересылки типа MOV Ri,Rj. Команды однобайтные, предназначены для пересылки операндов из одного регистра в другой или обмена информацией между РОН и ОЗУ .

Например, команда MOV A,B имеет код 78 (16)(дополнение к таблице1) адресация - регистровая, выполняет операцию передачи содержимого регистра B в регистр A (AB).

Команды MOV M, Rj осуществляют передачу содержимого одного из РОН в ячейку памяти с адресом ,указанным в регистровой паре H, L. Поэтому перед выполнением данных команд необходимо предварительно поместить младший байт адреса ячейки М в регистр L, старший байт адреса в регистр H. Такая операция выполняется командой LHLD аа, где в ячейке с адресом аа располагают будущее содержимое L, а в ячейке аа+1 содержимое H. Например, после загрузки этой командой регистра Н содержимым 82(16), L - 40(16)выполняется команда MOV M, A: код команды 77(16)загружается в РК и из аккумулятора информация передается в ячейку с адресом 8240(16).

Команды MOV Ri, M осуществляют передачу содержимого ячейки памяти М с адресом , указанным в регистровой паре H,L, в один из РОН .

Рассмотрим назначение других команд :

MVI Ri, V, осуществляют непосредственную передачу операнда, находящегося во втором байте команды , в РОН или ячейку памяти .

MVI B,V код - 06(16), загружает в регистр В второй байт команды, равный V ;

MVI M,V код - 36(16), осуществляет непосредственную передачу V в ячейку с адресом , указанным в регистровой паре H, L .

Команда LDA аа осуществляет прямую загрузку аккумулятора содержимым ячейки памяти с адресом аа , причем второй байт команды - младшие разряды адреса , третий байт - старшие .

STA аа осуществляет передачу содержимого аккумулятора в ячейку с адресом аа, т.е. М(байт3,байт2) А.

LHLD аа загружает регистровую пару H,L содержимым ячейки памяти с адресом аа, аа+1, т.е. НМ(аа+1), LМ(аа) .

LDAX B, LDAX D загружают аккумулятор содержимым ячейки по адресу, находящемуся в регистровой паре B,C; D,E соответственно .

STAX B,STAХ D передают содержимое аккумулятора в ячейку памяти по адресу, находящемуся в регистровой паре B,C;D,E соответственно.

XCHG осуществляет обмен данными между регистрами H и D , L и E .

SHLD аа загружает две соседние ячейки памяти содержимым регистров H,L : М(байт3,байт2=аа(16)) L , М(аа+1)H.

2. Арифметические команды

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

S

Z

0

AC

0

P

1

b7

b6

b5

b4

b3

b2

b1

b0

где разряд S - индикатор знака, Z - нуля,

AC - вспомогательного переноса,

P - четности, CУ - переноса.

Состояние регистра F используется последующими командами для выполнения и организации управления вычислительным процессом. Рассмотрим команды этой группы:

ADD Ri осуществляет сложение в прямых кодах содержимого аккумулятора и операнда, находящегося в РОН или ячейке памяти.

ADD B код- 80(16), выполняет операцию А=А+В, результат сложения остается в А .

ADD M код- 86(16), складывает содержимое аккумулятора с операндом ячейки памяти по адресу, указанному в регистровой паре H,L .

ADI V код С6(16)выполняет сложение в АЛУ аккумулятора с операндом в команде, результат сложения заносит в А. В данной команде в первом байте располагается КОП, во втором - операнд V .

ADC Ri складывает содержимое А с РОН или ячейкой памяти и в младший разряд сумматора АЛУ прибавляет содержимое младшего разряда регистра F.

ADC M код- 8Е(16)складывает содержимое аккумулятора с ячейкой памяти с адресом, указанным в регистровой паре H,L, и к результату сложения прибавляет СУ. Результат операции передается в А .

ACI V осуществляет сложение аналогично ADI V, кроме того, к младшему разряду сумматора АЛУ прибавляет значение СУ регистра F(сложение с переносом).

DAD RP выполняет двухбайтное сложение регистровой пары RP с содержимым регистровой пары H,L .При наличии переноса Рст из сумматора -СУ=1 ,если его нет , то СУ=0 . Результат заносится в H,L .

DAD B код- 09(16)выполняет операцию HL= BC+HL; СУ=Рст.

SUB Ri позволяет непосредственно вычесть из аккумулятора содержимое РОН или ячейки памяти (A=A-Ri ) и результат вычитания занести в А (сложить в дополнительном коде А=А+ [()+1] без учета знака вычитаемого) эта команда не выявляет переполнения и имеет другие разновидности :

SUI V - вычитание непосредственно из А операнда.

SBB Ri - вычитание с заемом А=А+ [()+1] + [- СУ]д.

SBBV - вычитание непосредственно операнда с заемом А = А - V - СУ.

SBB M осуществляет вычитание A=A-М-СУ посредством сложения содержимого аккумулятора с инвертированным значением операнда, содержащимся в ячейке М, при СУ=1 и А=А++1 при СУ=0. Рассмотрим эту операцию подробнее :

Пусть необходимо вычесть с заёмом из А содержимое ячейки 8204(16).

Пусть А=F8(16), М=30(16), заема не было ; СУ=0.

Тогда в АЛУ под действием команды произойдет сложение:

F 8 (16) 3 0 (16)

1111 1000 A = [ - 8(10)] M= 0011 0000 = 48(10)

+ 1101 0000 [ M]= [-48(10)]

Pст= 1 1100 1000

С 8 (16)А = [-56(10)]

9 2

После сложения F = 92(16), т.е. 1001 0010

Из состояния разрядов регистра флажков видно, что S =1 ,т.е. в результате сложения получено отрицательное число ( разряд 7 результата =1); Z =0(результат не равен 0 ); АС=0 (при сложении младшей тетрады нет переноса ); Р=0 (в результате сложения получилось число с нечетным числом "1" ); СУ=0 (не нужен заём при вычитании из старшего байта; при вычитании СУ=, при выполнении сложения типа ADD СУ=Рст - перенос в старший байт при сложении с повышенной точностью). Если перед вычитанием СУ=1, то, выполняя команду SBB M, получим А=С7, F=92(16). Заметим, что до выполнения команды в H занесен код 82(16), в L- 04(16),а в ячейку 8204(16)записан операнд 30(16).

INR Ri, INR RP являются разновидностями команды ADD, осуществляют прибавление "1" к РОН, ячейке памяти или содержимому регистровой пары .

DCR RI , DCX RP декрементируют содержимое Ri или RP .

DAA корректирует результат сложения, хранящийся в А в двоичном коде, в двоичнодесятичный код <8421>:

при АС =1 или b3b2b1b0(2)>9 прибавляет 6 к младшей тетраде байта,

при СУ=1 или b7b6b5b4(2)>9 прибавляет 6 к старшей тетраде .

Команда DAA после ADD позволяет выполнить сложение в коде D1 .

3. Логические команды

Задачей этих команд является выполнение поразрядной конъюнкции, дизъюнкции , сложения по модулю 2 , сравнения содержимого А и Ri или А и V, а также циклического сдвига операндов в А (таблица 1). Например, команда XRA M( код- AE(16)) осуществляет сложение по модулю 2 содержимого ячейки памяти М, расположенной по адресу, находящемуся в H,L, с аккумулятором, результат операции размещает в А.

Команды сдвига осуществляют сдвиг чисел на один разряд циклически через разряд СУ регистра F

RAL

L1(A,СУ), СУ п b7

RAR

R1(СУ,А), СУ п b0

или с занесением крайних цифр А в разряд СУ регистра

RLC

L1(A,b7), СУ п b7

RRC

R1(b0,A), СУ п b0

При выполнении команд сравнения операндов CMP Ri , CPI V разряды Z и СУ регистра F устанавливаются в значения аналогично операции вычитания.

STC осуществляет присвоение СУ=1;

CMC инвертирует значение переноса СУ=СУ

СМА инвертирует все разряды A=.

4. Команды передачи управления

Четвертая группа команд содержит команды перехода, вызова, возврата и повторного запуска. Эта группа предназначена для изменения естественного порядка следования команд.

JMP aa - безусловный переход к команде, находящейся в ячейке (байт3, байт2 = аа). Второй и третий байты команды загружаются в W,Z и РС, а через регистр адреса, команда извлекает очередную необходимую команду программы.

JNZ аа извлекает команду аналогично JMP только при Z=0, в противном случае извлекается следующая по порядку команда, PC=PC+1. Таким же образом выполняются команды условного перехода JN, JNC, JPO, JPE, JP, JM в зависимости от состояний разрядов Z ,СУ, P, S регистра F.

PCHL передает содержимое регистровой пары H,L в счетчик команд, тем самым следующие команды извлекаются по адресу в РС.

CALL aa вызывает начальную команду подпрограммы, расположенной по адресу аа(16)= байт3 байт2 команды. При этом адрес следующей команды запоминается занесением в стековую память: в ячейку памяти М(SP-1) заносятся старшие разряды РС(РСН), в ячейку М(SP-2)- младшие PCL, значение указателя стека SP уменьшается на 2. Данная команда осуществляет безусловный переход к подпрограмме, однако часто требуется переход к подпрограмме в зависимости от состояния регистра F. Для этой цели используются следующие разновидности команды CALLаа : CNZаа(С4),CZаа(СС),CNCаа(D4),CCaa(DC),CPOaa(E4),CPEaa(EC),CPaa(F4),CMaa(FC).

В этих командах проверяются условия аналогично командам условного перехода и при истинности условий реализуют функции CALLaa , т.е. осуществляют переход к подпрограмме по адресу аа с занесением содержимого РС в стековую память. Если условие не выполняется, реализуется следующая команда РС+1 основной программы .

RET - безусловный возврат к команде основной программы : её адрес загружается из вершины SГ стековой памяти, к указателю стека прибавляется 2. Возможен также возврат по условию с использованием команд: RNZ(C0), RZ(C8), RNC(D0), RC(D8), RPO(E0), RPE(E8), RP(F0), RM(F8).

RSTi*8 - повторный пуск (рестарт) осуществляет прерывание выполнения основной программы, адрес команды основной программы передается в стековую память аналогично командам CALLaa. Счетчик команд загружается фиксированным адресом ППЗУ. Так, команда RST7*8 загружает РС адресом 0038(16)=8*7=56(10). Команды RST позволяют использовать подпрограммы монитора для организации процесса вычислений .

5. Команды ввода и вывода, обращения к стеку и управления микропроцессором

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

INaр - вводит данные в А из порта периферийного устройства, адрес которого определяется вторым байтом команды.

OUTap - выводит данные из А в порт, адрес которого определяется вторым байтом команды.

PUSH RP - помещает содержимое регистровой пары RP в стек. В ячейку М(SP-1) помещает значение старшего регистра, в М(SP-2) - значение младшего регистра пары, указатель стека дважды декрементируется SP=SP-2. Разновидностью этой команды является команда занесения в стек слова состояния процессора PUSH PSW, которая помещает в М( SP - 1) содержимое А, а в ячейку М(SP - 2 ) содержимое F, причем разрядам ячейки М( SP - 2 ) присваиваются b0СУ, b2P, b4АС, b6Z, b7S.

POP RP извлекает из стека в регистровую пару содержимое двух ячеек памяти, в младший регистр загружаются данные из М(SP), в старший - из М(SP+1). К указателю стека прибавляется 2. Разновидностью этой команды является POP PSW , которая из ячейки М(SP) загружает регистр F по следующему правилу : флагу СУb0,Pb2, ACb4, Zb6, Sb7; AM(SP+1).

XTHL осуществляет обмен содержимого H,L с двумя ячейками вершины стека: LM(SP), HM(SP+1).

SPHL передает в указатель стека содержимое регистровой пары H,L.

EI разрешает прерывания. При выполнении EI прерывания не признаются.

DI - после выполнения этой команды микропроцессор игнорирует запросы на прерывания до появления команды DI.

HLT - останов вычислений.

Соседние файлы в папке MCarc580