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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2009, 13:17   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Помогите с метками в TAsm

Вообщем, решил написать таймер на TAsm'е с помощью прерыванию "INT 08h", которое делает задержку на 54.9254 миллисекунд.
Пишу следующий программный код:
Код:
model large
.stack 100h
.data
 HowMouchAdd dd 54.9254
 OneThousand dd 1000
 Sixty dw 60;
 Zero dw 0
 unset db 13,10,'$'
 mes1 db ': $'
 hour dw 0
 minutes dw 0
 second dw 0
 milisecond dd 0

.code
;инициализируем сопроцессор, т.к. к milsecond будем прибавлять дробное число
  finit
 ;подключаем директиву 386
  .386

MilSek:
       INT 08h        ;делаем прерывание на 54.9254
       FLD milisecond;
       FLD HowMouchAdd;
       FADD
       FSTP milisecond;
       FLD milisecond;
       FCOMP OneThousand    ;сравниваем milisecond с 1000
       FSTSW Ax            ;записываем слово-состояние в Ax
       AND Ax, 1000h       ;затираем все биты Ax кроме бита, отвечающего за результат сравнения
       CMP Ax, 0000h;      

       JZ MilSek          ;если melisecond мень 1000, тогда переходим на метку MilSek


Sec:
       FLD milisecond;
       FSUB OneThousand
       FLD milisecond;            ;milisecond=(milisecond-1000)
       INC second;
       MOV Ax, Sixty              ;заносим в регистр Ax число 60
       CMP second, Ax             ;сравниваем second с 60
       JL Vivod                   ;если second<60, идем на метку Vivod

Min:
       MOV Ax, Zero          ;заносим в Ax ноль
       MOV second, Ax        ;second=0
       INC minutes
       MOV Ax, Sixty
       CMP minutes, Ax       ;сравниваем minutes с 60
       JL Vivod             ;если minutes<60, идем на метку Vivod

Hours:
       MOV Ax, Zero
       MOV minutes, Ax      ;заносим в minutes ноль
       INC hour





Vivod:
       lea dx,unset
       mov ah,9h
       int 21h      ;переходим на новую строку
       lea dx,mes1
       mov ah,9h
       int 21h
  ;ВЫВОД числа
   ;количество цифр будем хранить в cx
    xor cx,cx
   ;помещаем количество секунд в ax
    mov ax, second
   ;помещаем в bx десятку
    mov bx,10
v1:
   ;делим число на десять
    xor dx,dx
    div bx
   ;помещаем остаток в стек
    push dx
   ;счетчик цифр в числе
    inc cx
    cmp ax,0
   ;повторяем, пока число не станет нулём
    jne v1
   ;теперь вывод
    mov ah,02h
v2:
   ;извлекаем очередную цифру
    pop dx
   ;преобразуем в символ
    add dl,30h
   ;и выводим
    int 21h
   ;повторяем столько раз, сколько насчитали цифр
   loop v2


END
Этот код почему-то уже на метке MilSek зацикливается. Возможно, я использую не правильную команду перехода. Подскажите пожалуйста, что нужно исправить, чтобы мой секундомер работал правильно?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 21.12.2009, 15:39   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Вообще то int 8 - это прерывание, которое вызывается аппаратно каждые 55 мсек. Но никак делает эту паузу.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
TASM romale Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 16.12.2009 23:03
помогите с двумя задачами (TASM) motaro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.11.2009 18:35
Помогите вывести строку на экран в обратном порядке(TASM .small) depocomp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 21.05.2009 11:22
Из 10-ой в 2-ую систему на TASM Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.02.2008 06:28