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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2016, 20:22   #1
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию Тактовая частота ЦП

Всем привет!
Подскажите, как определить тактовую частоту процессора в реальном режиме? Как я понял CPUID её не возвращает? Где-то читал, что можно через инструкцию RDTSC, но хотелось-бы рабочий пример.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 06.07.2016, 20:58   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Код:
rdtsc macro		;макрос команды rdtsc
db 0Fh,31h
	endm
.model small
.data
clock	db 'CPU Clock: $'
mhz	db 'MHz',13,10,'Push any key to exit...  $'
.stack 256
.code
.386
start:
	mov ax,@data	;Настраиваем сегментный регистр
	mov ds,ax
	mov ax,40h	;настраиваем сегментный регистр es на область данных BIOS
	mov es,ax
mlp:	mov edi,es:[6ch];берем количестко тиков таймера(1 тик равен 55 мсек)
lp1:	cmp es:[6ch],edi;ожидаем пока не закончится текущий тик
	jz lp1
	mov edi,es:[6ch];берем количество тиков таймера
	rdtsc		;читаем счетчик тактов процессора
	mov ecx,edx	;сохраняем счеттчик тактов в начале тика
	mov ebx,eax
lp2:	cmp es:[6ch],edi;ожидаем конца тика таймера
	jz lp2
	rdtsc		;берем количество тиков таймера
	sub eax,ebx	;вычитаем из конечного числа тактов начальное
	sub edx,ecx	;получаем количество тактов процессора за 55 мсек
	sbb edx,0
	mov ecx,55000
	div ecx		;делим это количество на 55000, получаем приблизительное количество миллионов тактов в 1 сек(частоту в МГц)
	push ax		;сохраняем частоту процессора
	mov ah,2
	mov bh,0
	xor dx,dx
	int 10h		;устанавливаем курсор в левый верхний угол
	mov ah,9		;функция вывода сообщения на экран
	lea dx,clock		;выводимое сообщение
	int 21h			;выводим на экран
	pop ax		;восстанавливаем частоту
	call printdec	;выводим частоту на экран
	mov ah,9		;функция вывода сообщения на экран
	lea dx,mhz		;выводимое сообщение
	int 21h			;выводим на экран
	
	mov ah,1
	int 16h		;проверяем нажатие клавиши
	jz mlp 		;если не нажата, продолжаем программу.
	mov ax,4c00h	;закончить программу
	int 21h
;преобразование числа из ах в десятичную строку и вывод на экран
;ax - число
printdec proc
	push cx	;сохраняем регистры
	push dx
	push bx
	mov bx,10	;основание системы
	xor cx,cx	;в сх будет количество цифр в десятичном числе
@@m1a:	xor dx,dx
	div bx		;делим число на степени 10
	push dx		;и сохраняем остаток от деления(коэффициенты при степенях) в стек
	inc cx		;увеличиваем количество десятичных цифр числа
	test ax,ax	;после деления остался 0?
	jnz @@m1a	;если нет, продолжаем
	mov ah,2        ;ф-я вывода символа
@@m2a:	pop dx		;взять из стека цифру цисла
	add dl,'0'	;преобразовываем цифру в ASCII символ
	int 21h		;вывести на экран
	loop @@m2a	;все цифры
	pop bx		;восстанавливаем регистры
	pop dx
	pop cx
	ret		;выход из подпрограммы
printdec endp

end start
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 06.07.2016, 21:20   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

alexcoder, круто! Спасибо большое!!! Переделал на FASM - всё работает..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 07.07.2016, 13:35   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Привет, R71MT!
вот программа с замером частоты ЦПУ несколькими способами
Код:
; masm windows gui #
.686P
.model flat
include windows.inc
includelib kernel32.lib
includelib user32.lib
includelib ntdll.lib
includelib winmm.lib
includelib advapi32.lib
extern _imp__RegCloseKey@4:dword
extern _imp__RegQueryValueExA@24:dword
extern _imp__RegOpenKeyExA@20:dword
extern _imp__Sleep@4:dword
extern _imp__SleepEx@8:dword
extern _imp__ZwPowerInformation@20:dword
extern _imp__MessageBoxA@16:dword
extern _imp__wsprintfA:dword
extern _imp__QueryPerformanceFrequency@4:dword
extern _imp__QueryPerformanceCounter@4:dword
extern _imp__ZwQueryPerformanceCounter@8:dword
extern _imp__GetTickCount@0:dword
extern _imp__timeGetTime@0:dword
extern _imp__CreateThread@24:dword
extern _imp__SetEvent@4:dword
extern _imp__CreateEventA@16:dword
extern _imp__CloseHandle@4:dword
ProcessorInformation equ 11

