Краткое описание микропроцессора К181ВМ86 (Раздаточные материалы), страница 2
Описание файла
Файл "Краткое описание микропроцессора К181ВМ86" внутри архива находится в папке "Раздаточные материалы". Документ из архива "Раздаточные материалы", который расположен в категории "". Всё это находится в предмете "элементы электронной и микропроцессорной техники" из 8 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "элементы электронной и микропроцессорной техники" в общих файлах.
Онлайн просмотр документа "Краткое описание микропроцессора К181ВМ86"
Текст 2 страницы из документа "Краткое описание микропроцессора К181ВМ86"
Полный список и описание всех команд процессора можно найти в меню help: Documentation and tutorials/8086 Instruction Set.
Для запуска набранной программы используется кнопка emulate на панели инструментов. При этом открывается окно эмулятора (рис.3):
Рис.3
В открывшемся окне эмулятора можно управлять режимом работы программы: кнопка single step позволяет использовать пошаговый режим, run – запустить программу на выполнение. В левой части окна выводятся значения всех регистров общего назначения, их можно просматривать и изменять по ходу выполнения программы; кроме того, двойной щелчок мыши по окошку со значением регистра позволяет вывести на экран окно расширенного просмотра значений регистров в различных кодировках. В центральной части окна эмулятора находятся номера и содержимое ячеек памяти (подсвечиваются ячейки, соответствующие следующей строке программы), в правой части – обработанный текст выполняемой программы. Содержимое регистра флагов можно просматривать и изменять с помощью кнопки flags в левом нижнем углу. При помощи регулятора step delay можно устанавливать задержку между выполнением шагов программы.
Порядок выполнения работы
1.Ознакомьтесь с работой эмулятора:
-
запустите программу emu8086.exe
Рис.4
В окне приветствия (рис.4) выберите вариант new, далее (рис.5) выберите empty workspace.
Рис.5
-
для примера напишите программу занесения числа 1234h в регистр AX:
Рис.5
-
запустите ее нажатием клавиши F5 или кнопки emulate на панели инструментов, откроются окна эмулятора (рис.3) и кода программы (рис.7):
Рис.6
-
запустите программу на выполнение в пошаговом режиме и проследите за изменением значения регистров AX и IP (содержимое изменившиеся при выполнении команды регистров выделяется синим цветом), затем перезагрузите программу нажатием кнопки reload и выполните ее с помощью кнопки run
-
просмотрите содержимое регистра флагов, нажав кнопку flags; измените значение флага паритета PF на 1
2. Напишите программы, выполняющие следующие действия:
1. Команда загрузки и пересылки данных (команда MOV)
-
загрузить регистр CX числом ABCDh
-
переслать содержимое CX в регистр AX
-
загрузить ячейку памяти текущего сегмента без смещения (смещение 0) числом FFh
-
задать в качестве базы сегмента DS=200h, предварительно записав это число в регистр DX; загрузить ячейку 02100h числом AAh (смещение 100h)
-
записать в регистр BX смещение 200h и загрузить ячейку 02200h числом BBh (смещение [BX])
-
записать в регистр SI индекс 20 и загрузить ячейку 02220h числом CCh, используя сегмент с базой DS=200h и смещение [BX+SI]
-
загрузить ячейку 02222h числом DDh, используя сегмент с базой DS=200h и смещение [BX+SI+2]
2. Однооперандные команды
-
загрузить регистр DX числом 5
-
увеличить содержимое регистра DX на единицу (команда INC)
-
перенести содержимое регистра DX в ячейку памяти 01100h
-
уменьшить содержимое ячейки 01100h на единицу (команда DEC)
-
инвертировать содержимое регистра DX (команда NOT)
3. Двухоперандные команды
а) Арифметические операции:
-
сложить числа 1Bh и 1Ch, используя регистры BX и CX, результат записать в CX (команда ADD)
-
вычесть из содержимого регистра CX константу 10b, результат записать в AX (команда SUB)
-
содержимое регистра AX разделить на 10h, предварительно записав делитель в регистр BX (команда DIV)
-
остаток от деления (находится в регистре DX) умножить на 2 (команда MUL)
б) Логические операции:
-
записать в ячейку памяти 01100h число 101101b, в регистр AX число 110001b, выполнить для них логическое умножение, результат записать в ячейку 01100h (команда AND)
-
записать в регистр AX число 111010b, выполнить логическое сложение между содержимым AX и ячейки памяти 01100h, результат записать в регистр AX (команда OR)
-
выполнить операцию сумма по модулю 2 для содержимого регистра AX и числа 001001b (команда XOR)
4. Команды сдвига
-
занести в регистр BX число 25h, умножить его на 2, используя операцию арифметического сдвига (команда SAL)
-
занести в ячейку памяти 01200h число 40h, разделить его на 4, используя операцию арифметического сдвига (команда SAR)
5. Команды управления программой
а) Цикл (команда LOOP)
-
занести в регистр CX число 10 (количество повторений цикла)
-
установить в качестве базы сегмента DS=0100h, занести в регистр BX смещение 0101h
-
установить метку начала выполнения цикла вида label:
-
тело цикла: занести число AAh в ячейку, смещение которой относительно базы DS указано в регистре BX, и увеличить содержимое BX на 1
-
после записи тела цикла перейти по метке label
После выполнения программы число AAh должно быть записано в ячейки с 01101h по 0110Ah
б) Условный переход (команда JC)
-
занести число FFh в регистр AL
-
увеличить содержимое регистра AL на AAh
-
если бит переноса не равен единице, записать в регистр BX число ABCDh, иначе завершить программу (переход по метке к концу программы)
в) Безусловный переход (команда JMP)
-
занести в ячейку 01100h число С3h (код команды RET)
-
написать программу сложения чисел Ah и Bh, используя регистры DL и DH
-
для окончания выполнения программы перейти по адресу 01100h
Команда | Операнды | Описание | Пример | Регистр флагов | ||||||||||||
ADD | REG, memory memory, REG REG, REG memory, immediate REG, immediate | Сложение Алгоритм: операнд 1=операнд1+операнд2 | Сложение 5 и -3: MOV AL, 5 ; AL = 5 ADD AL, -3 ; AL = 2 RET |
| ||||||||||||
AND | REG, memory memory, REG REG, REG memory, immediate REG, immediate | Логическое И, результат сохраняется в операнд1 Применяются правила: 1 AND 1 = 1 | Сложение по И чисел 1100001b и 11011111b: MOV AL, 'a' ; AL = 01100001b AND AL, ; AL = 01000001b ('A') RET |
| ||||||||||||
DEC | REG memory | Декрементация Алгоритм операнд=операнд-1 | Уменьшение 255 на1: MOV AL, 255 ; AL = 0FFh (255 or -1) DEC AL ; AL = 0FEh (254 or -2) RET |
| ||||||||||||
DIV | REG memory | Деление (без знака) Алгоритм: 1)операнд - байт: AL=AX/операнд, AH = остаток 2)операнд – слово: AX=(DX AX)/операнд, DX =остаток | Деление 203 на 4: MOV AX, 203 ; AX = 00CBh MOV BL, 4 DIV BL ; AL = 50 (32h), AH = 3 RET |
| ||||||||||||
HLT | - | Прекращение выполнения программы | MOV AX, 5 HLT |
| ||||||||||||
INC | REG memory | Инкрементация Алгоритм: операнд=операнд+1 | Увеличение 4 на 1: MOV AL, 4 INC AL ; AL = 5 RET |
| ||||||||||||
JC | Метка | Короткий переход, если бит переноса равен 1. Алгоритм: если CF = 1 то переход | Проверка наличия бита переноса: include 'emu8086.inc' ORG 100h MOV AL, 255 ADD AL, 1 JC label1 PRINT 'no carry.' JMP exit label1: PRINT 'has carry.' exit: RET |
| ||||||||||||
JMP | Метка 4-хбайтный адрес | Безусловный переход (перемещение к другой части программы). 4-х байтный адрес может вводиться в виде: 1234h:5678h, первое значение – база сегмента, второе – смещение. Алгоритм: переход по метке (всегда) | Выполнить прыжок через 2 строки, напечатать “Got Here!”, если прыжок выполнен: include 'emu8086.inc' ORG 100h MOV AL, 5 JMP label1 PRINT 'Not Jumped!' MOV AL, 0 label1: PRINT 'Got Here!' RET |
| ||||||||||||
LOOP | метка | Декрементация CX, переход к метке, если CX не равен нулю Алгоритм: CX=CX -1 если CX <> 0 то переход иначе продолжить | Напечатать “loop” 5 раз: include 'emu8086.inc' ORG 100h MOV CX, 5 label1: PRINTN 'loop!' LOOP label1 RET |
| ||||||||||||
MOV | REG, memory memory, REG REG, REG memory, immediate REG, immediate SREG, memory memory, SREG REG, SREG SREG, REG | Копирование операнда2 в операнд1 Команда MOV не может: 1.устанавливать значение регистров CS и IP. 2.копировать значение одного сегментного регистра в другой сегментный регистр (необходимо сначала скопировать в регистр общего назначения). 3.копировать непосредственное значение в сегментный регистр Алгоритм: операнд1=операнд2 | Занесение числа ABh в регистр AL, пересылка его в ячейку памяти с адресом 01101h: MOV AL, 0ABh MOV BX, 0100h MOV DS, BX MOV [BX+1], AX RET |
| ||||||||||||
MUL | REG memory | Умножение (без знака) Алгоритм: 1)операнд - байт: AX = AL * операнд 2)операнд - слово: (DX AX) = AX*операнд | Умножение 200 на 4: MOV AL, 200 MOV BL, 4 MUL BL ; AX = 0320h (800) RET |
CF=OF=0, если старший бит результата равен нулю | ||||||||||||
NOP | - | Нет операции | Ничего не делать 2 раза: NOP NOP RET |
| ||||||||||||
NOT | REG memory | Инвертирует все биты операнда Алгоритм: 1.если бит равен 1, то приравнять бит 0 2.если бит равен 0, то приравнять бит 1 | Инвертировать число 11011b: MOV AL, 00011011b NOT AL ; AL = 11100100b RET |
| ||||||||||||
OR | REG, memory memory, REG REG, REG memory, immediate REG, immediate | Логическое ИЛИ между всеми битами двух операндов. Результат сохраняется в первом операнде. Применяются правила: 1 OR 1 = 1 1 OR 0 = 1 0 OR 1 = 1 0 OR 0 = 0 | Сложение по ИЛИ 1000001b и 100000b: MOV AL, 'A' ; AL = 01000001b OR AL, 00100000b ; AL = 01100001b ('a') RET |
| ||||||||||||
RET | - immediate | Возврат из процедуры Алгоритм: 1.вытолкнуть из стека: IP 2.если операнд – константа: SP=SP+operand | Вызов процедуры занесения числа 1234h в регистр AX, увеличение его на 1 ORG 100h ; for com file CALL p1 ADD AX, 1 RET p1 PROC MOV AX, 1234h RET p1 ENDP |
| ||||||||||||
SAL | memory, immediate REG, immediate memory, CL REG, CL | Арифметический сдвиг операнда 1 влево. Число сдвигов устанавливается операндом 2 (константа либо значение регистра CL) Алгоритм: 1.Сдвиг всех бит влево, старший бит записывается в CF. 2.В качестве младшего бита записывается 0. | Сдвиг числа E0 влево 1 раз: MOV AL, 0E0h ; AL = 11100000b MOV CL, 1 SAL AL, CL ; AL = 11000000b, CF=1. RET |
OF=0 если знак операнда1 сохраняется. | ||||||||||||
SAR | memory, immediate REG, immediate memory, CL REG, CL | Арифметический сдвиг операнда1 вправо. Число сдвигов устанавливается операндом2 (константа либо значение регистра CL) Алгоритм: 1.Сдвиг всех бит вправо, младший бит заносится в CF. 2.Старший бит (бит знака) устанавливается в то же значение, что было раньше. | Сдвиг числа E0 вправо 2 раза (бит знака равен 1): MOV AL, 0E0h ; AL = 11100000b SAR AL, 2 ; AL = 11111000b, CF=0. RET Сдвиг числа 4C вправо 1 раз (бит знака равен 0): MOV BL, 4Ch ; BL = 01001100b SAR BL, 1 ; BL = 00100110b, CF=0 RET |
OF=0 если знак операнда1 сохраняется. | ||||||||||||
SUB | REG, memory memory, REG REG, REG memory, immediate REG, immediate | Вычитание Алгоритм: операнд1=операнд1-операнд2 | Вычитание 2 из 5: MOV AL, 5 SUB AL, 2 ; AL = 3 RET |
| ||||||||||||
XOR | REG, memory memory, REG REG, REG memory, immediate REG, immediate | Сумма по модулю 2 (исключающее ИЛИ) между всеми битами двух операндов. Результат сохраняется в первом операнде. Применяются правила: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 1 = 1 0 XOR 0 = 0 | Сумма по модулю два чисел 111b и 10b: MOV AL, 00000111b XOR AL, 00000010b ; AL = 00000101b RET |
|
Примечания
REG – регистр общего назначения: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP
SREG – сегментный регистр: DS, ES, SS, только в качестве второго операнда - CS
Memory – ячейка памяти: [BX], [BX+SI+7], var, etc...
Immediate – непосредственный ввод значения.
В описании регистра флагов:
1 – флаг устанавливается в 1
0 – флаг устанавливается в 0
r – значение флага зависит от результата операции
? – значение флага не определено
- - значение флага не изменяется
Литература:
Микропроцессорный комплект К1810: Структура, программирование, применение: Справочная книга / Под ред. Ю.М.Казаринова. – М.: Высш. шк., 1990.