asm_1001
Сообщений: 1
Оценки: 0
Присоединился: 2010-02-07 16:01:48.563333
|
Доброго времени суток уважаемые! Прошу Вас помочь решить задачу по assembler. quote:
Выполнить двумя способами — сначала в режиме программного контроля, далее модифицировать программу таким образом, чтобы события обрабатывались в режиме прерывания программы. Поскольку "фоновая" (основная) задача для этого случая в заданиях отсутствует, роль ее может сыграть "пустой цикл": М: NOP NOP JMP М. Программа должна обеспечивать ввод последовательности ASCII-кодов десятичных цифр (не длиннее пяти), перекодировку в "8421", упаковку в десятичное число (первый введенный символ — старшая цифра) и размещение в ячейке ОЗУ. ASCII-коды не-цифр игнорировать Способ первый:
RD #0
wr R1 ; накапливаем число
RD #5 ; воспринимать максимум 5 цифр
wr R5 ; сохраним
RDI #101 ; чистим буфер
out 1 ; для клавиатуры
RDI #102 ; сброс ошибки
out 1 ; для клавиатуры
RDI #10 ; разрешаем использование МВУ
OUT 1 ; для клавиатуры без прерываний (по опросу)
RDI #103 ; устанавливаем посимвольный ввод
out 1 ; для клавиатуры
LOOP:IN 2 ; читаем регистр состояния клавиатуры
DIV #10 ; делим на 10, чтобы второй разряд готовности стал в первом разряде
WR R3 ; сохраним
DIV #2 ; разделим на 2
MUL #2 ; умножим на 2
SUB R3 ; отнимем сохранное
JZ LOOP ; если четное, то нет кода в буфере, идем на цикл
IN 0 ; считываем код с клавиатуры
wr R2 ; сохраним
jz SAVE ; было просто нажатие на "Завершить ввод"
sbi #48 ; <\'0\' ;проверим на цифру
js RESET ; игнорируем, на сброс клавиатуры
sbi #10 ; >\'9\'
jns RESET ; игнорируем, на сброс клавиатуры
adi #10 ;восстановим число 0-9
wr r2 ; сохраним
rd r1 ; наше число
mul #10 ; умножаем на 10
add r2 ; добавляем введенный символ
wr r1 ; и на сохранение
jrnz r5,RESET ; ждем максимум 5 цифр
SAVE:rd #100 ;адрес ячейки, куда запишем результат
wr r0 ; будем адресовать через R0
rd r1 ; введенное число
wr @r0 ; сохраняем в памяти
hlt ; останов
RESET:RDI #101 ; команда сброса
out 1 ; в клавиатуру
RDI #103 ; команда установки посимвольного ввода (сбрасывается при сбросе)
out 1 ; в клавиатуру
jmp LOOP ; цикл на чтение состояния клавиатуры Помогите решить вторым способом. К сожалению это нужно срочно [:(] Используемый компилятор: Модель учебной ЦВМ. Почему то он у меня не понимает даже int 16h или скан клавы in al,60h. Но ВУЗ требует пользоваться им…(
|