Разработка программы-отладчика. Дипломная (ВКР). Информационное обеспечение, программирование.

Разработка программы-отладчика. Дипломная (ВКР). Информационное обеспечение, программирование.




🛑 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻


























































Информационное обеспечение, программирование

Вы можете узнать стоимость помощи в написании студенческой работы.


Помощь в написании работы, которую точно примут!

Похожие работы на - Разработка программы-отладчика

Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе

Нужна качественная работа без плагиата?

Не нашел материал для своей работы?


Поможем написать качественную работу Без плагиата!

Министерство
Образования и Науки Украины


Севастопольский
Национальный Технический Университет


Кафедра
Кибернетики и вычислительной техники






















Курсовой
проект по дисциплине «Программирование»








.       Анализ структуры
микропроцессора и выбор моделирующих переменных


.       Описание входных и выходных
данных


.       Разработка программы
(алгоритм, логика программы)


Ассе́мблер
(сборщик) - компьютерная программа, компилятор исходного текста программы,
написанной на языке ассемблера, в программу на машинном языке.


Ассемблирование может быть не первым и не
последним этапом на пути получения исполнимого модуля программы. Так, многие
компиляторы с языков программирования высокого уровня выдают результат в виде
программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер.
Также результатом ассемблирования может быть не исполнимый, а объектный модуль,
содержащий разрозненные блоки машинного кода и данных программы, из которого
(или из нескольких объектных модулей) в дальнейшем с помощью
программы-компоновщика может быть скомпонован исполнимый файл.


Процесс трансляции программы на языке ассемблера
в объектный код принято называть ассемблированием. В отличие от компилирования,
ассемблирование - более или менее однозначный и обратимый процесс. В языке
ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время
как в языках программирования высокого уровня за каждым выражением может
скрываться большое количество различных инструкций. В принципе, это деление
достаточно условно, поэтому иногда трансляцию ассемблерных программ также называют
компиляцией. После ассемблирования полученный объектный код понятен для
процессора и успешно им выполняется.


Курсовой проект посвящён разработке программной
модели процессора. Он делится на 3 части : разработка программы ассемблера,
которая из текстового набора команд будет генерировать объектный код, понятный
процессору; разработка программы отладчика, которая непосредственно выполняет
команды, изложенные в объектном коде; разработка интерфейса для удобного
взаимодействия и связи вышеупомянутых программ.


Данный вариант курсового проекта посвящён
разработке программы-отладчика, использующую некоторую систему команд.
Программа отладчик непосредственно выполняет команды, написанные на языке
Ассемблер и транслированные в объектный код. Предполагается, что
программа-ассемблер, генерирующая объектный файл, уже разработана и производит
трансляцию корректно.







Разработать программную модель микропроцессора,
разработать программу кросс отладки. Предусмотреть выполнение пошагового режима
отладки. Отладчик должен имитировать рабочий цикл процессора для каждой
команды. Регистры процессора однобайтные, объем оперативной памяти 256 байт.


Согласно варианту, была предложена следующая
структура модели микропроцессора:




Согласно варианту, была предложена следующая
система команд.




Команды ассемблера имеют длину один или два
байта. Биты 0-3 первого байта определяют код в соответствии с таблицей команд
(биты 0-3). Биты 4-7 первого байта задают регистры (если они есть).


Регистры A, B, C, D соответсвуют двоичным кодам
00, 01, 10, 11 соответственно.


Второй байт (если есть) задаёт адрес памяти или
константу (в зависимости от команды).


в регистр команд заносится значение 0000


в промежуточные регистры заносятся значения
регистра1, регистра2


результат сложения заносится в регистр1


команда однобайтная, следовательно СЧАК
увеличиваем на 1


в регистр команд заносится значение 0001


в промежуточные регистры заносятся значения
регистра1, второй операнд берётся по указанному адресу памяти (подгружается
второй байт)


результат сложения заносится в регистр1


команда двухбайтная, следовательно СЧАК
увеличиваем на 2


