Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 12:23   #1
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию Измерение длительности операции

Доброго времени суток! Есть цикл, длительность которого нужно измерить, желательно в микро- или милисекундах с помощью системного таймера. Вычитал в Джордейне примерчик и на его основе написал программу.
Код:
.586
.model small
.stack 100h
.data
x dw 156
y dw 139
oldcount dw 0
z dt 18.2
.code
begin:
mov ax,@data
mov ds,ax
finit
;-------------
mov ah,0
int 1ah ; получаем значение счетчика
mov oldcount,dx ; сохраняем начальное значение
;-------------
; измеряем длительность этого цикла
mov ax,x
mov bx,y
xor cx,cx
for1:
inc cx
add ax,bx
cmp cx,10000
jl for1
;-------------
mov ah,0
int 1ah ; получаем значение счетчика
mov bx,oldcount ; считываем старое значение
sub dx,bx ; берем разность
;-----------------
push bx ; заносим в стек
fld z ; заносим 18.2
fdiv ; делим
pop ax ; результат в ах
;----------------------
OutInt proc ; выведение на экран
        aam 
        add ax,3030h 
        mov dl,ah 
        mov dh,al 
        mov ah,02 
        int 21h 
        mov dl,dh 
        int 21h
OutInt endp 
;-----------------------
mov ax,4c00h
int 21h
end begin
Но программа не фурычит..... Нам нужно измерить длительность выполнения цикла с помощью системного таймера и вывести результат в мили- или микросекундах на экран. Подскажите, как реализовать данную задачу, если можно - с исходниками.
Hunter557 вне форума Ответить с цитированием
Старый 25.02.2011, 04:36   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Hunter557 он же swatkiev я уже ответил, что без перепрограммирования таймера не обойтись и даже пример приводил, читай Джордейна целиком

Последний раз редактировалось Mikl___; 25.02.2011 в 06:43.
Mikl___ вне форума Ответить с цитированием
Старый 25.02.2011, 19:13   #3
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Hunter557 он же swatkiev я уже ответил, что без перепрограммирования таймера не обойтись и даже пример приводил, читай Джордейна целиком
При перепрограмировании таймера результат тот же что и при использовании 18.2 такта в секунду ( на экран выводиться большое количество разных символов, подозреваю что блок вывода на экран нужно другой , а то этот выводит только целие числа и до 99)...В Джордейне нет болока перевода тактов в единици измерения...Даже после перепрограмирования я не могу вывести результат на экран так как его нужно перевести из тактов в м.секунды.Перевожу при помощи деления но так как результат выходит не целым числом - то я не знаю как вывести его на экран. Mikl___ если ты знаешь как это зделать- подскажи .
Hunter557 вне форума Ответить с цитированием
Старый 28.02.2011, 09:00   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Hunter557 он же swatkiev
беспомощность просто потрясающая! Каким образом ты пришел к выводу, что
Цитата:
Сообщение от Hunter557
При перепрограмировании таймера результат тот же что и при использовании 18.2 такта в секунду ( на экран выводиться большое количество разных символов
Если ничего не видишь?
для перевода 16-ричного числа в 10-ричную систему используют последовательное деление на 10
Код:
.286
.model small
.code
start:	push @data
	pop ds
	mov bx,10
	mov si,offset ascii+4; конец строки для вывода числа на экран
	mov ax,x; число в АХ, максимальное число, которое можно вывести таким способом 65535 (=0FFFFh)
a1:	xor dx,dx
	div bx
	or [si],dl; вывожу на своё место и добавляю к остатку от деления код 30h чтобы получилась ASCII-цифра
	dec si; двигаюсь к началу строки
	test ax,ax; всё разделили?
	jnz a1; если нет, то продолжаю делить дальше
	mov  ah,9; вывожу строку на экран
	mov  dx,offset ascii
	int  21h
	xor  ax,ax; жду пока не нажмут любую клавишу
	int  16h
	mov ah,4Ch; выхожу из программы
	int 21h
.data
ascii db 5 dup ("0"),'$'
x dw 12345
end start
Писать целиком за тебя программу? Извини -- сам!

Последний раз редактировалось Mikl___; 28.02.2011 в 09:25.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измерение расстояния. C++ FroLe Помощь студентам 3 28.11.2010 16:50
измерение длины строки Agafon Общие вопросы Delphi 6 11.11.2010 15:13
Измерение уровня сигнала Gr@nd Мультимедиа в Delphi 8 01.07.2009 11:07
Измерение времени выполнения цикла Alexcomeback Общие вопросы C/C++ 10 25.04.2009 16:58
Измерение времени в c# byte916 Помощь студентам 4 06.03.2009 21:18