Быстродействие микропроцессора - 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

Объяснение кода листинга программы

Выполняемые действия в коде:

  1. Сохранение значения времени в регистрах - команда RDTSC сохраняет в регистрах edx и eax текущее значение системного таймера.
  2. Передача значения из регистра - команда push eax сохраняет значение регистра eax в стеке.
  3. Передача значения из регистра - команда mov ebx, edx передает значение регистра edx в регистр ebx.
  4. Вызов функции - команда call @ вызывает функцию с меткой @.
  5. Восстановление значения регистра - команда pop ebx восстанавливает значение регистра ebx из стека.
  6. Установка счётчика циклов - команда mov cx, 8 устанавливает счётчик циклов в 8.
  7. Повторение цикла 8 раз - цикл while, выполняющийся 8 раз, выделенный комментариями _: и следующим за ним octal-ассемблером.
  8. Передача значения из регистра - команда rol ebx, 4 сдвигает значение регистра ebx вправо на 4 позиции.
  9. Выделение тетрады - команда mov al, 0Fh устанавливает значение регистра al равным 0Fh, а затем команда and al, bl выполняет побитовое И с регистром bl, при этом в регистре al будет выделена тетрада.
  10. Проверка и преобразование символа - команда cmp al, 10 выполняет сравнение значения регистра al со значением 10, а затем команда sbb al, 69h выполняет преобразование значения регистра al в символ, добавляя к нему 69h (что равно символу '9').
  11. Передача значения из регистра - команда mov dl, al передает значение регистра al в регистр dl.
  12. Вывод символа на экран - команда mov ah, 2 устанавливает код функции вывода на экран в регистре ah, а затем команда int 21h выполняет вызов функции вывода на экран.
  13. Повторение цикла 8 раз - цикл while, выполнявшийся 8 раз.
  14. Выход из функции - команда ret завершает выполнение функции. Обратите внимание, что номер 15 не используется.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы