Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.213.128] |
|
Сообщ.
#1
,
|
|
|
Всем привет.
Я сам в асемблере соображаю мало, но на работе приходится делать следующее: Есть исходник на ассемблере и bat файл для компиляции. Раз в день в исходнике меняются несколько строк (текстовые переменные),прога компилится и рассылается, абонентам. Работает прога под Win 32. Проблема в том, что надо в определенное место (я уже нашел куда)вставить задержку по времени (40 сек). То есть прога просто подождала 40 сек. и потом продолжила с этого места. Все регистры на этот момент свободны. Компилируется под TASM 5.0 Буду благодарен за любые помощь, особенно просто за кусок кода который можно вставить. |
Сообщ.
#2
,
|
|
|
mov esi,esp
push 9c40h call dword ptr [__imp__Sleep@4];Для Masm ;or сall dword ptr [Sleep:near];Для Tasm Если так не будет работать пропиши в заголовок extrn Sleep:near //////.....;;;;; mov esi,esp push 9c40h Call Sleep |
Сообщ.
#3
,
|
|
|
Ок! Спасибо огромное второй способ работает.
Как я понял Sleep это некая API функция? |
Сообщ.
#4
,
|
|
|
что значит некая ) это пауза в 1/1000 секунды, а 9C40H ето 40000 миллисекунд, или 40 секунд..
если нужны более мелкие задержки, используй программные циклы. кстати! никто не знает, как определить частоту процессора в MHz под DOS?? |
Сообщ.
#5
,
|
|
|
2Organic: Если надо - кину примерчик на мыло.
(определение MHz) |
Сообщ.
#6
,
|
|
|
Тока не ругайтесь...
На Паскале (определение частоты). Работает от 1/18.2 до 2/18.2 секунды... {$G+} Uses Dos; Var TSC: Boolean; Speed: Longint; SaveInt8: Pointer; Stage: Byte; Procedure SpeedCounter; far; assembler; Asm push ax push ds mov ax,seg @Data mov ds,ax inc Stage mov al,20h out 20h,al pop ds pop ax iret End; Begin Asm db 66h; xor ax,ax inc ax db 0Fh,0A2h and dl,10h mov TSC,dl End; If not TSC then Begin WriteLn('Your processor have no TSC.'); WriteLn('Do you wanna try anyway (Y/N) ?'); Asm mov ah,0 int 16h or al,20h mov TSC,0 cmp al,'y' jne @No inc TSC @No: End; If not TSC then Halt; WriteLn End; Asm mov ah,0Dh int 21h mov ax,1681h int 2Fh in al,0A1h mov ah,al in al,21h push ax mov al,0FEh out 21h,al inc ax out 0A1h,al End; GetIntVec(8, SaveInt8); SetIntVec(8, @SpeedCounter); Asm @1:cmp Stage,1 jne @1 db 0Fh,31h db 66h; xchg bx,ax @2:cmp Stage,2 jne @2 db 0Fh,31h db 66h; sub ax,bx db 66h; mov word ptr Speed,ax pop ax out 21h,al mov al,ah out 0A1h,al End; SetIntVec(8, SaveInt8); Asm mov ax,1682h int 2Fh End; WriteLn('CPU Clock : ', Speed*(1193181/65536): 0: 0, ' Hz') End. |