в регистр команд заносится значение 0010


в промежуточные регистры заносятся значения
регистра1, регистра2


производится поразрядное умножение двух чисел
(логическое И)


формируются все флаги, кроме переполнения


результат сложения заносится в регистр1


команда однобайтная, следовательно СЧАК
увеличиваем на 1


в регистр команд заносится значение 0011


в промежуточные регистры заносятся значения
регистра1, регистра2


производится поразрядное сложение двух чисел
(логическое ИЛИ)


формируются все флаги, кроме переполнения


результат сложения заносится в регистр1


команда однобайтная, следовательно СЧАК
увеличиваем на 1


в регистр команд заносится значение 0100


в промежуточный регистр заносятся значения
регистра


производится поразрядная инверсия числа


формируются все флаги, кроме переполнения


результат сложения заносится в регистр


команда однобайтная, следовательно СЧАК
увеличиваем на 1


в регистр команд заносится значение 0101


-в заданный регистр заносится константа
(подгружается второй байт)


команда двухбайтная, следовательно СЧАК
увеличиваем на 2


в регистр команд заносится значение 0110


в заданный регистр заносится значение, взятое из
памяти по указанному адресу (подгружается второй байт)


команда двухбайтная, следовательно СЧАК
увеличиваем на 2


в регистр команд заносится значение 0111


в заданный адрес памяти загружается значение
регистра (подгружается второй байт)


команда двухбайтная, следовательно СЧАК
увеличиваем на 2


в регистр команд заносится значение 1000


производится безусловный переход программы по
указанному адресу,


СЧАКу присваивается значение адреса


в регистр команд заносится значение 1001


проверяется значение флага нуля. Если true, то
производится переход программы по указанному адресу, т.е СЧАКу присваивается
значение адреса. Если false, продолжается выполнение программы, СЧАК
увеличиваем на 2.


в регистр команд заносится значение 1010


проверяется значение флага переполнения. Если
true, то производится переход программы по указанному адресу, т.е СЧАКу
присваивается значение адреса. Если false, продолжается выполнение программы,
СЧАК увеличиваем на 2.


в регистр команд заносится значение 1011


проверяется значение флага отрицательности
числа. Если true, то производится переход программы по указанному адресу, т.е
СЧАКу присваивается значение адреса. Если false, продолжается выполнение
программы, СЧАК увеличиваем на 2.


в регистр команд заносится значение 1100


проверяется значение флага нуля. Если true, то
продолжается выполнение программы, СЧАК увеличиваем на 2. Если false, то
выполняется переход по указанному адресу, т.е СЧАКу присваивается значение
адреса, выполняется декремент регистра (вычитание единицы)


в регистр команд заносится значение 1101


значение всех флагов устанавливается в false.
СЧАК увеличиваем на 1 , т.к команда однобайтная.


в регистр команд заносится значение 1110


в регистр D заносится значение СЧАКа+2 (т.к при
возврате выполнение программы будет начинаться уже со следующей команды)


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


в регистр команд заносится значение 1111


производится возврат из подпрограммы, значению
СЧАКа присваивается текущее значение регистра D. (туда был занесён предыдущий
адрес командой CALL)


арифметическо-логические (ADD, AND, OR, NOT)


команды для пересылки данныъ (MOV, LOAD, STORE)


команды перехода (JMP, JO, JZ, JL, JNZC)


При вызове арифметическо-логической команды
операнды(или операнд) передаются в АЛУ. Только эти команды формируют флаги.


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


При вызове команды перехода изменяется только
СЧАК. В большинстве команд проверяется, установлены ли некоторые флаги.


Список команд, количество байтов, их структура и
примеры приведены в таблице:




В объектном файле перед байтами команды должен
присутствовать байт [01]. Он определяет, что следующий байт будет командой, а
не адресом.


Однако, если присутствует команда ORG, которая
задаёт адрес памяти, перед ней должен быть байт [00].