PROCESSOR_POWER_INFORMATION STRUCT
	Number				DWORD	?
	MaxMhz				DWORD	?
	CurrentMhz			DWORD	?
	MhzLimit			DWORD	?
	MaxIdleState		DWORD	?
	CurrentIdleState	DWORD	?
PROCESSOR_POWER_INFORMATION ENDS
buffer equ 300h
.code
start:
;---------------------------------------
	mov eax,80000000h
	cpuid
	test eax,eax
	jns @f
	mov eax,80000004h
	cpuid
	mov edi,offset s3
	stosd
	xchg eax,ebx
	stosd
	xchg eax,ecx
	stosd
	xchg eax,edx
	stosd	
	jmp short a1
@@:     mov edi,offset s1
	mov esi,offset s2
	mov ecx,num+1
	rep movsd
;-----------------------------------------
a1:	sub esp,buffer ;резервируем память под буфер куда пойдет результат
	mov ebp,esp ; сохраняем указатель на буфер в регистре EBP
	xor ebx,ebx
;--------------------------------------------------------
	mov edi,7
@@:	push offset ThreadID;lpThreadId --> CreateThread поместит сюда ID созданного тpеда
	push ebx;NORMAL_PRIORITY_CLASS;dwCreationFlags --> 0 означает, что тpед начинает выполняться сpазу же после его создания. Для обpатного можно использовать флаг CREATE_SUSPEND
	push ebx;lpParametr -- Паpаметp, котоpый вы хотите пеpедать функции тpеда
	push handle[edi*4];lpStartAddress -- Адpес функции тpеда. Эта функция будет выполнять пpедназначенную для тpеда pаботу. Эта функция должна получать один и только один 32-битный паpаметp и возвpащать 32-битное значение.
	push ebx;dwStackSize -- pазмеp стека тpеда. Если вы хотите, чтобы тpед имел такой же pазмеp стека, как и у основного, используйте NULL в качестве паpаметpа
	push ebx;lpThreadAttributes -- можено использовать NULL, если хотите, чтобы у тpеда были установки безопасности по умолчанию. 
	call _imp__CreateThread@24
	push eax;Если вызов CreateThread пpошел успешно, она возвpащает хэндл созданного тpеда, в пpотивном случае она возвpащает NULL
	call _imp__CloseHandle@4
	dec edi
	jns @b
@@:	cmp flag,11111111b;пока не завершатся все треды
	jnz @b
;------------------------------------------------------------
	mov edi,offset Freq
	push dword ptr [edi+7*4];Freq7
	push dword ptr [edi+6*4];Freq6
	push dword ptr [edi+5*4];Freq5
	push dword ptr [edi+4*4];Freq4
	push dword ptr [edi+3*4];Freq3
	push dword ptr [edi+2*4];Freq2
	push dword ptr [edi+1*4];Freq1
	push dword ptr [edi+0*4];Freq
	push offset format ; передаем в стек указатель на строку спецификаторов
        push ebp    ; передаем указатель на буфер для получения результата
	call _imp__wsprintfA ; вызов функции wsprintf
;------------------------------------------------------------
	push ebx	; тип MessageBoxA	
	push offset sztext ;заголовок
	push ebp	;текст который будет выведен на MessageBox	
	push ebx        ; hWnd
	call _imp__MessageBoxA@16 ;вызов функции MessageBox
	add esp,buffer+10*4; выталкиваем аргументы из стека и уничтожаем буфер
	ret
;------------------------------------------------------------
ThreadProc PROC
local ppi:PROCESSOR_POWER_INFORMATION
	push sizeof(PROCESSOR_POWER_INFORMATION)
	lea eax,ppi
        push eax 
        push ebx
        push ebx
        push ProcessorInformation 
        call _imp__ZwPowerInformation@20
	mov eax,[ppi.CurrentMhz];CPU Frequency via PROCESSOR_POWER_INFORMATION struct
	mov Freq,eax
	or flag,1b
	ret
