Здравствуйте! Дату сдачи заказа можно будет сдвинуть.
Задание №1.
Привести примеры эффективного использования следующих команд процессоров Intel-80x86 (5-6 примеров для команд с использованием различных методов адресации операндов и различной разрядности, 16,32,64 для целых, 64,80,32 для вещественных):
Вариант 7) Трансцедентные операции сопроцессора f2xm1, fyl2x, fyl2xp1;
Задание №2.
"ЧИСЛА ХОФШТАДТЕРА" (Для всех вариантов).
Числа Хофштадтера похожи на числа Фибоначчи, но только в начале последовательности.
Первые два Q-числа это 1 и 1, каждое следующее,- сумма предыдущих, но их индексы вычисляются и зависят от предыдущих членов.
Q-sequence:
Q[1] = Q[2] = 1; Q[n] = Q[n-Q[n-1]] + Q[n-Q[n-2]] для n > 2.
Вот начало этой последовательности:
1, 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 8, 8, 8, 10, 9, 10, 11, 11, 12, 12, 12, 12, 16, 14, 14, 16, 16, 16, 16, 20, 17, 17, 20, 21, 19, 20, 22, 21, 22, 23, 23, 24, 24, 24, 24, 24, 32, 24, 25, 30, 28, 26, 30, 30, 28, 32, 30, 32, 32, 32, 32, 40, 33, 31, 38, 35, 33, 39, 40, 37, 38, 40, 39...
Написать на nasm функцию, вычисляющую 64-разрядные числа Q, и вывести числа c 3000000 до 3000020-го.
Для вызова функции и вывода использовать программу на языке C.
Компиляция из командной строки:
nasm -felf64 qnumbers.asm
gcc Q.c qnumbers.o -o qnumbers
В файле Q.c Вызвать Вашу функцию и вывести нужный диапазон чисел.
Запуск программы: ./qnumbers
Прототип - смотрите пример с числами Фибоначчи.
Пример вычисления 64-битных чисел Фибоначчи есть на интранетовском компьютере
(в сети ВВГУ) bkv.vvsu.ru или 5.100.98.127
в каталоге /ftp/Архитектура ЭВМ/ASM_LINUX/C/
и в прилагаемом каталоге
"Пример с числами Фибоначчи (64 бит)"
Задание № 3.
"Будильник на основе часов реального времени ЭВМ (RTC)".
Непосредственной записью во внутренние регистры часов
реального времени (через порты 70h, 71h) запрограммировать
запуск будильника через заданный интервал времени.
Интервал вводится непосредственно в программе на языке Си
в формате "%x%x%x", т.е. в шестнадцатеричном виде.
(Часы, минуты, секунды). Затем вызывается ассемблерная
подпрограмма, в которой к текущему времени (как прочитать
текущее время есть в лекционных материалах) добавляется
указанный интервал. Далее производится опрос 5-го разряда
регистра C, до появления в нем единицы (текущее время
совпало со временем будильника). После этого выходим из
подпрограммы и выводим сообщение в вызывающей программе.
Для проверки программы ее нужно запускать с правами
root пользователя.
Примерный код программы на Си:
#include
extern unsigned char hour, min, sec, dh, dm, ds;
int main(int ac, char *av[])
{
printf("Введите интервал времени в формате HH:MM:SS\n);
scanf("%x%x%x",&dh,&dm,&ds);
printf("Ждем события...\n");
ala();
printf("Current time %02x:%02x%02x\n",hour,min,sec);
printf("Это время будильника!\n");
return 0;
}
Переменные hour, min, sec, dh, dm, ds
должны быть описаны как global и объявлены в ассемблерном модуле.
Особое внимание обратите на арифметические действия со временем.
10:01:50 + 0:2:20 будет 10:04:10!
Правила переноса должны учитывать, что в одной минуте - 60 секунд, в одном часе - 60 минут, в сутках - 24 часа. Также учитывайте, что с BCD числами обычная арифметика не работает.
8h+8h в обычной арифметике - 10h, а должно быть 16h, например.
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |