Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Как "замереть" по таймеру...   Найти похожие ветки 

 
ArtemESC ©   (2006-02-19 21:39) [0]

Доброго времени суток...
Как сделать чтобы выполняемая программа замерла на
    несколько мс. с использованием ассемблера, без
         использования прерываний и  функций какой-либо
    ОС?


 
Anatoly Podgoretsky ©   (2006-02-19 21:44) [1]

А зачем ассемблер то? Что бы помучаться?


 
Ученик чародея ©   (2006-02-19 21:54) [2]

обработчик на прерывание, например 08h (вызывается 18.2 раза в сек) и проверяешь.

Вот программа для перевода в VGA режиме в DOS из цветного в чернобелый. По причине визуальности и простоты вошла в научное пособие на кафедре, где я учился.

write macro row
mov ah,09h
mov dx,offset row
int 21h
endm

vec segment At 0h ;Идем на
 Org 8h*4        ;8-й вектор
 adr Label Dword ;адресс
vec Ends

code Segment Para
  Assume CS:code
  Org 100h

Start:   Jmp Init  ;инициализация
save dd ?    ;главное запомнить

b&w Proc far

   Push AX BX CX DX SI DI DS ES;и другим
   pushf
   Pushf                       ;дай
   call save                   ;поработать

   mov ah,0fh   ; тестеруем
   int 10h      ; включенный режим
   mov ah,cs:[oldres]; сравниваем со старым
   cmp al,ah    ; режимом
   mov cs:[oldres],al

   jz exit      ;если равен выход

   Mov AX,101bh;включаем черно-белый режим
   Mov BX,0000h;1-цвет регистр
   Mov CX,00ffh;последний
   Int 10h     ;поехали
exit:
   popf
   Pop ES DS DI SI DX CX BX AX;назад

   Iret
oldres db (0f5h)
b&w Endp

init Proc Near  ;инициализация
 write row1
 write row2
 write row3

 Assume DS:vec
 Push DS
 Mov AX,vec
 Mov DS,AX
 
 Cli

 Mov AX,Word Ptr adr
 Mov Word Ptr save,AX
 Mov AX,Word Ptr adr+2
 Mov Word Ptr save+2,AX;сохранили старое значение

 Mov Word Ptr adr,Offset b&w
 Mov Word Ptr adr+2,CS      ;установили новый адрес

 Sti
 Mov DX,Offset init
 Int 27h
row1 db "Эта программа написана организацией SB.-PRO.",0ah,0dh,"$"
row2 db "Копия шаровая,предназначена для общего пользования",0ah,0dh,"$"
row3 db "         устанавливает монохромный режим",0ah,0dh,"$"

init Endp

code Ends
End Start


PS
Сам писал, ногами не пинать.


 
kaZaNoVa ©   (2006-02-19 22:02) [3]

Sleep(10) спесёт прогера и асм не нужен:)


 
БарЛог ©   (2006-02-19 22:04) [4]

А "замерла" - это значит "вообще ничего не делала" ?
А то можно зациклить до определенного момента (в цикле проверка по времени).


 
isasa ©   (2006-02-19 22:10) [5]

Ученик чародея ©   (19.02.06 21:54) [2]
обработчик на прерывание, например 08h (вызывается 18.2 раза в сек) и проверяешь.

А ели это NT (4, 5, 5.1)?


 
Джо ©   (2006-02-19 22:12) [6]

> [5] isasa ©   (19.02.06 22:10)
> А ели это NT (4, 5, 5.1)?

Да нет, тут человек, кажется, загрузочный сектор пишет.


 
Anatoly Podgoretsky ©   (2006-02-19 22:20) [7]

Джо ©   (19.02.06 22:12) [6]
Рано ему


 
ArtemESC ©   (2006-02-19 23:47) [8]

БарЛог ©   (19.02.06 22:04) [4]
Точно...До определенного момента...


 
ArtemESC ©   (2006-02-20 00:01) [9]

>>Anatoly Podgoretsky ©   (19.02.06 22:20) [7]
 А откуда вы знаете кому-что рано или позно???


 
Defunct ©   (2006-02-20 04:30) [10]

> ArtemESC

.386

  xor  ax, ax
  mov es, ax
  mov eax, es:[413h]
  add  eax, 2           ; <-- время в 1/18 сек.
wait:
  cmp eax, es:[413h]
  jb    wait  


 
Defunct ©   (2006-02-20 04:37) [11]

Ученик чародея ©   (19.02.06 21:54) [2]

Вов, у тебя еще эта программка сохранилась! ;>
ты ж ее еще в школе писал,
монтирование по классике жанра из П.Абеля.. :)


 
Defunct ©   (2006-02-20 04:46) [12]

Anatoly Podgoretsky ©   (19.02.06 22:20) [7]

Не рано, как раз тот возраст (даже позновато), чтобы прочуствовать железо, написать вирус и успокоиться.


 
Думкин ©   (2006-02-20 08:37) [13]

> без использования прерываний и


> Ученик чародея ©   (19.02.06 21:54) [2]
> обработчик на прерывание, например 08h


%) Вот так и пишут. Вначале напишут, потом не дочитают, а потом ветка в 500 постов.


 
Ученик чародея ©   (2006-02-20 09:46) [14]

>>Думкин ©   (20.02.06 08:37) [13]
>>> без использования прерываний и

Как я понял, ему без прерываний DOS, а прерывания BIOS вполне подходят.


 
Ученик чародея ©   (2006-02-20 10:02) [15]

>>Defunct ©   (20.02.06 04:30) [10]

Это называется тормознем крутейший Athlon64 3800+. В FoxPro 2.6 так все реализовано.

Применять этот код можно только единично, но не для постоянной работы.


 
Defunct ©   (2006-02-20 15:07) [16]

Ученик чародея ©   (20.02.06 10:02) [15]

Это называется простой код, без использования прерываний, который обеспечит задержку.

Применять можно там где требуется задержка.


 
kaZaNoVa ©   (2006-02-20 15:13) [17]

премнять для задежки надо Sleep() - нет загрузки системы


 
Defunct ©   (2006-02-20 15:50) [18]

kaZaNoVa ©   (20.02.06 15:13) [17]

может подскажете, как Sleep сделать без ОС?


 
Jeer ©   (2006-02-20 15:54) [19]

Defunct ©   (20.02.06 15:50) [18]


> может подскажете, как Sleep сделать без ОС?


Вовремя лечь спать и не постить сюда муру.


 
kaZaNoVa ©   (2006-02-20 15:54) [20]

Defunct ©   (20.02.06 15:50) [18]
а без ОС и нормальную EXE-прогу не запустить .. :( тут к сожалению не подскажу:(


 
Defunct ©   (2006-02-20 17:24) [21]

Jeer ©   (20.02.06 15:54) [19]

Это вы мне ? если мне тогда перечитайте сабж.


kaZaNoVa ©   (20.02.06 15:54) [20]

вам бы тоже сабж перечитать не помешало..


 
Jeer ©   (2006-02-20 17:33) [22]

Defunct ©   (20.02.06 17:24) [21]

Нет, конечно:))
Ответ для kaZaNoVa ©   (20.02.06 15:13) [17] с учетом Defunct ©   (20.02.06 15:50) [18]



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.048 c
2-1140886598
Radagast
2006-02-25 19:56
2006.03.12
Invalid floating point operation


15-1139951775
ArtemESC
2006-02-15 00:16
2006.03.12
Компиляторы...


1-1139366458
Коля
2006-02-08 05:40
2006.03.12
Вопрос по RichEdit


2-1140418343
unit
2006-02-20 09:52
2006.03.12
Базы данных


2-1140541541
Sower
2006-02-21 20:05
2006.03.12
Байты с битами