Использование прерывания 1С для получения времени выполнения на современных машинах абсурдно.
[code h=200]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[/code]
Проще использовать системный счетчик:
[code h=200]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[/code]
Смотрите сами, хоть какие то цифры получаются.
Удачи!