Миниальный набор групп операторов на ассемблере

Виктор18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
31.05.2007

Для имеющих опыт работы на ассемблере под WIN

Мне нужно написать транслятор для нового языка программирования, транслятор будет переводить язык не в коды, а в ассемблерные команды, записываемые транслятором в файлы с расширением .ASM. Транслятор экспериментальный, для продвижения теории программирования.

Для этого мне нужно, чтобы Вы написали несколько групп операторов на ассемблере, которые должны достигать цели, перечисленные ниже.

(Для модератора: за работу я могу заплатить 15 тыс. рублей. Не менее. То есть не менее 600 долларов)

Работа по сложности в пределах большой лабораторной работы и не должна вызывать затруднений у специалиста по программированию на ассемблере под оконный WIN.

Срок - около месяца.

Если Вы не можете выполнить всю работу - сообщите какие части Вы можете выполнить.

Связаться со мной можно: по аське мой номер 362 548 571 или е-м [email protected]. Лучше на е-м

Схема работы моего транслятора:

Мой язык программирования мой транслятор переводит в текст на ассемблере в файлы с расширением .ASM

MASM32 транслирует ассемблер в файл .OBJ

Из файлов .OBJ собирается файл .EXE

Теперь уточняю постановку задачи.

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

Программа в целом должна работать в оконном режиме НО только в одном окне.

На уровне исходных текстов программа состоит из подпрограмм.

Передача данных - через адреса. То есть значения не передаются, а передаются адреса переменных.

Подпрограммы двух типов - передача через список параметров и подпрограммы-функции (одно выходное значение передается через имя подпрограммы)

Данные следующих типов

1) целые 4 байта, простые (в тч имя функции) и одномерные массивы, фактически расположенные в памяти подпрограммы и те, чьи адреса передаются через формальные параметры.

2) вещественные 8 байт, остальное то же, что и для целых

3) логические 4 байта, -//-

4) символьные, длина одной переменной указывается, то есть может быть из 5 или 125 байт. Остальное то же что выше.

Теперь операции

Арифметические:

1) A=[-]B

оператор копирования или присвоения. A и B, если это данные разных типов, то выполняется преобразование типа

арифметические операции. Если A символьная стандартной длины а B - целая или вещественная то преобразование по согласованной в диалоге форме.

2) А=[-]B+C

3) A=[-]B-C

4) A=[-]B*C

5) A=[-]B/C

Логические операции над логическими переменными:

1) A=[не]B

2) A=B и C

3) A=B или C

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

4) A=B равно C

5) A=B не равно C

6) A=B меньше C

7) A=B меньше или равно C

8) A=B больше C

9) A=B больше или равно C

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

Переходы

1) Безусловный переход на метку

2) Условный переход на метку по значению логической переменой ИСТИНА.

3) Оператор возврата в вызывающую программу/подпрограмму

4) Оператор остановить программу. Этот оператор, как и некоторые другие, дискуссионный,

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

Экран:

1) Создать окно заданного номера, заданных размеров, местоположение на экране и первоначальной закраской

2) Убрать окно заданного номера

3) Вывести цветную точку по заданным координатам - дискуссионная функция

4) Считать точку по заданным координатам

5) Возможны обновления окон - это дискуссиное

6) Вывести текст по заданными координатам.

Клавиатура, мышь

1) Считать код клавиши

2) Местоположение курсора мыши и другие клавиши

Магнитные носители, сети, печать(возможно, печать лучше отнести к экрану)

0) Создать каталог/убрать каталог

1) Открыть условное устройство по имени и дать ему номер. Тип "общий доступ"

2) Закрыть устройство по номеру/возможно убрать при закрытии

3) Записать массив байт заданной длины с заданного байта с обработкой "сбой" "переполнение"

4) Прочитать массив байт заданной длины с указанием фактически считанной длины и обработки "сбой"

Устройства ввода-вывода, в том числе и USB

1) Открытие и закрытие как и в предыдущем пункте, однако вопрос дискуссионный.

2) Чтение и запись последовательного типа, но вопрос так же дискуссионный.

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

Конечный результат - согласованные со мной, переданные мне и протестированные мной тексты на ассемблере

С уважением, Виктор Воронков.