| | | | | | | | | РАССЫЛКИ ПОРТАЛА 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 благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
Качественные массовые e-mail рассылки Минимальный объем заказа- 2.5млн. адресов. Стоимость- 4000рублей. В наличии: 12.5млн. адресов Москвы(15000рублей) 17млн. адресов регионов России(17000рублей) Всего 30млн. адресов по всей России(25000рублей) +Скидки постоянным клиентам и при больших заказах. +Гарантия качества. Телефон: +8(926)-1888-017 (пишите на этот адрес, а не в ответ!)
| | | | | | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1572 | Дата выхода: | 17.11.2015, 23:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 17 / 7 | Вопросов / ответов: | 1 / 1 | Консультация # 188200: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: помогите доделать программу, внизу код программы что смог сам сделать, не получается сделать задержку и очистку, помогите, или другой код программы дайте, срочно нужно задание: Вывести несколько строк произвольного текста, содержащие лишь латинские буквы. Каждые 10 секунд заглавные буквы ... Консультация # 188200: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: помогите доделать программу, внизу код программы что смог сам сделать, не получается сделать задержку и очистку, помогите, или другой код программы дайте, срочно нужно задание: Вывести несколько строк произвольного текста, содержащие лишь латинские буквы. Каждые 10 секунд заглавные буквы сменяются строчными и т. д.
data segment massbol db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','$' massmal db 'abcdefghijklmnopqrstuvwxyz','$' message db 'Vvedite proizvolnyi text ili nabor simvolov,lish v latinic:',0ah,'$' stroka db 80 dup('$'),'$' pust db 80 dup('$'),'$' data ends code segment assume cs:code,ds:data begin:mov ax,data mov ds,ax lea dx,message mov ah,09h int 21h lea dx,stroka mov ah,0ah int 21h lea si,stroka+2 xor cx,cx mov cl,stroka+1 beg: xor sp,sp mov sp,26 lea di,massbol lea bx,massmal verh: mov ah,[si] mov al,[di] cmp ah,al jne da1 mov dl,[bx] da1: mov ah,[si] mov al,[bx] cmp ah,al jne da2 mov dl,[di] da2: inc di inc bx dec sp cmp sp,0 jne verh mov ah,02h int 21h inc si loop beg quit:mov ax,4c00h int 21h code ends end begin
если можно, с комментариями эту исправить, т.к. это я писал для компилятора emu8086 Дата отправки: 15.11.2015, 17:50 Вопрос задал: Посетитель - 399158 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Посетитель - 399158! Строки с большими и малыми буквами лишние. Они отличаются значением 20h. Этим и воспользуемся...
Код : data segment message db 'Vvedite proizvolnyi text ili nabor simvolov,lish v latinic:',0dh,0ah,'$' stroka db 80,0,80 dup(?) ;для функции 0ah требуется указать в первом байте ;длину буфера, во втором будет реальная длина data ends code segment assume cs:code,ds:data begin: mov ax,data mov ds,ax lea dx,message mov ah,09h int 21h lea dx,stroka mov ah,0ah int 21h ;ввели строку mov dl,0ah mov ah,2 int 21h ;перейдем на новую строку lea si,stroka+2 ;все правильно - имеем адрес самой строки mov dx,si ;сохраним для вывода, все замены сделаем на месте xor cx,cx ;счетчик байт mov cl,stroka+1 ;реальное количество введенных байт mov ah,20h ;большие и малые буквы отличаются этим битом! ;будем превращать их друг в друга xor-я с этим байтом! beg: mov al,[si] ;читаем очередной байт xor al,ah ;превращаем одного в другого (и неважно, какой он был!) mov [si],al ;возвращаем на место inc si ;адрес следующего loop beg ;цикл по всем mov byte ptr [si],'$' ;закрываем строку для функции 9 mov ah,9 int 21h ;выводим mov ah,0 int 16h ;ждем нажатие на клавишу mov ax,4c00h int 21h code ends end begin
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| |