Программа-тренажер "ЛамПанель"
Использование тренажера "ЛамПанель" для изучения принципов работы компьютера, изучения программирования на языке ассемблера. Выполнение арифметических операций с числами и значениями регистров. Размещение данных в памяти в тренажере "ЛамПанель".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 22.03.2015 |
Размер файла | 232,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Программа «ЛамПанель»
Основные идеи
Программа-тренажёр «ЛамПанель» - это учебная модель компьютера, который управляет панелью лампочек. Тренажёр можно использовать:
· для изучения принципов работы компьютера (процессор, ОЗУ, ПЗУ);
· для начального изучения программирования на языке ассемблера;
· для изучения операций с целыми числами, в том числа поразрядных логических операций и сдвигов.
Модель компьютера включает процессор, оперативную память (ОЗУ), постоянную память (ПЗУ) и устройство вывода - панель лампочек размером 8Ч16. Для демонстрации через проектор можно вывести увеличенную панель, нажав клавишу F10.
Система команд процессора основана на идеях известной в свое время серии 16-разрядных мини-ЭВМ PDP-11. Непосредственным предшественником тренажёра «ЛамПанель» можно считать модель компьютера E97 Е.А. Ерёмина (http://educomp.org.ru/e97/), с которым процессор тренажёра «ЛамПанель» частично совместим по системе команд.
Программа для такого процессора составляется на языке ассемблера, в котором каждая символьная команда соответствует одной (числовой) команде процессора. Программа набирается в окне «Программа». Программу можно сохранять в виде файла на диске, а потом загружать в память из файла (с помощью меню «Файл»).
При запуске (по клавише F9) набранная программа транслируется (переводится в машинные коды, которые появляются в окне «Отладчик») и начинается ее выполнение.
В окне «Данные в памяти» показывается содержимое оперативной памяти, в которой расположены программа и данные (принцип однородности).
Процессор имеет 4 регистра общего назначения (РОН), которые называются R0, R1, R2 и R3. Кроме того, есть еще три внутренних регистра, недоступные программисту (но видимые в окне программы):
· PC (англ. program counter) - программный счетчик, счётчик команд, указывающий на следующую выполняемую команду;
· SP (англ. stack pointer) - указатель стека, адрес вершины стека; стек размещается в нижней части оперативной памяти, его содержимое можно просмотреть в нижней части окна «Данные в памяти»;
· PS (англ. processor state) - регистр состояния процессора; используются только три младших бита: 0 - бит N (англ. negative, отрицательный результат), 1 - бит Z (англ. zero, нулевой результат) и 2 - бит C (англ. carry, перенос).
В качестве устройства вывода используется панель лампочек размером 8Ч16. Каждый ряд лампочек управляется через отдельный порт вывода. Всего используется восемь 16-разрядных портов с именами P0, P1, P2, P3, P4, P5, P6 и P7.
Постоянное запоминающее устройство (ПЗУ) предназначено для хранения системных подпрограмм. Код ПЗУ загружается при старте программы из текстового файла, поэтому пользователь может изменять содержимое ПЗУ: добавлять, удалять и изменять любые процедуры.
Простейшая программа
Программа должна заканчиваться командой stop. Например, самая простая программа:
stop
Команда NOP (англ. no operation, нет операции) - это пустая команда, она ничего не делает. Комментарий начинается символом «точка с запятой»:
nop ; пустая команда
stop
Отладка
Программу можно выполнить всю целиком (клавиша F9) или в пошаговом режиме (F8). В пошаговом режиме в окне отладчика зелёным цветом выделяется текущая строка, которая будет выполнена при следующем нажатии F8. Сочетание клавиш Ctrl+F8 позволяет отменить только что сделанную команду.
Клавиша F7 (вместо F8) позволяет войти в подпрограмму и выполнить ее пошагово (см. раздел «Подпрограммы» ниже).
Если установить курсор в какую-то строчку программы и нажать клавишу F4, программа будет выполняться до этой строчки и затем остановится.
Движок «Скорость» изменяет скорость выполнения программы.
Все команды отладки включены в меню «Программа». Кроме того, они могут выполняться с помощью кнопок панели инструментов:
Трансляция в машинные коды без выполнения (Ctrl+F9). |
||
Трансляция и выполнение (F9). |
||
Выполнить один шаг (F8). |
||
Отменить один шаг (Ctrl+F8). |
||
Войти в подпрограмму (F7). |
||
Выполнить до курсора (F4). |
С помощью меню «Регистры» можно изменить значения любого регистра во время выполнения программы в пошаговом режиме.
Работа с регистрами и портами
Для простейшей обработки данных можно использовать 4 регистра процессора и 8 портов ламповой панели. Основные операции:
· записать данные в регистр, например,
ассемблер |
псевдокод |
|
mov 1234, R0 |
R0:=123416 |
Все числа записываются в шестнадцатеричной системе счисления.
· скопировать значение из одного регистра в другой, например,
ассемблер |
псевдокод |
|
mov R0, R1 |
R1:=R0 |
· вывести значение регистра в порт
ассемблер |
псевдокод |
|
out R0, P1 |
P1:=R0 |
· прочитать значение из порта в регистр
ассемблер |
псевдокод |
|
in P2, R0 |
R0:=P2 |
Пример программы:
ассемблер |
псевдокод |
|
mov 1234, R0 mov R0, R2 out R2, P1 stop |
R0:= 123416 R2:= R0 P1:= R2 стоп |
Арифметические операции
Арифметические операции могут выполняться с числами (константами) и значениями регистров. Результат записывается по адресу второго операнда-регистра (это не может быть число).
· Сложение
ассемблер |
псевдокод |
|
add 1, R1 add R2, R3 |
R1:= R1 + 1 R3:= R3 + R2 |
· Вычитание
ассемблер |
псевдокод |
|
sub 2, R1 sub R2, R3 |
R1:= R1 - 2 R3:= R3 - R2 |
· Умножение
ассемблер |
псевдокод |
|
mul 5, R1 mul R2, R3 |
R1:= R1 * 5 R3:= R3 * R2 |
· Деление
ассемблер |
псевдокод |
|
div 12, R1 div R2, R3 |
R1:= R1 div 12 R3:= R3 div R2 |
Логические операции
Логические операции могут выполняться с числами (константами) и значениями регистров. Результат записывается по адресу второго операнда-регистра (это не может быть число).
· отрицание («НЕ»)
ассемблер |
псевдокод |
|
not R1 |
R1:= not R1 |
· логическое умножение («И»)
ассемблер |
псевдокод |
|
and R0, R1 and 1234, R1 |
R1:= R1 and R0 R1:= R1 and 123416 |
· логическое сложение («ИЛИ»)
ассемблер |
псевдокод |
|
or R0, R1 or 1234, R1 |
R1:= R1 or R0 R1:= R1 or 123416 |
· сложение по модулю 2 («исключающее ИЛИ»)
ассемблер |
псевдокод |
|
xor R0, R1 xor 1234, R1 |
R1:= R1 xor R0 R1:= R1 xor 123416 |
Сдвиги
В командах сдвига первый операнд - это величина сдвига (от 1 до 1016), а второй - регистр.
· логический сдвиг влево и вправо
ассемблер |
псевдокод |
|
shl 2, R1 shr F, R1 |
R1:= R1 shl 216 R1:= R1 shr F16 |
· арифметический сдвиг вправо
ассемблер |
псевдокод |
|
sar 2, R1 |
R1:= R1 sar 216 |
· циклический сдвиг влево и вправо
ассемблер |
псевдокод |
|
rol 2, R1 ror F, R1 |
R1:= R1 rol 216 R1:= R1 ror F16 |
· циклический сдвиг влево и вправо через бит переноса
ассемблер |
псевдокод |
|
rcl 2, R1 rcr F, R1 |
R1:= R1 rcl 216 R1:= R1 rcr F16 |
Метки, сравнения и переходы
Команды перехода используются для выполнения разветвляющихся алгоритмов. Различают безусловный переход (переходить всегда) и условные переходы (переход при выполнении какого-то условия).
Чтобы обозначить место перехода, необходимо создать метку. Метка - это произвольное имя, за которым следует двоеточие. После двоеточия не должно быть никаких символов (метка - это отдельная строка программы).
Безусловный переход имеет формат
jmp метка
Пример программы (бесконечный цикл):
qq:
nop
jmp qq
Условные переходы зависят от битов состояния процессора, которые определяются результатом последней операции:
jge метка ; если больше или равно
jl метка ; если меньше
jnz метка ; если не нуль
jz метка ; если нуль
jle метка ; если меньше или равно
jg метка ; если больше
Пример программы (цикл из 5 шагов):
ассемблер |
псевдокод |
|
mov 5, R1 qq: sub 1, R1 jnz qq |
R1:=5 нц пока R1<> 0 R1:= R1 - 1 кц |
Существует команда сравнения, которая изменяет только биты состояния процессора:
ассемблер |
значение |
|
cmp 2, R1 cmp R0, R1 |
установка битов состояния по значению R1-216 установка битов состояния по значению R1-R0 |
Пример программы:
ассемблер |
псевдокод |
|
cmp 5, R0 jnz aaa add 1, R0 aaa: |
если R0=5 то R0:= R0 + 1 все |
Подпрограммы
Подпрограммы - это вспомогательные алгоритмы, которые можно вызывать по имени. В языке ассемблера имя подпрограммы - это метка. Для вызова подпрограммы используется команда
call метка
Подпрограмма должна заканчиваться командой возврата из подпрограммы
ret
Подпрограммы располагаются в программе ниже основной программы, после команды stop.
Пример программы, которая использует подпрограмму divMod для деления с остатком:
ассемблер |
псевдокод |
|
mov 1234, R0 mov 10, R1 call divMod stop divMod: mov R0, R2 div R1, R0 mul R0, R1 sub R1, R2 mov R2, R1 ret |
R0:= 123416 R1:= 1016 вызвать divMod стоп R2:= R0 R0:= R0 div R1 R1:= R1 * R0 R2:= R2 - R1 R1:= R2 возврат |
Чтобы при отладке выполнять по шагам не только основную программу, но и подпрограмму, при выполнении команды call нужно нажать не F8, а F7.
Работа со стеком
Стек - это структура типа LIFO (англ. Last In - First Out, последним пришел - первым ушел). В современных компьютерах стек размещается в памяти, специальный регистр SP (англ. stack pointer) указывает на начало стека. Для работы со стеком используются всего две команды:
ассемблер |
псевдокод |
|
push R0 pop R0 |
сохранить R0 в стеке «снять» данные с вершины стека в R0 |
Конечно, сохранять в стеке можно не только R0, но и другие регистры.
Стек используется:
· для временного хранения данных
· для хранения адресов возврата из подпрограмм
· для размещения локальных переменных подпрограмм
Пример программы (обмен значений регистров R0 и R1):
ассемблер |
псевдокод |
|
push R0 push R1 pop R0 pop R1 |
R0 - в стек R1 - в стек со стека - в R0 (старое значение R1) со стека - в R1 (старое значение R0) |
Если подпрограмма использует какой-то регистр, которые не содержит исходные данные и не предназначен для записи результата, она должна сохранить его стеке при входе и восстановить старое значение из стека при выходе. Например:
ассемблер |
псевдокод |
|
proc: push R0 ... pop R0 ret |
начало подпрограммы R0 - в стек основное тело подпрограммы со стека - в R0 (старое значение R0) возврат из подпрограммы |
Заметьте, что подпрограмма, приведенная в предыдущем пункте, не совсем грамотно написана - она не сохраняет значение регистра R2, хотя «портит» его во время работы.
Вызов подпрограмм из ПЗУ
ПЗУ в данной модели компьютера - это набор подпрограмм, каждая из которых заканчивается командой ret. Всего в ПЗУ может быть до 256 подпрограмм.
ПЗУ загружается при запуске тренажёра «ЛамПанель» из файла lampanel.rom, который должен находиться в том же каталоге, что и сама программа. Это обычный текстовый файл, который можно редактировать в редакторах типа Блокнота (если, конечно, вы понимаете, что вы делаете). В настоящей версии в ПЗУ включены следующие подпрограммы:
Номер |
Описание |
|
0 |
Очистить все порты панели (выключить все лампочки). |
|
1 |
Установить в FF16 все порты панели (включить все лампочки). |
|
2 |
Записать значение R0 во все порты панели. |
|
3 |
Прокрутить изображение на панели вниз. |
|
4 |
Прокрутить изображение на панели вверх. |
|
5 |
Вывести на панель массив данных, адрес которого находится в R0. |
|
6 |
Выполнить инверсию экрана (применить NOT). |
|
7 |
Операция «И» со всеми портами (R1 - маска). |
|
8 |
Операция «ИЛИ» со всеми портами (R1 - маска). |
|
9 |
Операция «исключающее ИЛИ» со всеми портами (R1 - маска). |
|
A16 |
Логический сдвиг влево всех портов (R1 - величина сдвига). |
|
B16 |
Логический сдвиг вправо всех портов (R1 - величина сдвига). |
|
C16 |
Циклический сдвиг влево всех портов (R1 - величина сдвига). |
|
D16 |
Циклический сдвиг вправо всех портов (R1 - величина сдвига). |
|
E16 |
Арифметический сдвиг вправо всех портов (R1 - величина сдвига). |
|
F16 |
Деление с остатком (R0:=R0 div R1, R1:=R0 mod R1). |
|
1016 |
Вывод цифры на экран (R0 - цифра, R1 - позиция, от 0 до 2) |
|
1116 |
Вывод числа из R0 на экран (R1 - система счисления, от 2 до 16). |
|
1216 |
Вывод числа из R0 на экран в десятичной системе счисления. |
|
1316 |
Вывод числа из R0 на экран в шестнадцатеричной системе счисления. |
Просмотреть содержимое ПЗУ можно с помощью пункта меню «Программа-Просмотр ПЗУ» или кнопки на панели инструментов. Выделив какую-нибудь строчку в левой части окна, мы увидим справа текст выбранной подпрограммы и ее коды:
Для вызова подпрограмм из ПЗУ нужно использовать команду
system номер_подпрограммы
Пример программы:
ассемблер |
псевдокод |
|
system 0 system 1 mov 123, R0 system 12 system 6 mov 1, R1 system A system B system 13 stop |
выключить панель включить все лампочки R0:= 123-16 вывести R0 в десятичной системе инверсия R1:= 1 ; величина сдвига сдвиг экрана влево сдвиг экрана вправо вывести R0 в шестнадцатеричной системе стоп |
Байтовые команды
Все рассмотренные выше команды работают с 16-битными данными (словами). Часто, например, при обработке текстов, нужно использовать однобайтные данные. Для этого предназначены следующие команды, которые полностью аналогичны соответствующим командам без буквы «b» (от англ. byte) на конце:
команда |
значение |
|
movb cmpb shlb shrb sarb rolb rorb rclb rcrb |
копирование байта сравнение двух байтов логический сдвиг влево логический сдвиг вправо арифметический сдвиг вправо циклический сдвиг влево циклический сдвиг вправо циклический сдвиг влево через бит переноса циклический сдвиг вправо через бит переноса |
Команда movb очищает старший байт регистра, в который копируются данные. Например,
ассемблер |
псевдокод |
|
mov 1234, R0 movb 12, R0 |
R0:= 123416 R0:= 1216 |
Остальные команды никак не изменяют старший байт регистра-приемника.
Существует специальная команда для обмена старшего и младшего байтов слова:
swapb регистр
Пример программы:
ассемблер |
псевдокод |
|
mov 1234, R0 swapb R0 |
R0:= 123416 R0:= 341216 |
Работа с данными
тренажер компьютер лампанель программирование
Согласно принципу однородности памяти фон Неймана, данные размещаются в той же области памяти, что и программа (обычно сразу после команды stop).
В тренажере «ЛамПанель» данные - это 16-битные слова (вводятся как числа в шестнадцатеричной системе счисления) или символьные строки, заключенные в двойные кавычки. Для размещения данных в памяти применяется команда data. Например:
... ; основная программа
stop
ddd: ; метка начала блока данных
data 1234 ; слово 123416
data 5678 ; слово 567816
data "Ехал Грека через реку" ; строка
Для того, чтобы работать с этими данными, нужно как-то к ним обратиться. Для этого используется косвенная адресация - в регистре находятся не сами данные, а их адрес в памяти. Рассмотрим пример:
ассемблер |
псевдокод |
|
mov @ddd, R0 swapb (R0) add 2, R0 swapb (R0) stop ddd: data 1234 data 5678 |
R0:= адрес метки ddd переставить байты слова под адресу ddd увеличить адрес на 2 (байта) переставить байты слова под адресу ddd+2 стоп начало блока данных здесь будет 341216 здесь будет 785616 |
Запись @метка означает «адрес метки». Запись (R0) означает «данные, адрес которых находится в R0» - это и есть косвенная адресация.
Косвенную адресацию можно использовать и в других командах, работающих с регистрами.
Обработка массивов
Пусть в блоке данных, который начинается на метке ddd, записан массив, который нужно обработать в цикле. В этом случае удобно использовать косвенную адресацию с автоматическим увеличением адреса. Запись «(R0)+» означает «работать с данными, адрес которых находится в R0, и после выполнения операции увеличить R0». Если команда работает со словом, R0 увеличится на 2, а если с байтом - на 1.
Пример программы:
ассемблер |
псевдокод |
|
mov @ddd, R0 mov 3, R1 loop: swapb (R0)+ sub 1, R1 jnz loop stop ddd: data 1234 data 5678 data 9ABC |
R0:= адрес метки ddd записать в R1 количество шагов цикла начало цикла переставить байты слова под адресу из R0 уменьшить счетчик оставшихся шагов если счетчик не ноль, перейти в начало цикла стоп начало блока данных здесь будет 341216 здесь будет 785616 здесь будет BC9A16 |
Пример программы обработки байтов:
ассемблер |
псевдокод |
|
mov @ddd, R0 loop: movb (r0),r1 or 20,r1 movb r1,(r0)+ cmpb 0,(r0) jnz loop stop ddd: data "ABCD" |
R0:= адрес метки ddd начало цикла R1:= байт слова под адресу из R0 из заглавной буквы сделать строчную записать результат в память сравнить код следующего байта с 0 если не ноль, перейти в начало цикла стоп начало блока данных здесь будет "abcd" |
Самомодифицирующиеся программы
Поскольку данные находятся в той же области памяти, что и программы, программа может изменять свой код во время выполнения. Например, для защиты от взлома может быть использовано шифрование: основной код программы зашифрован, и она сама себя расшифровывает при запуске.
Пример самомодифицирующейся программы:
ассемблер |
псевдокод |
|
jmp decode main: data ba6b data ba98 data 27a8 data 4444 decode: mov @main,r0 mov 4,r1 loop: xor bbbb,(r0)+ sub 1, r1 jnz loop jmp main |
переход на блок расшифровки начало основной части в этом и следующем словах будет "mov 123, R0" здесь будет "system 13" здесь будет "stop" начало блока расшифровки R0:= начало зашифрованного блока R1:= 4 ; нужно расшифровать 4 слова начало цикла расшифровка: xor с маской BBBB16 уменьшить счетчик если счетчик не ноль, перейти на начало цикла перейти на основную программу |
Расширение ПЗУ
Пользователь может добавить свои подпрограммы в ПЗУ. Для этого нужно сначала отладить подпрограмму, а затем сохранить ее в специальном формате с помощью кнопки или пункта меню «Программа - Сохранить как ПЗУ». Например, напишем подпрограмму, которая переставляет биты числа в обратном порядке, используя циклический сдвиг через бит переноса:
ассемблер |
псевдокод |
|
mov 1234, R0 call reverse stop reverse: push R1 push R2 mov 10, R2 xor R1, R1 next-bit: rcl 1, R0 rcr 1, R1 sub 1, R2 jnz next-bit mov R1, R0 pop R2 pop R1 ret |
R0:= 123416 вызов подпрограммы стоп начало подпрограммы сохранить R1 в стеке сохранить R2 в стеке R2:= 16 = 1016 R1:= 0 старший бит R0 попадает в бит переноса бит переноса попадает в старший бит R1 R2:= R2 - 1 если R20, перейти к метке next-bit R0:= R1 восстановить R2 из стека восстановить R1 из стека возврат из подпрограммы |
Отладив эту программу, уберем верхние три строчки, оставив только процедуру, и применяем команду меню «Программа - Сохранить как ПЗУ». Полученный файл (он будет иметь расширение.rom) открываем в любом текстовом редакторе (например, в Блокноте) и добавляем в начало комментарий:
; Перестановка битов R0
; в обратном порядке
;-----------------------
2E10 PUSH R1
2E20 PUSH R2
01D2 MOV 10, R2
0010
0911 XOR R1, R1
9E00 RCL 1, R0
AE01 RCR 1, R1
03D2 SUB 1, R2
0001
4D0D JNZ 000A
FFF4
0110 MOV R1, R0
3E20 POP R2
3E10 POP R1
0D00 RET
Теперь остается добавить (также в текстовом редакторе) этот фрагмент в конец файла lampanel.rom. Новая процедура будет доступна при следующем запуске программы «ЛамПанель».
Приложение
Справочник по языку ассемблера «ЛамПанель»
Регистры:
R0, R1, R2, R3 - регистры общего назначения;
PC - программный счетчик;
SP - указатель стека;
PS - регистр состояния:
бит 0 - знак (бит N, negative),
бит 1 - равенство нулю (бит Z, zero)
бит 2 - бит переноса (бит C, carry).
Обозначения при описании форматов команд:
n - число в шестнадцатеричной системе счисления
Rx - некоторый регистр общего назначения
Px - некоторый порт
Метки:
Метка - это последовательность символов, заканчивающаяся двоеточием. Кроме метки, в строке не должно быть других символов.
Основные команды:
NOP - нет операции
STOP - останов
MOV Ry,Rx - пересылка Rx:=Ry
MOV n,Rx - пересылка Rx:=n
ADD Ry,Rx - сложение Rx:=Rx+Ry
ADD n,Rx - сложение Rx:=Rx+n
SUB Ry,Rx - вычитание Rx:=Rx-Ry
SUB n,Rx - вычитание Rx:=Rx-n
CMP Ry,Rx - сравнение (установка флагов по разности Rx-Ry)
CMP n,Rx - сравнение (установка флагов по разности Rx-n)
MUL Ry,Rx - умножение Rx:=Rx*Ry
MUL n,Rx - умножение Rx:=Rx*n
DIV Ry,Rx - деление Rx:=Rx div Ry
DIV n,Rx - деление Rx:=Rx div n
Логические операции:
NOT Rx - логические «НЕ» (инверсия) Rx:=not Rx
AND Ry,Rx - логическое «И» (конъюнкция) Rx:=Rx and Ry
AND n,Rx - логическое «И» (конъюнкция) Rx:=Rx and n
OR Ry,Rx - логическое «ИЛИ» (дизъюнкция) Rx:=Rx or Ry
OR n,Rx - логическое «ИЛИ» (дизъюнкция) Rx:=Rx or n
XOR Ry,Rx - «исключающее ИЛИ» Rx:=Rx xor Ry
XOR n,Rx - «исключающее ИЛИ» Rx:=Rx xor n
Сдвиги:
SHL n,Rx - логический сдвиг влево Rx:=Rx shl n
SHR n,Rx - логический сдвиг вправо Rx:=Rx shr n
SAR n,Rx - арифметический сдвиг вправо Rx:=Rx sar n
ROL n,Rx - циклический сдвиг влево Rx:=Rx rol n
ROR n,Rx - циклический сдвиг вправо Rx:=Rx ror n
RCL n,Rx - циклический сдвиг влево через перенос Rx:=Rx rcl n
RCR n,Rx - циклический сдвиг вправо через перенос Rx:=Rx rcr n
Байтовые команды:
MOVB Ry,Rx - пересылка младшего байта Rx:=Ry
MOVB n,Rx - пересылка младшего байта Rx:=n
CMPB Ry,Rx - сравнение (установка флагов по разности байтов Rx-Ry)
CMPB n,Rx - сравнение (установка флагов по разности байтов Rx-n)
SHLB n,Rx - логический сдвиг байта влево Rx:=Rx shl n
SHRB n,Rx - логический сдвиг байта вправо Rx:=Rx shr n
SARB n,Rx - арифметический сдвиг байта вправо Rx:=Rx sar n
ROLB n,Rx - циклический сдвиг байта влево Rx:=Rx rol n
RORB n,Rx - циклический сдвиг байта вправо Rx:=Rx ror n
RCLB n,Rx - циклический сдвиг байта влево через перенос Rx:=Rx rcl n
RCRB n,Rx - циклический сдвиг байта вправо через перенос Rx:=Rx rcr n
SWAPB Rx - поменять местами байты в регистре Rx
Переходы:
JMP адрес или метка - безусловный переход
JGE адрес или метка - если больше или равно
JL адрес или метка - если меньше
JNZ адрес или метка - если не нуль
JZ адрес или метка - если нуль
JLE адрес или метка - если меньше или равно
JG адрес или метка - если больше
Процедуры:
CALL адрес или метка - вызов процедуры
SYSTEM номер - вызов процедуры из ПЗУ с заданным номером
RET - возврат из процедуры
Размещение данных:
DATA число - число записывается в память как слово
DATA "строка" - символьная строка записывается в память
Работа со стеком:
PUSH Rx - сохранить в стеке регистр Rx
POP Rx - восстановить из стека регистр Rx
Работа с портами, которые управляют лампочками:
Порты: P0, P1, P2, P3, P4, P5, P6, P7. Все порты доступны на чтение и запись.
IN Py,Rx - ввод из порта Py в регистр Rx
OUT Rx,Py - вывод из регистра Rx в порт Py
Относительная адресация:
MOV @метка,Rx - записать адрес метки в регистр Rx
(Rx) - операнд находится в ячейке, адрес которой записан в регистре Rx
(Rx)+ - то же самое, но после выполнения операции значение Rx увеличивается на 2 для команды, работающей со словом, и на 1 для байтовой команды
Размещено на Allbest.ru
...Подобные документы
Изучение структуры компьютера и принципов его функционирования. Центральный процессор и основной цикл его работы. Выполнение арифметических операций в ЭВМ. Разработка программы реализации арифметического выражения и отладка ее с помощью отладчика TD.
контрольная работа [87,3 K], добавлен 12.03.2011Основные особенности программы-тренажера. Алгоритм изучения основ технологии разреженных матриц, основанный на пошаговом теоретическом объяснении, сопровожденным анимацией и комплексом задач для закрепления темы. Информирование о допущенных ошибках.
реферат [466,1 K], добавлен 13.05.2016Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, вычитание, произведение, деление. Программная реализация решения задачи. Пример выполнения программы.
курсовая работа [398,8 K], добавлен 01.02.2010Разработка компьютерного тренажера-эмулятора, содержащего текстовую и графическую информацию. Расчёт экономических показателей. Методы разработки трех режимов данного тренажера. Презентация результатов работы. Внедрение разработки в учебный процесс.
дипломная работа [10,4 M], добавлен 12.04.2014Проведение четырех основных арифметических операций над целыми числами – подзадача, реализованная в большинстве пользовательских программ. Реализация многоэтапных алгоритмов вычисления. Список макросов, процедур и описание их функциональной нагрузки.
курсовая работа [25,9 K], добавлен 17.05.2013Создание программы ввода с клавиатуры двух чисел в 9-ричной системе счисления размером с слово, выполнение над ними деления и вывода результата в исходной системе счисления. Программа предусматривает контроль вводимой информации и результат операции.
лабораторная работа [11,3 K], добавлен 13.02.2009Запоминающие устройства компьютера. Создание системы памяти. Характеристика микросхем динамических запоминающих устройств. Выполнение арифметических, логических или служебных операций. Ярусно-параллельная форма алгоритма. Степень и уровни параллелизма.
презентация [2,4 M], добавлен 28.03.2015Разработка компьютерного тренажера с функциями демонстрации режимов работы устройства, тренингом простейших операций на эмуляторе "Тренинг" и контроля выполнения комплексных операций на эмуляторе "Экзамен". Определение себестоимости программного продукта.
дипломная работа [8,9 M], добавлен 21.04.2014Написание модуля на языке Ассемблер для вычисления значения выражения. Составление программы корректного ввода исходных данных в таблицу и вывода результата в виде таблицы. Создание модуля для обработки строк и программы корректного ввода исходных данных.
курсовая работа [36,8 K], добавлен 18.09.2010Сохранение и обработка документов в памяти компьютера с помощью Microsoft Word. Выполнение операций над строками с помощью Excel: ввод формул и текста. Файловые структуры данных, Ethernet и Интернет технологии, язык HTML и топология локальных сетей.
дипломная работа [4,2 M], добавлен 12.06.2011Двоично-десятичный формат (BCD - Binary Coded Decimal). Преобразование ASCII формата в двоичный формат. Арифметические инструкции и флаги. Форматы арифметических данных. Выполнение арифметических операции. Сложение. Вычитание. Умножение. Деление.
доклад [16,2 K], добавлен 22.09.2008Выполнение арифметических операций с помощью вспомогательных переменных, которые позволяют вычислить искомую переменную. Использование оператора цикла с предусловием и полной формы условного оператора. Примеры решения задач на работу с двумерным массивом.
курсовая работа [518,8 K], добавлен 07.03.2014Классификация основных видов памяти компьютера. Использование оперативной памяти для временного хранения данных, используемых для работы программного обеспечения. Расчет потребления электроэнергии, формирование квитанции для потребителя в Microsoft Excel.
курсовая работа [1,5 M], добавлен 23.04.2013Арифметические операции с целыми числами. Сложение и вычитание в дополнительном коде. Представление чисел в формате с плавающей точкой. Особенности выполнения арифметических операций в соответствии с IEEE. Точность выполнения арифметических операций.
контрольная работа [5,6 M], добавлен 19.05.2010Представление данных в цифровых автоматах, методы контроля их работы. Построение алгоритма реализации численного метода "быстрой сортировки", построение кода и блок-схемы Хемминга. Выполнение арифметических и логических исчислений с целыми числами.
курсовая работа [98,7 K], добавлен 22.12.2009Обзор стрелковых тренажеров, их достоинств и недостатков. Выбор веб-камеры, разработка общего алгоритма программы. Реализация спускового крючка. Создание пристрелки для настройки тренажера. Линейная аппроксимация, нахождение координат точки прицеливания.
дипломная работа [3,4 M], добавлен 26.12.2014Особенности настройки панели быстрого запуска в Windows. Принцип работы оптических накопителей информации. Изменение параметров настроек компьютера. Запись арифметических выражений на языке программирования Qbasic. Функции командного процессора "FAR".
контрольная работа [7,0 M], добавлен 06.08.2009Устройство для хранения информации. Оперативное запоминающее устройство компьютера. Постоянное запоминающее устройство. Составные части основной памяти. Энергозависимость, устройство регистра и назначение памяти. Выполнение операций записи и считывания.
презентация [285,9 K], добавлен 14.10.2013Разработка программных продуктов на языке программирования Borland Delphi. Применяемые таблицы и связи между ними. Пользовательский интерфейс работы с базой данных. Алгоритм работы программы "Футбольные команды и игроки". Защита от ввода неверных данных.
курсовая работа [788,1 K], добавлен 22.06.2011Клавиатурный тренажер как эффективная программа для получения и усовершенствования навыка набора текста. Инструкция пользователя для работы с ней. Описание алгоритма решения задачи. Цель использования функции "Уровня скорости", компонента Таймер.
курсовая работа [301,6 K], добавлен 31.03.2010