РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1573 | Дата выхода: | 21.11.2015, 18:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 17 / 7 | Вопросов / ответов: | 1 / 1 | Консультация # 188193: Здравствуйте! Прошу помощи в следующем вопросе: Посчитать за какое время процессор выполнит 1 000 000 команд mov DI, SI; add DI, SI; mul SI. Для подсчёта времени использовать вектор 1Ch. Выводить на экран преобразованное в ASCII коды число тиков таймера, затраченное на операцию. Использую эмелятор EMU8086 ... Консультация # 188193: Здравствуйте! Прошу помощи в следующем вопросе: Посчитать за какое время процессор выполнит 1 000 000 команд mov DI, SI; add DI, SI; mul SI. Для подсчёта времени использовать вектор 1Ch. Выводить на экран преобразованное в ASCII коды число тиков таймера, затраченное на операцию. Использую эмелятор EMU8086
Дата отправки: 13.11.2015, 18:18 Вопрос задал: Посетитель - 399158 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, Посетитель - 399158!
Использовать прерывание 1С, для контроля времени выполнения, при современных скоростях - абсурд. Тем не мение смотрите приложение:
Код : model tiny code 386 countMax equ 10000;количество итераций org 100h begin: mov ax,351Ch;получить адрес старого обработчика int 21h mov word ptr old1Co,bx;сохраняем адрес строго обработчика mov word ptr old1Co+2,es mov ax,251Ch;Устанавливаем свой обработчик lea dx,new1C int 21h mov cx,CountMax;готовим внешний цикл mov si,100;так, чтобы хоть что-то делать @@01: push cx;запоминаем внешний цикл mov cx,CountMax;готовим внутренний цикл @@02: mov di,si;пересылаем add di,si;складываем mul si;умножаем loop @@02;внутренний цикл pop cx;параметр внешнего цикла loop @@01;внешний цикл push ds;сохраняем сегментный регистр mov ax,251Ch;устанавливаем старый обработчик lds dx,dword ptr old1Co int 21h pop ds;востанавливаем сегментный регистр mov ah,9;выводим сообщение lea dx,dbResult int 21h mov eax,ddTik;загружаем полученное значение mov ebx,10;система счисления xor cx,cx;счетчик цифр в стэке @@03: xor edx,edx;сбрасываем старший операнд div ebx;делим push dx;остаток в стек inc cx;считаем цифры в стэке or eax,eax;повторяем пока не ноль jnz @@03;если не ноль переходим @@04: pop ax;берем цифру из стэка add al,'0';преобразовываем в символ int 29h;выводим loop @@04;пока не кончаься цифры в стэке xor ax,ax;ожидаем ввод int 16h ret;выход new1C: inc dword ptr cs:ddTik;увеличиваем счетчик jmp dword ptr cs:old1Co;переходим в старій обработчик dbResult db 10,13,'Result:$' ddTik dd 0 old1Co dd ? end begin проще использовать системный счетчик:
Код : model tiny code 386 countMax equ 10000 org 100h begin: mov ah,9;выводим сообщение lea dx,dbRes int 21h xor ax,ax;готовимся считывать данные с БИОС mov es,ax mov cx,countMax;параметр внешнего цикла mov si,100;чтобы хоть что-то делать mov edi,es:[46CH];начальное количество тиков @@01: push cx;запоминаем параметр внешнего цикла mov cx,countMax;параметр внутреннего цмкла @@02: mov di,si;пересвылаем add di,si;складываем mul si;умножаем loop @@02;внутренний цикл pop cx;востанавливаем параметр цикла loop @@01;внешний цикл mov eax,es:[46Ch];конечное количество тиков sub eax,esi;получаем результат mov ebx,10;система счисления xor cx,cx;количество цифр в стэке @@03: xor edx,edx;сбрасываем старший операнд div ebx;делим push dx;запоминаем остаток в стэке inc cx;считаем количество цифр or eax,eax;пока не ноль jnz @@03;не ноль переходим @@04: pop ax;получаем цифру из стэка add al,'0';преобразовываем в символ int 29h;выводим loop @@04;пока в стэке есть цифры xor ax,ax;ожидаем ввод int 16h ret;возврат в систему dbRes db 10,13,'Result:$' end begin Все программы написаны под TASM и XP32. Удачи!
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий