Программа-тренажер "ЛамПанель"

Использование тренажера "ЛамПанель" для изучения принципов работы компьютера, изучения программирования на языке ассемблера. Выполнение арифметических операций с числами и значениями регистров. Размещение данных в памяти в тренажере "ЛамПанель".

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.