ThreadProc ENDP
;-------------------------------------------------
ThreadProc1 PROC
local hKey:dword
local lpType:dword
local DecVal:dword
local lpcbData:dword
        lea eax,hKey
	push eax
	push KEY_READ
        push ebx;0
        push offset szTestKey
        push HKEY_LOCAL_MACHINE
	call _imp__RegOpenKeyExA@20;Open an existing registry key
        mov lpcbData,4
	lea eax,lpcbData
	push eax;offset lpcbData
        lea eax,DecVal
	push eax
	lea eax,lpType
	push eax
	push ebx;0
	push offset szHandle 
	push hKey
        call _imp__RegQueryValueExA@24;Get a value from the registry key 
	push hKey
        call _imp__RegCloseKey@4;Close the registry key
	mov eax,DecVal;CPU Frequency via registery functions
	mov Freq+1*4,eax
	or flag,10b
	ret
ThreadProc1 ENDP
;------------------------------------------------------------
ThreadProc2 PROC
local TimerLo:dword
a4:     rdtsc
        mov TimerLo,eax;
        push 250             ; DelayTime=250
        call _imp__Sleep@4   ; Sleep(DelayTime);выжидаем 0,25 секунды
        rdtsc
	sub eax,TimerLo
	cmp eax,Freq+2*4
	jnb @f
	mov Freq+2*4,eax;выбираем наименьший временной отрезок
@@:	dec count
	jnz a4;повторяем 4 раза
	mov eax,Freq+2*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+2*4,edx	
	or flag,100b
	ret
ThreadProc2 ENDP

ThreadProc3 PROC
local TimerLo:dword
a5:	rdtsc
        mov TimerLo,eax;
        push ebx
        push 250             ; DelayTime=250
        call _imp__SleepEx@8 ; SleepEx(DelayTime,FALSE);выжидаем 0,25 секунды
        rdtsc
	sub eax,TimerLo
	cmp eax,Freq+3*4
	jnb @f
	mov Freq+3*4,eax;выбираем наименьший временной отрезок
@@:	dec count+1
	jnz a5;повторяем 4 раза
	mov eax,Freq+3*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+3*4,edx	
	or flag,1000b
	ret
ThreadProc3 ENDP
;-------------------------------------------------------
ThreadProc4 PROC
local temp:qword
local temp1:qword
local TimerLo:dword
local x:qword
	lea eax,temp;получаем в переменную temp частоту ACPI-таймера
	push eax
        call _imp__QueryPerformanceFrequency@4;обычно 3579545 Гц
	mov eax,dword ptr temp+4
	shrd dword ptr temp,eax,2;уменьшаю значение частоты ACPI-таймера 
	shr dword ptr temp+4,2;в 4 раза
a6:	lea eax,temp1;получаем в переменную temp1 количество тиков 
	push eax;ACPI-таймера прошедших с момента старта системы
	call _imp__QueryPerformanceCounter@4
	mov eax,dword ptr temp1
	mov edx,dword ptr temp1+4
	add eax,dword ptr temp
	adc edx,dword ptr temp+4
	mov dword ptr x,eax;x=temp+temp1
	mov dword ptr x+4,edx
        rdtsc
        mov TimerLo,eax;
@@:	lea eax,temp1;выжидаем 0,25 секунды по ACPI-таймеру 
	push eax
	call _imp__QueryPerformanceCounter@4
	mov eax,dword ptr temp1
	mov edx,dword ptr temp1+4
	cmp dword ptr x,eax
	ja @b
	cmp dword ptr x+4,edx
	ja @b
        rdtsc
	sub eax,TimerLo
	cmp eax,Freq+4*4
	jnb @f
	mov Freq+4*4,eax;выбираем наименьший временной отрезок
@@:	dec count+2
	jnz a6;повторяем 4 раза
	mov eax,Freq+4*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+4*4,edx
	or flag,10000b
	ret
ThreadProc4 ENDP
Mikl___ вне форума Ответить с цитированием
Старый 07.07.2016, 13:36   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

нельзя отправить более 8000 символов, поэтому двумя частями
Код:
ThreadProc5 PROC
local temp:qword
local temp1:qword
local TimerLo:dword
local x:qword
local x1:qword
;иммитация команды QueryPerformanceFrequency
	lea eax,temp;получаем в переменную temp частоту ACPI-таймера
	push eax ;обычно 3579545 Гц
	lea eax,x;промежуточная ячейка
	push eax
	call _imp__ZwQueryPerformanceCounter@8
	mov eax,dword ptr temp+4
	shrd dword ptr temp,eax,2;уменьшаю значение частоты ACPI-таймера 
	shr dword ptr temp+4,2;в 4 раза
