Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 16 из 33<  1 ... 13  14  15  16  17  18  19 ... 33  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 13.08.2005
TheVITALI Ну ты хоть сам-то разобрался, как это делается? А твой исходник написан так, что его просто ломает читать и править. Некрасивый он!

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)



Партнер
 

Member
Статус: Не в сети
Регистрация: 02.06.2005
Откуда: Khabarovsk
Подскажите,
какие групп команд работают быстрее:
a) установка бита
б) инвертирование бита
зарание, спасибо.


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
spmn Точно не знаю, но по-моему установка...

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

кто нибудь писал проги по выводу на экран движещегося объекта на ассемблере?
Может у кого нибудь есть куски кода или какая-нибудь инфа?


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
eshtrey
а интересует графика под что? ДОС, вынь, линух? В первом случае - банальная прямая запись в видеопамять или использование сервисов видеопрерывания...

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Мне нужна прога, которая будет выводить движущийся обЪект под DOS. Например по экрану будет ползти червяк. Т.е. в один момент времени прямой, а в другой изогнут, и так пока не нажмёшь Esc. Вот такой вот курсач!
Добавлено спустя 1 минуту, 4 секунды
Root
Мне нужна прога, которая будет выводить движущийся обЪект под DOS. Например по экрану будет ползти червяк. Т.е. в один момент времени прямой, а в другой изогнут, и так пока не нажмёшь Esc. Вот такой вот курсач!


 

Advanced member
Статус: Не в сети
Регистрация: 28.05.2004
Откуда: Deutschland
eshtrey
А не проще ли на бейсике такое написать?

_________________
Keep your hands off my power supply!


 

MadOverTolik
Я могу это и на голом С написать, но мне нужно на asm, курсач у меня такой


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
Код:
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
;                             MODEL
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
        .686
        .k3d
        .mmx
        .xmm
        .model flat, stdcall
        option casemap:none

;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
;                            INCLUDES
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН

        include \masm32\include\windows.inc
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\user32.lib

                assume   fs:flat

;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
;                            CODE
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
.code

        szCapt          db      "CPU Speed:", 0
        szFormat        db      "%lu MHz", 0

        szBuffer        db      32 dup (?)
        lpResult        db      32 dup (?)

        delay           dd      1000
        constant        dd      1000

start:
                finit
                emms

                rdtsc
                push    eax

                push    1000
                call    Sleep

                rdtsc
                pop     ebx
                sub     eax, ebx
                push    eax

                fild    dword ptr [constant]
                fild    dword ptr [delay]
                fmulp   st(1), st
                fild    dword ptr [esp]
                fxch
                fdivp   st(1), st
                frndint
                push    eax
                fistp   dword ptr [esp]
       
                push    offset szFormat
                push    offset lpResult
                call    wsprintfA
                add     sp, 4*3+4

                push    1010h
                push    offset szCapt
                push    offset lpResult
                push    0
                call    MessageBoxA
                ret

end start


есть такой код. может кто объяснить, где именно считается частота cpu. Тут как я понял используется куча инструкций для работы с FPU. rdtsc - считывает такты. Есть еще умножение и деление. Мне надо объяснить преподавательнице, как именно считается частота. Т.е. какими инструкциями, сколько тактов они занимают и т.д.

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? Промотрел твой отрывок. Не очень он понятный да еще и без комментов. Если тебе нужен подсчет частоты могу предложить вот это:
Код:
   
         rdtsc         ;RDTSC
   mov   TimerLo,EAX   ;Сохранили значение счетчика таков в переменные
   mov   TimerHi,EDX
   push   500d      ;Подождали 500 милисекунд
   call   Sleep
   rdtsc         ;получили новое значение счетчика тактов в регистры
   sub   EAX,TimerLo   ;вычли из младшей части нового младшую часть старого
   jnc   cont      ;если был перенос
   sub   EDX,1      ;вычли из старшей части доп. единицу
cont:   sub   EDX,TimerHi   ;вычли старшие части 
   mov   ECX,500000d   ;поделили разность между значениями счетчика тактов на 500(задержка)*1000(нас же мегагерцы интрересуют!)
   div   ECX      ;после выполнения этой команды - в EAX частота.

В твоем случае намутили еще с сопроцессором зачем-то... И при этом отбросили старшую часть счетчика тактов... Довольно дурацкий способ ИМХО. Токо если нужно продемонстрировать умение работать с сопроцессором....

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 12.07.2005
Откуда: Млечный путь
L.A.W.
Большое спасибо, я так понял влияние скорости выполнения самих инструкций здесь не так существенно? И еще, как этот код будет работать на разных семействах процессоров? Для меня важно, чтобы был одинаковый резалт на процессорах семейства 486-P5.

_________________
В этом мире меня подводят доброта и порядочность...


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
?Am(d)ber? писал(а):
Для меня важно, чтобы был одинаковый резалт на процессорах семейства 486-P5.

На 486 по-моему работать не будет. Они не поддерживают команду RDTSC.
Как определять частоту на них не интересовался...
?Am(d)ber? писал(а):
Большое спасибо, я так понял влияние скорости выполнения самих инструкций здесь не так существенно

Да. Можешь на всякий случай выставить процессу на время подсчета частоты приоритет TIME_CRITICAL.
Вот эта функция полностью, как я ее использовал.
Код:
;Функция freq, для определения тактовой частоты процессора
freq   proc
   pushad
   call   GetCurrentThread
   mov   thread_handle,EAX
   call   GetCurrentProcess
   mov   process_handle,EAX
   push   process_handle
   call   GetPriorityClass
   mov   priority_class,EAX
   push   thread_handle
   call   GetThreadPriority
   mov   thread_priority,EAX

   push   REALTIME_PRIORITY_CLASS
   push   process_handle
   call   SetPriorityClass

   push   THREAD_PRIORITY_TIME_CRITICAL
   push   thread_handle
   call   SetThreadPriority

   push   100
   call   Sleep      ;подождем 100 милисекунд
   dw   310Fh       ;RDTSC
   mov   TimerLo,EAX
   mov   TimerHi,EDX

   push   500d
   call   Sleep

   dw   310Fh       ;RDTSC
   sub   EAX,TimerLo
   jnc   cont
   sub   EDX,1
cont:   sub   EDX,TimerHi
   mov   ECX,d
   div   ECX
;   mov   TimerLo,EAX
       
   mov   ECX,0
   lea   EDI,buffer
   call   convert
   
   push   priority_class
   push   process_handle
   call   SetPriorityClass

   push   thread_priority
   push   thread_handle
   call   SetThreadPriority   

   popad
   ret
freq   endp

Добавлено спустя 3 минуты, 28 секунд
Ну естесвенно нужно объявить переменные. Они все тут четырехбайтовые.
convert - функция для вывода на экран.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
L.A.W.
Цитата:
На 486 по-моему работать не будет. Они не поддерживают команду RDTSC.
Есть не большенстве 486-ых и на некоторых 386.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Daemon писал(а):
Есть не большенстве 486-ых и на некоторых 386.

Возможно. На 486 точно нет CPUID. А про RDTSC точно не помню.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
На 486 есть cpuid, это я точно знаю, на 386 нет. Я думаю это не суть важно в контексте данной темы.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Daemon писал(а):
На 486 есть cpuid, это я точно знаю

Нету. Это и литературе есть написано и у меня самого когда-то четверка была...

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
L.A.W. писал(а):
Это и литературе есть написано и у меня самого когда-то четверка была...
CPU Informer вполне удачно работал на 4-ке от UMC и черпал информацию из cpuid, это я тоже точно знаю, и rdtsc тоже был.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Daemon писал(а):
CPU Informer вполне удачно работал

Возможно он получал информацию другим способом... Они есть.

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
L.A.W. по секрету скажу — CPU Informer писал Daemon ;)

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 13.08.2005
Anoss писал(а):
CPU Informer писал Daemon

А что это меняет?

_________________
I L.A.W. you, baby!
For a GNU dawn! For freedom! :-)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 641 • Страница 16 из 33<  1 ... 13  14  15  16  17  18  19 ... 33  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan