Быстродействие микропроцессора - Assembler
Формулировка задачи:
Помогите пожалуйста написать программу на Assembler в Masm32: Определение быстродействия микропроцессора при выполнении базовых арифметических операций. К примеру есть 4 операции: '+', '-', '*', '/'. Пользователь выбирает одну из них, вводит данные (2 числа) и программа запускает в цикле операцию (например 100 раз), при этом нужно чтобы включился таймер и после выполнения цикла программа вывела время, которое потребовалось процессору для выполнения поставленной задачи в миллисекундах. Вроде бы все просто, но мне, как начинающему, очень трудно все это реализовать. Буду признателен за помощь.
Подскажите, пожалуйста, как реализовать этот таймер... остальное вроде бы знаю, а вот с таймером проблемы(
Решение задачи: «Быстродействие микропроцессора»
textual
Листинг программы
;TASM COM-program Model Tiny .386 .Code Org 100h Start: db 0Fh,31h ;RDTSC Возвращает время в edx:eax push eax mov ebx, edx call @ pop ebx @: mov cx, 8 ;Будет 8 цифр _: rol ebx, 4 mov al, 0Fh and al, bl ;Выделили тетраду cmp al, 10 ;Известный трюк sbb al, 69h ;преобразования AL das ;0..F->'0'..'F' mov dl, al mov ah, 2 int 21h ;Напечатать символ в DL loop _ ret End Start
Объяснение кода листинга программы
Выполняемые действия в коде:
- Сохранение значения времени в регистрах - команда RDTSC сохраняет в регистрах edx и eax текущее значение системного таймера.
- Передача значения из регистра - команда push eax сохраняет значение регистра eax в стеке.
- Передача значения из регистра - команда mov ebx, edx передает значение регистра edx в регистр ebx.
- Вызов функции - команда call @ вызывает функцию с меткой @.
- Восстановление значения регистра - команда pop ebx восстанавливает значение регистра ebx из стека.
- Установка счётчика циклов - команда mov cx, 8 устанавливает счётчик циклов в 8.
- Повторение цикла 8 раз - цикл while, выполняющийся 8 раз, выделенный комментариями _: и следующим за ним octal-ассемблером.
- Передача значения из регистра - команда rol ebx, 4 сдвигает значение регистра ebx вправо на 4 позиции.
- Выделение тетрады - команда mov al, 0Fh устанавливает значение регистра al равным 0Fh, а затем команда and al, bl выполняет побитовое И с регистром bl, при этом в регистре al будет выделена тетрада.
- Проверка и преобразование символа - команда cmp al, 10 выполняет сравнение значения регистра al со значением 10, а затем команда sbb al, 69h выполняет преобразование значения регистра al в символ, добавляя к нему 69h (что равно символу '9').
- Передача значения из регистра - команда mov dl, al передает значение регистра al в регистр dl.
- Вывод символа на экран - команда mov ah, 2 устанавливает код функции вывода на экран в регистре ah, а затем команда int 21h выполняет вызов функции вывода на экран.
- Повторение цикла 8 раз - цикл while, выполнявшийся 8 раз.
- Выход из функции - команда ret завершает выполнение функции. Обратите внимание, что номер 15 не используется.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д