Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > программирование на асемблере под win


Автор: Sergey 13.12.2002, 19:31
народ помогите чем-нибудь
не могу запрограммировать таймер под win на 100 мкс

Автор: stab 2.1.2003, 01:11
Читай SDK, функции такие:
для обычных -- не очень точных таймеров: SetTimer(...)
для более точных: timeSetEvent(...)

это если в третьем кольце, а для нуля читай DDK.

Автор: ARTi 8.1.2003, 08:46
Sergey
Вообще-то, насколько я знаю, вин не даст прото так установить меньше 1000 мкс. Так чтааа... нормальные герои всегда идут в обход...

Автор: hex 18.9.2004, 16:26
Извите за тупой вопрос, но мне нужно умножить два двухбатовых числа на асемблере, доку нормальную не где найти не могу. Помогите пожалуйста sad.gif

Автор: Chingachguk 18.9.2004, 19:30
Цитата

не могу запрограммировать таймер под win на 100 мкс


Это действительно может вызвать проблемы... По крайней мере в 98-х системный таймер работает примерно на 600 мкс. Правда, Soft-Ice может мерять время с точностью около 60-100 мкс. Есть также сервис BIOS int 15h, но он некорректно работает в win - он позволяет работать с временами около 50 мкс.

Цитата
но мне нужно умножить два двухбатовых числа на асемблере


Знаковое умножение:

Код

 mov  ax,word ptr Arg1
 imul  word ptr Arg2
; dx:ax = signed dword = Arg1 * Arg2


Беззнаковое умножение:

Код

 mov  ax,word ptr Arg1
 mul   word ptr Arg2
; dx:ax = unsigned dword = Arg1 * Arg2


Автор: Kaskad 27.9.2004, 12:56
sample.gif

Автор: RuslanB 21.10.2004, 17:01
Надо написать программу, выполняющую поиск последовательности байт в 8 разрядном массиве (или текстовой строке). Адрес последовательности в ES:DI, ее длина – в CX, адрес массива – в DS:SI, его длина – в DX. В результате выполнения программы если последовательность найдена, то флаг C=1 и DS:SI содержит адрес совпадения, иначе C=0.
Подскажите хотябы суть!

Автор: Chingachguk 21.10.2004, 18:04
Код
function substr(scanstr,fstr: pointer; lenscan, lenfstr: word): pointer;
 begin
   asm
   push ds
   mov  word ptr @Result,0
   mov  word ptr @Result+2,0
   lds  si,scanstr
   mov  cx,lenscan
   les  di,fstr
   mov  dx,lenfstr
   cmp  dx,cx
   ja   @@substrDone
   sub  dx,cx
@@FindSeq:
   push cx
   push si
   push di
   rep  cmpsb
   pop  di
   pop  si
   pop  cx
   jnz  @@NextSym
   mov  word ptr @Result,si
   mov  word ptr @Result+2,ds
   jmp  @@substrDone
@@NextSym:
   inc  di
   dec  dx
   jnz  @@FindSeq
@@substrDone:
   pop  ds
   end;
 end;

Автор: oleg1973 21.10.2004, 18:24
Код

mov esi,mystring
mov edi,mydata
mov ecx,stringLEN
mov edx,dataLEN
lp0:
       push esi
       push edi
lp:
       lodsb
       cmp [edi],al
       jne lp1
       inc edi
       dec edx
       cmp edx,0
       je там куданить типа массив кончился а не совпало
       loop lp
       pop esi
       pop esi < edi указатель на адрес в массиве где совпадение
       ret
lp1:
       pop edi
       pop esi
       inc edi
       jmp lp0


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)