;иммитация команды QueryPerformanceCounter
a7:	lea eax,x;обычно 3579545 Гц
	push eax
	lea eax,temp1;получаем в переменную temp1 количество тиков 
	push eax;ACPI-таймера прошедших с момента старта системы
	call _imp__ZwQueryPerformanceCounter@8
	mov eax,dword ptr temp1; 3579545
	mov edx,dword ptr temp1+4;(частота ACPI-таймера)/4 
	add eax,dword ptr temp; плюс текущее количество тиков
	adc edx,dword ptr temp+4
	mov dword ptr x1,eax;x1=temp+temp1
	mov dword ptr x1+4,edx
        rdtsc
        mov TimerLo,eax;
@@:	lea eax,x
	push eax;выжидаем 0,25 секунды по ACPI-таймеру 
	lea eax,temp1
	push eax
	call _imp__ZwQueryPerformanceCounter@8
	mov eax,dword ptr temp1
	mov edx,dword ptr temp1+4
	cmp dword ptr x1,eax
	ja @b
	cmp dword ptr x1+4,edx
	ja @b
	rdtsc
	sub eax,TimerLo
	cmp eax,Freq+5*4
	jnb @f
	mov Freq+5*4,eax;выбираем наименьший временной отрезок
@@:	dec count+3
	jnz a7;повторяем 4 раза
	mov eax,Freq+5*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+5*4,edx
	or flag,100000b
	ret
ThreadProc5 ENDP
;--------------------------------------------
ThreadProc6 PROC
local TimerLo:dword
local temp:dword
a3:	call _imp__GetTickCount@0;возвращает количество миллисекунд, 
	mov temp,eax;прошедших со времени последнего старта системы
	add temp,250
        rdtsc
        mov TimerLo,eax
@@:	call _imp__GetTickCount@0
	cmp temp,eax;выжидаем 0,25 секунды
	ja @b
	rdtsc
	sub eax,TimerLo
	cmp eax,Freq+6*4
	jnb @f
	mov Freq+6*4,eax;выбираем наименьший временной отрезок
@@:	dec count+4
	jnz a3;повторяем 4 раз
	mov eax,Freq+6*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+6*4,edx
	or flag,1000000b
	ret
ThreadProc6 ENDP
;--------------------------------------------
ThreadProc7 PROC
local TimerLo:dword
local temp:dword
a2:	call _imp__timeGetTime@0;возвращает количество миллисекунд, прошедших
	mov temp,eax;со времени последнего старта системы
	add temp,250
        rdtsc
        mov TimerLo,eax
@@:	call _imp__timeGetTime@0
	cmp temp,eax;выжидаем 0,25 секунды
	ja @b
	rdtsc
	sub eax,TimerLo
	cmp eax,Freq+7*4
	jnb @f
	mov Freq+7*4,eax
@@:	dec count+5
	jnz a2;повторяем 4 раза
	mov eax,Freq+7*4;переводим в МГц
	mov ecx,17180;2^32/250000=4294967296/250000=17179,869184
	mul ecx
	mov Freq+7*4,edx
	or flag,10000000b
	ret
ThreadProc7 ENDP
;------------------------------------------------------------
.data
format	db "1) через PROCESSOR_POWER_INFORMATION %u MHz",10
	db "2) через реестр %u MHz",10
	db "3) через rdtsc и Sleep %lu MHz",10
	db "4) через rdtsc и SleepEx %lu MHz",10
	db "5) через rdtsc и ACPI-таймер (QueryPerformanceFrequency и QueryPerformanceCounter) %lu MHz",10
        db "6) через rdtsc и ACPI-таймер (ZwQueryPerformanceCounter) %lu MHz",10
       	db "7) через rdtsc и GetTickCount %lu MHz",10
       	db "8) через rdtsc и timeGetTime %lu MHz",10
s1 equ $
	db "9) при помощи команды cpuid: "
s3	db "FFFFFFFFFFFFFFFF MHz"
	dd 4 dup (0)
s2 equ $
	db "9) Ваш процессор не поддерживает определение частоты через cpuid",0
num equ ($-s2)/4 +1
szTestKey db  'HARDWARE\DESCRIPTION\System\CentralProcessor\0',0
szHandle db  '~MHz',0
sztext	db "CPU Frequency",0
handle  dd ThreadProc7,ThreadProc6,ThreadProc5,ThreadProc4
	dd ThreadProc3,ThreadProc2,ThreadProc1,ThreadProc
ThreadID dd ?
flag	dd 0
Freq	dd 8 dup (-1)
count	db 5 dup (4)
end start
Mikl___ вне форума Ответить с цитированием
Старый 07.07.2016, 15:13   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Mikl___, да здесь целая библиотека этих вариантов! Как говорят: на все случаи жизни! Ваще огонь! Спасибо большое!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 08.07.2016, 05:09   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Привет, R71MT,
ну как? на fasm перевел? работает? Не хочешь свой сайт оживить?
Mikl___ вне форума Ответить с цитированием
Старый 08.07.2016, 09:39   #8
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Mikl___, обычно юзаю FASM, а здесь хотел сходу собрать масмом, но чёто не получается. Трудно после фасма на него переключиться.. Какие ключи нужно прописывать в батнике? Использую MASM_32v10r (система ХР).

P.S// на счёт сайта отправил в личку..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 08.07.2016, 12:38   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Какие ключи нужно прописывать в батнике?
bat-файл универсальный, по первой строке определяет для какой системы
  1. Windows
  2. DOS
какой компилятор
  1. masm
  2. fasm
  3. tasm
и тип исполняемого файла
  1. exe
  2. dll
  3. com
Код:
cls
set filename=%1 <-- из командной строки берет имя аsm-файла
call :read_settings %filename% <-- здесь разбор первой строки asm-файла
@echo %compiler% %os% %kind_of_file%
if exist %filename%.exe del %filename%.exe
if exist %filename%.com del %filename%.com
if exist %filename%.dll del %filename%.dll
set %compiler%_path= <-- здесь путь к папке с компиляторами, либами и инклюдами
goto :%compiler%%os%%kind_of_file%
:wasmwindowsgui
%wasm_path%\bin\wasm -6prs -mf -i%wasm_path%\include\WASM %filename%.asm || exit
%wasm_path%\bin\wlink file %filename%.obj form windows nt op c LIBPath ^
%wasm_path%\lib\ Library user32.lib,kernel32.lib,gdi32.lib
goto :m1
:fasmdoscom
:fasmdosexe
%fasm_path%\bin\fasm %filename%.asm
exit
:goasmwindowsgui
%goasm_path%\bin\GoAsm %filename% 
if exist %1.rc (
%goasm_path%\bin\GoRc /r %filename%.rc || exit
%goasm_path%\bin\GoLink %filename%.obj %filename%.res user32.dll kernel32.dll ^
gdi32.dll comctl32.dll shell32.dll ole32.dll comdlg32.dll || exit
del %filename%.res
) else (
%goasm_path%\bin\GoLink %filename%.obj user32.dll kernel32.dll gdi32.dll ^
comctl32.dll shell32.dll ole32.dll comdlg32.dll
)
goto :m1
:goasmwindowsconsole
%goasm_path%\bin\GoAsm %filename%
%goasm_path%\bin\GoLink /console %filename%.obj kernel32.dll user32.dll ^
winmm.dll gdi32.dll
goto :m1
:lzasmwindowsconsole
:lzasmwindowsgui
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oPE -c -subsys %kind_of_file%
goto :m1
:lzasmdoscom
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oCOM -c
goto :m1
:lzasmdosexe
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oEXE -c
goto :m1
:masmwindowsgui
set masm_path=d:\m32_v8
if exist %filename%.rc (
%masm_path%\bin\rc /v %1.rc
%masm_path%\bin\cvtres /machine:ix86 %1.res
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink /SUBSYSTEM:WINDOWS ^
/LIBPATH:%masm_path%\lib /NOLOGO %1.obj %filename%.res || exit
del %filename%.res
) else (
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink /SUBSYSTEM:WINDOWS /ALIGN:4 /MERGE:.data=.text ^
/LIBPATH:%masm_path%\lib /NOLOGO /STUB:%masm_path%\bin\stubby.exe %filename%.obj
)
goto :m1
:masmwindowsconsole
set masm_path=d:\m32_v8
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink /SUBSYSTEM:CONSOLE /ALIGN:4 /MERGE:.data=.text ^
/LIBPATH:%masm_path%\lib /NOLOGO /STUB:%masm_path%\bin\stubby.exe %filename%.obj

goto :m1
:masmwindowsnative
if exist %1.sys del if exist %1.sys
set masm_path=d:\masm32
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /nologo /c /coff %filename%.asm  || exit
%masm_path%\bin\link /LIBPATH:%masm_path%\lib\ /nologo /driver /base:0x10000 ^
/align:32 /out:%filename%.sys /subsystem:native %filename%.obj  || exit
goto :m1

:masmwindowsdll
set masm_path=d:\m32_v8
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink /SUBSYSTEM:DLL /ALIGN:4 /MERGE:.data=.text ^
/LIBPATH:%masm_path%\lib /NOLOGO /STUB:%masm_path%\bin\stubby.exe %filename%.obj
goto :m1

:tasmwindowsgui
%tasm_path%\bin\tasm32 /I%tasm_path%\include\TASM /q /z %filename%.asm  %filename%.obj /ml/m3
%tasm_path%\bin\ilink32 -L%tasm_path%\lib /Tpe /aa /c /o /x %filename%.obj
goto :m1
:tasmwindowsconsole
%tasm_path%\bin\tasm32 /I%tasm_path%\include\TASM %filename%.asm /ml /m3 /q /z %filename%.obj 
%tasm_path%\bin\ilink32 -L%tasm_path%\lib /Tpe /ap /c /o /x %filename%.obj
goto :m1
:nasmwindowsconsole
:nasmwindowsgui
%nasm_path%\bin\nasmw -O1 -f bin %filename%.asm -o %filename%.exe ^
-I%nasm_path%\include\NASM\
exit
:nasmdoscom
:nasmdosexe
:nasmwindowsdll
%nasm_path%\bin\nasmw -f bin %filename%.asm -o %filename%.%kind_of_file% ^
-I%nasm_path%\include\NASM\
exit
:tasmdoscom
%tasm_path%\bin\tasm /m3 %filename%.asm
%tasm_path%\bin\tlink /t/x %filename%.obj
goto :m1
:tasmdosexe
%tasm_path%\bin\tasm /m3 %filename%.asm
%tasm_path%\bin\tlink /x %filename%.obj
goto :m1
:wasmdoscom
%wasm_path%\bin\wasm %filename%.asm
%wasm_path%\bin\wlink file %filename%.obj form dos com
goto :m1
:wasmdosexe
%wasm_path%\bin\wasm %filename%.asm
%wasm_path%\bin\wlink file %filename%.obj form dos
goto :m1
:poasmwindowsconsole
%poasm_path%\bin\poasm /Gz /I%poasm_path%\include\PoAsm %filename%.asm 
%poasm_path%\bin\polink /SUBSYSTEM:CONSOLE /LIBPATH:%poasm_path%\lib /MERGE:.data=.text %filename%.obj 
goto :m1
:masmdoscom
\masm32\bin\ml /AT /c /Cp %filename%.asm
\masm32\bin\link16 /T %filename%.obj,,,,,
goto :m1
:masmdosexe
\masm32\bin\ml /c /Cp %filename%.asm
\masm32\bin\link16 %filename%.obj,,,,,
:m1
if exist %filename%.map del %filename%.map
if exist %filename%.obj del %filename%.obj
if exist %filename%.ilc del %filename%.ilc
if exist %filename%.ild del %filename%.ild
if exist %filename%.ilf del %filename%.ilf
if exist %filename%.ils del %filename%.ils
if exist %filename%.tds del %filename%.tds
exit
:read_settings
for /f "eol=# tokens=2-5" %%A in (%filename%.asm) do (
set compiler=%%A
set os=%%B
set kind_of_file=%%C
if %%D == # exit /b )
exit /b

Последний раз редактировалось Mikl___; 08.07.2016 в 12:42.
Mikl___ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Снизилась тактовая частота процессора. Eugen24 Компьютерное железо 9 09.10.2013 16:50
Частота звука. Vova777 Мультимедиа в Delphi 4 14.05.2013 07:53
Частота WAV Voxa7 Помощь студентам 4 18.03.2011 12:55
разъясните терминалогию,референсная частота,частота чипа,памяти,шейдерного блока Jesus2.0 Компьютерное железо 5 04.05.2009 07:54
Превышена частота Showy Компьютерное железо 6 08.07.2008 12:48