Если неважно, какое значение находится в части
байта, то эти биты заполняются нулями. Однако отладчик не использует их в
программе, поэтому теоретически там могут находиться любые значения.




. Анализ структуры микропроцессора и выбор моделирующих
переменных




Согласно структуре, микропроцессор содержит:


4 регистра общего назначения (A. B. C. D)


Оперативную память 256 байт, у которой есть
адрес и данные, которые хранятся по указанному адресу


СЧАК - счётчик адреса команд. С его помощью осуществляется
перемещение по памяти, доступ и запись данных в память


Регистр команд - переменная, значение которой
будет соответствовать определённой команде процессора.


АЛУ - Арифметическо-логическое устройство -
осуществляет действия над числами, такие как : сложение, побитовое И, побитовое
ИЛИ, инверсия.


Промежуточные регистры - при выполнении операций
сложения, побитового И, побитового ИЛИ, инверсии два (или один) операнда
заносятся в них для последующей передачи в АЛУ.


Результат - после выполнения операций над
операндами(если они есть), результат передаётся в регистр или в память по
адресу, в зависимости от команды.


Флаги - формируются, если выполнялась
арифметическая или логическая операция. Флаг переполнения, флаг нуля, и флаг
отрицательности числа. В данной структуре они не влияют на результат.


Для реализации регистров целесообразно применить
объект - для более удобного доступа. Так же объект будет удобен для передачи в
методы в качестве параметра. В объекте полями будет выступать массив из 4-х
элементов - 4 регистра A, B, C, D. Тип - числовой.


Для реализации оперативной памяти так же
целесообразно применить объект - причины рассмотрены в предыдущем пункте. В
объекте полями будет выступать массив из 256 элементов - объём памяти. Тип -
числовой.


АЛУ удобнее всего будет реализовать отдельным
классом для упорядоченности кода программы. На основе класса создать экземпляр,
через который и будет осуществляться доступ к методам - сложение, И, ИЛИ, НЕ.
Эти методы должны возвращать некоторый результат. Так же АЛУ будет формировать
флаги, которые удобно сделать статическими переменными этого класса. Тип -
логический.


Переменную СЧАК необходимо сделать статической,
т.к к ней будет постоянное обращение, возможно из разных классов. Тип -
числовой.


Для реализации Регистра Команд необходимо
использовать переменную. В неё будут заносится номера команд и, в зависимости
от её значения, будут выполняться соответствующие операции. Тип - числовой.


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




. Описание входных и выходных данных




В качестве исходных данный программа использует
объектный файл - файл, содержащий набор команд в виде байтов. Данный файл
должен быть получен с помощью программы-ассемблера. Однако каждый перед каждым
байтом команды обязательно должен быть байт-определитель [01]. Это значит, что
следующий байт будет командой, а не адресом для записи в память. Причина этой
необходимости - команда ORG, которая произвольно задаёт ячейку памяти, которую
будет занимать следующая команда или данные при загрузке в память. По умолчанию
данные в память загружаются подряд, без пропусков. Однако при выполнении
программы команда ORG не выполняется.


Для того, чтобы отладчик мог определить, какой
байт будет означать адрес записи, а какой байт - команду или данные,
используется байт-определитель, который принимает значение [00] - если
следующий байт - адрес памяти, куда будут загружаться следующие команды, или
[01] - если следующий байт - команда или данные. Пример содержимого объектного
файла addload.bin (байт-определитель выделен) :


В этой программе сначала задаётся адрес, по
которому отладчик должен загружать данные в оперативную память.


Любая программа должна начинаться с адреса (ORG)


Далее следуют байты команд, перед которыми
байт-определитель - [01].


Перед любым байтом команды должен присутствовать
байт [01]


В конце программы - байт [00], однако он не
обязателен, только для логичности вида программы.


При несоблюдении этих правил при формировании
объектного файла, программа будет выполняться некорректно. Формирование,
редактирование и приведение в правильный вид объектного файла - задача
программы-ассемблера.


В результате этих действий, объектный файл
преобразуется в набор команд, которые необходимо выполнить процессору.


В результате выполнения программы (полного или
пошагового) мы должны увидеть:


Состояние памяти в определённый момент выполнения
программы ;


Значение регистров в определённый момент
выполнения программы;


Значение СЧАК в определённый момент выполнения
программы;


Значение Регистра Команд в определённый момент
выполнения программы;


Значение Флагов в определённый момент выполнения
программы;


А так же мы должны знать (в случае пошагового
выполнения), выполнена ли программа или остались ещё невыполненные команды.





Необходимо разбить программу на подзадачи (для
упорядочивания кода).


Интерфейс (Вывод данных, действия пользователя)


Считывание объектного файла - это процесс
побайтного считывания данных с целью последующей их обработки. Для считывания
можно создать отдельный класс, методы которого будет вызывать основная
программа.


При считывании данных перед их записью в память
необходима моментальная обработка - а именно :


Определение типа байта - команда(данные) или
адрес.


Определение адреса, куда запишется следующий
байт.


Запись только значимых байтов -
байты-определители и адреса в память не записываются


Непосредственно запись байтов в оперативную
память


Необходимо предусмотреть ошибочную ситуацию,
когда память выходит за пределы допустимой (СЧАК >=256)


Если в памяти есть невыполненные команды -
выполнять их. Выполнение команд происходит по алгоритму:


определяются первые 4 бита. Эти биты соответсвуют
командам


однобайтная - определяются остальные биты, если
надо. 5-6 и 7-8 биты соответствуют регистрам. В зависимости от команды, эти
биты могу использоваться, а могут игнорироваться


двухбайтная - определяются остальные биты
первого байта, как в случае с однобайтной командой. После чего берётся
следующий байт, который будет являться адресом или константой, в зависимости от
команды. Используются все биты этого байта.


проверяется, есть ли следующий байт в памяти.
Если да, то возврат к первому пункту алгоритма




Пример структуры однобайтной команды:


В регистр A заносится сумма значений регистра A
и B.




Пример структуры двухбайтной команды:


В ячейку памяти 8А заносится значение регистра
D.


Если одна из очередных команд - сложение,
побитовое И, ИЛИ или инверсия, то операция выполняется в АЛУ, куда передаются
два (или один, в случае инверсии) операнда. В АЛУ производится операция,
получается результат, формируются флаги.


Переполнение - сравнивается знак одного из
аргументов и результат. Если они различны, то флаг true. Иначе false.


Отрицательность - выделяется знаковый бит числа
(первый слева). Если единица - то флаг true. Иначе false


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


Файла не существует, нет доступа итд. Вывести
сообщение об ошибке


Файл ещё не загружен. Кнопки запуска должны быть
заблокированы


Программа выполнилась полность. Кнопки запуска
заблокированы


Запретить изменение ячеек таблицы, регистров и
остальных элементов


Для отображения памяти использовать таблицу
16х16.


Для отображение значения регистров, флагов, СЧАК
и Регистра Команд - текстовые поля.


Для определения этапа выполнения
программы(выполнена или остались ещё команды) - доступность кнопок выполнения.
Если программа выполнена полностью и не осталось команд, кнопки должны стать
недоступными. Окончательный вид интерфейс принял :




Краткий алгоритм работы программы :


ассемблер программа микропроцессор
компиляция


Класс Main - главный класс программы. Содержит
метод public static void main, который инициализирует программу.


Класс Main содержит 3 метода и 1 внутренний
класс с конструктором.


S4AK - поле типа int, для реализации СЧАК


comReg - поле типа int, для реализации Регистра
Команд


FirstLine - поле типа int, служит для хранения
адреса стартовой команды программы


myRAM - поле типа RAM. Реализовывает оперативную
память. В конструктор передаётся объём памяти - 256.


myALU - объект типа ALU. Содержит методы
арифметическо-логичского устройства. Объект создан для наглядности вызова
методов и удобной отладки.


myRON - поле типа RON. Реализовывает регистры.


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


-main - запускает методы класса GUI для
прорисовки интерфейса


-insert - метод для считывания и записи байтов в
память. Вызывает методы считывания файла, поэтому может выбросить IOException.
Принцип работы - пока байт не равен -1, считываем, записываем в ячейку памяти
соответствующую СЧАК, инкремент СЧАК-а. Определяется точка входу в программу -
FirstLine. Регистры, СЧАК - обнуляются. Метод возвращает объект типа RAM, т.к
при загрузке изменяется только оперативная память.


- execute - собственно, метод, выполняющий
команды. Принцип работы


) Получить полбайта - команду (байт >> 4),
занести в регистр команд


) В соответствии с командой выполнить действие.
При считывании следующей команды СЧАК увеличиваем на 1. для выделения
оставшейся половины байта (справа) - поразрядное И (байт & 15)


) Если есть байты для считывания, вернуться в
первый пункт


Внутренний класс Result нужен для создания
объектов типа Result, куда заносятся разные виды данных - объекты , переменные.
При создании передаются параметры RAM, RON, флаги, СЧАК, Регистр Команд. Объект
нужен для его использования в интерфейсе (является, своего рода «посылкой» для
интерфейса с удобным способом извлечения данных). Метод execute возвращает
объект типа Result.


Класс GUI служит для прорисовки интерфейса,
отображения и обновления данных, и для реакции на действия пользователя.


В классе GUI прорисовываются элементы интерфейса
программы:


-Флаги, Регистры, СЧАК, Регистр Команд -
JTextField


редактируемое поле имени файла - JTextField


На кнопки добавляются обработчики событий
(addEventListener), который вызывают методы класса Main соответственно. Кнопка
step запускаем метод execute класса Main 1 раз, а кнопка execute запускает в
цикле, пока метод не вернёт null значение.


Так же в этом классе обрабатывается исключение
IOException, которое возникает в случае ошибки при чтении файла (например,
FileNotFound). В поле, где было введено имя запрашиваемого файла, появляется
текст «Error»


Класс ALU выполняет арифметическо-логические
операции, а именно :


В методы класса передаются параметры типа int -
операнды, или операнд (инверсия). Методы возвращают результат типа int. Так же
методы формируют флаги, к которым можно получить доступ через методы геттеры :
FlagZ(), FlagOv(), FlagN(). Методы этого класса вызываются из метода execute
класса Main при выполнении команды. Они возвращают результат и формируют флаги.


Классы RAM, RON и Reader Класс RAM необходим для
создания объекта типа RAM с необходимыми полями - массив чисел , длиною 256. С
помощью геттеров и сеттеров считываются и задаются данные по необходимому
адресу.


Методы :(int address) - возвращает содержимое ячейки
памяти по указанному адресу(int address, int value) - заносит значение в ячейку
памяти по адресу() - возвращает объём памяти (длина массива)


Класс RON необходим для создания объекта типа
RON с необходимыми полями - числами R1, R2, R3, R4 что соответствуют регистрам
A, B, C, D. С помощью геттеров и сеттеров считываются и задаются данные
необходимого регистра.


get(int R) - возвращает значение регистра.
Предусмотрен вариант, если вызван несуществующит регистр - вернёт 0


set(int R,int value) - устанавливает значение
регистра.


Класс Reader - для побайтового чтения данных из
файла. В его метод передаётся параметр имени файла.




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


Пример 1 (команды ADD и MOV, файл addmov.bin)


Пример 2(команды LOAD и ADD, addload.bin)


Пример 8
(JO)10h;A, FC;B, 0D;A, B;30h;30h;C DDh;


Пример 9
(JZ)10h;A, 08h;B, 07h;A,B;30h;30h;C, 24h;


Пример 10
(JL)10h;A, DDh;B, 02h;A,B;30h;30h;C, 09h;


Пример 11
(JNZC)10h;A, 09h;A, 20h;20h;


Пример 12 (CLF)15h;A,
DD;B, EE;A, B;


Пример 13 (CALL и
RET)15h;30h;A, B;30h;B, 08h;


Как видно из тестовых примеров, данная часть
курсового проекта работает в соответствии с заданной структурой ЭВМ.
Следовательно. можно сделать вывод, что задание на проект выполнено успешно.


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


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







1.Ассемблер. [Электронный ресурс]
#"577494.files/image035.gif">







public static RAM insert(String
FileName) throws IOException {


for(int
i=0;i>4)) {0:
myRON.set(halfByte>>2, myALU.ADD((myRON.get(halfByte>>2)),


break; //ADD R1 R21:
myRON.set(halfByte>>2, myALU.ADD(myRON.get((halfByte>>2)),


break; // ADD R1 RAM2:
myRON.set(halfByte>>2, myALU.AND(myRON.get((halfByte>>2)),


break; // AND3:
myRON.set(halfByte>>2, myALU.OR(myRON.get((halfByte>>2)),


myRON.set(halfByte>>2,myALU.NOT(myRON.get((halfByte>>2))));


break; // NOT5:
myRON.set(halfByte>>2, (myRAM.get(++S4AK)));


break; // MOV6:
myRON.set(halfByte>>2, (myRAM.get(myRAM.get(++S4AK))));


break; // LOAD7: myRAM.set(myRAM.get(++S4AK),
myRON.get((halfByte>>2)));


break; //STORE8:
S4AK=myRAM.get(++S4AK);


break; // JO11: if(myALU.FlagN()) {


case 12: int
x=myRON.get((halfByte>>2));


break; // JNZC13:
myALU.setFlags((1));


default:System.out.println(1);
S4AK++; ;


return new Result(myRAM, myRON, ALU.FlagN(),
ALU.FlagZ(), ALU.FlagOv(), S4AK, comReg);


Result(RAM myRAM,RON myRON, boolean
flagN, boolean flagZ, boolean flagOv, int S4AK, int comReg) {


. Класс
GUIjava.io.*;java.awt.*;javax.swing.*;java.awt.event.*;class GUI extends JFrame
{


this.getContentPane().setLayout(null);


regC.setSize(20,20); JTextField
source= new JTextField();


final JTextField rA= new
JTextField();


final JTextField rB= new
JTextField();


final JTextField rC= new
JTextField();


final JTextField rD= new
JTextField();


final JTextField fN= new
JTextField();


final JTextField fZ= new
JTextField();


final JTextField fOv= new
JTextField();


final JTextField schak= new
JTextField();


schak.setText("");JTextField
regCom= new JTextField();


final JButton exec = new JButton();


exec.setText("Execute");JButton
step = new JButton();


step.setText("Step");.setTitle("Title");


String[] column =
{"0","1", "2", "3", "4",
"5", "6", "7", "8", "9",
"A", "B", "C", "D", "E",
"F"};


final String[][] dataTable = new
String[16][16];JTable jTable = new JTable(dataTable, column);


JScrollPane jScroll= new
JScrollPane(jTable);


//Locations :::.setLocation(10,10);


fOv.setLocation(590,250);.setLocation(565,280);


schak.setLocation(590,310);.setEnabled(false);


add(fOv);.addActionListener(new
ActionListener() {


public void
actionPerformed(ActionEvent e) {


} catch (Exception a)
{source.setText("Error");}(k!=null) {


dataTable[i][j]=Integer.toHexString(k.get((i*16)+j));


});.addActionListener(new
ActionListener() {


public void
actionPerformed(ActionEvent e) {


dataTable[i][j]=Integer.toHexString(res.myRAM.get((i*16)+j));


String A=res.myRON.get(0)>127 ?
"-"+(256-res.myRON.get(0)) : Integer.toString(res.myRON.get(0));


String B=res.myRON.get(1)>127 ?
"-"+(256-res.myRON.get(1)) : Integer.toString(res.myRON.get(1));


String C=res.myRON.get(2)>127 ?
"-"+(256-res.myRON.get(2)) : Integer.toString(res.myRON.get(2));


String D=res.myRON.get(3)>127 ?
"-"+(256-res.myRON.get(3)) : Integer.toString(res.myRON.get(3));


String
R=Integer.toString(res.comReg);


String S=Integer.toString(res.S4AK);


regCom.setText(R);.setText(Boolean.toString(res.flagZ));


fN.setText(Boolean.toString(res.flagN));


fOv.setText(Boolean.toString(res.flagOv));


} else { exec.setEnabled(false);
step.setEnabled(false);}


});.addActionListener(new
ActionListener() {


public void
actionPerformed(ActionEvent e) {


Result res;
((res=Main.execute())!=null) {


dataTable[i][j]=Integer.toHexString(res.myRAM.get((i*16)+j));


String A=res.myRON.get(0)>127 ?
"-"+(256-res.myRON.get(0)) : Integer.toString(res.myRON.get(0));


String B=res.myRON.get(1)>127 ?
"-"+(256-res.myRON.get(1)) : Integer.toString(res.myRON.get(1));


String C=res.myRON.get(2)>127 ?
"-"+(256-res.myRON.get(2)) : Integer.toString(res.myRON.get(2));


String D=res.myRON.get(3)>127 ?
"-"+(256-res.myRON.get(3)) : Integer.toString(res.myRON.get(3));


String
R=Integer.toString(res.comReg);


String S=Integer.toString(res.S4AK);


fZ.setText(Boolean.toString(res.flagZ));


fN.setText(Boolean.toString(res.flagN));


fOv.setText(Boolean.toString(res.flagOv));


} exec.setEnabled(false);
step.setEnabled(false);


private static boolean flagN, flagZ,
flagOv;void setFlags(int R1, int R2, int R) {


flagOv = (((R1&128)==128)
&& ((R&128)==0))||(((R2&128)==128) &&
((R&128)==0));


}static boolean FlagZ () { return
flagZ;}


public static boolean FlagN () {
return flagN;}static boolean FlagOv () { return flagOv;}


public void set(int address, int
value) {


. Класс
Readerjava.io.*;class Reader {


public Reader(String FileName)
throws IOException {


reader = new
RandomAccessFile(FileName, "r");


public int nextByte() throws
IOException {



Похожие работы на - Разработка программы-отладчика Дипломная (ВКР). Информационное обеспечение, программирование.
Контрольная работа по теме Анализ влияния отдела логистики на эффективность работы транспортного предприятия
Цыбулько 36 Вариантов Егэ Ответы Сочинение
Мемориал Родина Мать Зовет Сочинение
Реферат: Значение принципа системности в познавательной деятельности. Гносеология и онтологические схемы науки.. Скачать бесплатно и без регистрации
Доклад: Don't kill the World
Культурный секс
Здоровый Ребенок В Здоровой Семье Эссе
Курсовая работа: Кризис. Причины возникновения и пути преодоления
Занятия Легкой Атлетикой Реферат
Контрольная работа по теме Предмет, завдання і методи педагогіки
Реферат На Тему Малые Аномалии Развития Сердца И Физическая Культура
Реферат по теме Гендерные особенности этнической идентификации
Противопоставление Образов Дубровского И Троекурова Сочинение
Реферат: Зарождение и развитие северодвинской росписи
Реферат по теме Финансовое оздоровление как пассивная оздоровительная процедура
Курсовая работа по теме Озброєння часів Київської Русі
Реферат: Изабелла Баварская
Курсовая работа: Інформаційно-довідкова система
Дипломная работа: Управління інвестиціями в основний капітал на рівні підприємства (на прикладі ТОВ "Граніт")
Эссе Клубника Сигареты С Кнопкой
Доклад: Скандинавская мифология
Похожие работы на - Механізм державного регулювання оплати праці та соціального захисту
Похожие работы на - Восприятие билбордов на Юрмальском шоссе водителями транспортных средств

Report Page