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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2010, 00:05   #1
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию Проблема с cpuid

Вот пишу программу на masm определяющую марку и частоту процессора

Не пойму почему компилятор ругается на на cpuid

вот код программы
Код:
		.386
	.model flat,stdcall
option casemap:none
	include C:\masm32\INCLUDE\windows.inc
	include C:\masm32\INCLUDE\kernel32.inc
	include C:\masm32\INCLUDE\user32.inc
	include C:\masm32\INCLUDE\advapi32.inc
	include C:\masm32\INCLUDE\GDI32.inc
	
	includelib C:\masm32\lib\comctl32.lib
	includelib C:\masm32\lib\user32.lib
	includelib C:\masm32\lib\gdi32.lib
	includelib C:\masm32\lib\kernel32.lib
	includelib C:\masm32\lib\user32.lib
	includelib C:\masm32\lib\advapi32.lib

MAIN_WINDOW_PROC	PROTO	:DWORD, :DWORD, :DWORD, :DWORD


.DATA
HINST		DWORD	NULL
HWND_WIN	DWORD	NULL
;----
String_CLASS		DB			"MY_WINDOW",0
String_CAPTION		DB			"Курсавой проект",0
MARKA				DB			"Марка процессора:",0
SPEED				DB			"Скорость:",0
NAME					Db			 50 dup (0)
;----
MSG_WIN	MSG	<0>
;---
;---
SHABLON			DB			"0=%d	",0
CONTENER			DB			256	dup (0)


.CODE
START:
	invoke GetModuleHandle , NULL
	mov HINST , EAX
	 ;-
	  CALL MY_REGISTER_CLASS
	  	cmp EAX , NULL
	  	je EXIT
	  ;--
	  invoke  CreateWindowEx , WS_EX_CLIENTEDGE, addr  String_CLASS , addr String_CAPTION , \  	
	  		WS_OVERLAPPEDWINDOW, 100,	100,	500,	500 , \
	  		NULL , NULL , HINST ,	 NULL
	  ;---
	  Mov HWND_WIN , EAX
	  ;--
	  invoke ShowWindow	, HWND_WIN , TRUE		;создание видимости окна
	  invoke UpdateWindow , HWND_WIN					
	  ;-------------
MSG_LOOP:
	 					invoke GetMessage , addr MSG_WIN , NULL , NULL , NULL	
	 					cmp Eax , FALSE
	 					JE	EXIT
	 					
	 						invoke TranslateMessage , addr  MSG_WIN		
	 						invoke DispatchMessage	, addr MSG_WIN		
	 					JMP MSG_LOOP
		;==========		
EXIT:
		invoke		ExitProcess	, NULL
;--------------------------------------------------------------------------------------------------------------------------------------
;							GET POINT SCREEN														

	
MY_REGISTER_CLASS PROC
local _Struct_WNDCLASS : WNDCLASS
;--
	Mov _Struct_WNDCLASS.style		,	CS_DBLCLKS			;стиль окна
	Mov _Struct_WNDCLASS.lpfnWndProc	,	MAIN_WINDOW_PROC	;процедура главного окна
	Mov _Struct_WNDCLASS.cbClsExtra	,	NULL		;дополнительная память для класса
	Mov _Struct_WNDCLASS.cbWndExtra	,	NULL		;дополнительная память для окна
		Mov Eax , HINST
	Mov _Struct_WNDCLASS.hInstance	,	Eax			;handle приложения
	
	Mov _Struct_WNDCLASS.lpszMenuName ,	NULL		;индетификатор меню
	Mov _Struct_WNDCLASS.lpszClassName ,	offset String_CLASS ;адрес строки класса
	;------
	
		invoke LoadIcon , NULL , IDI_EXCLAMATION 			;выбор иконки
	Mov _Struct_WNDCLASS.hIcon , Eax
	;----
		invoke LoadCursor , NULL , IDC_ARROW			;выбор курсора
	Mov _Struct_WNDCLASS.hCursor	,	Eax
	;----
	;	invoke CreateSolidBrush	,	00FF0000h			;вовратит индитификатор кисти
		invoke GetStockObject	,	LTGRAY_BRUSH
	Mov _Struct_WNDCLASS.hbrBackground	,	Eax
;========
			invoke RegisterClassA	, addr		_Struct_WNDCLASS
;========
ret
MY_REGISTER_CLASS ENDP	 
;---------------------------------------------------------------------------------------------------------------------------------
;									WINDOW		PROCEDURE									
;---------------------------------------------------------------------------------------------------------------------------------
MAIN_WINDOW_PROC	PROC	  USES EBX	ESI  EDI \
									hWnd_ :DWORD	, MESG :DWORD , wParam :DWORD , IParam :DWORD
LOCAL	_HDC	:DWORD									
;----
						
							CMP	MESG	,	WM_DESTROY
						JE		WMDESTROY
;---
				invoke GetDC	,	hWnd_
					mov	_HDC	,	EAX
					invoke	SetBkMode	,	_HDC	,	TRANSPARENT
				invoke	TextOut,	_HDC ,0,20, addr MARKA,17 
				invoke	TextOut,	_HDC ,0,40, addr SPEED,9
				
				;----Определение марки процессора
				cpuid 
				mov [NAME], ЕВХ
				mov [NAME+4], EDX
				mov [NAME+8], ECX 
				invoke	TextOut,	_HDC ,0,60, addr NAME ,49
				
;------
DEF_:
		invoke	DefWindowProc ,	hWnd_ ,	MESG , wParam , IParam
		jmp	FINISH
;-----	

WMDESTROY:
		invoke	PostQuitMessage , FALSE
;---	 
FINISH: 
RET 16
MAIN_WINDOW_PROC	ENDP
;++++++++++++++++++++++++++++++++++++++++++++++
END START
а
вот ошибки выдаваемые на часть кода отмеченного красным
Код:
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(121) : error A2085: instruction or register not accepted in current CPU mode
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(122) : error A2008: syntax error : NAME
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(123) : error A2008: syntax error : NAME
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(124) : error A2008: syntax error : NAME
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(125) : error A2008: syntax error : NAME
C:\masm32\bin\work\kurs\Ishodnic\kurs.asm(125) : error A2042: statement too complex
Подскажите в чём ошибка?
Nitrino вне форума Ответить с цитированием
Старый 07.01.2010, 00:17   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Поменяйте имя метки NAME на другое. Хотя бы, например PNAME.
А чтобы cpuid пользовать, поставьте директиву .686
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 07.01.2010, 00:33   #3
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Спасибо поправил это, но почему то выдаёт ошибку
error A2044: invalid character in file
на строку
Код:
	mov EAX , 0
	cpuid 
	mov dword ptr PNAME+4, ЕВХ
	mov dword ptr PNAME+8, EDX
	mov dword ptr PNAME+12, ECX 
	invoke	TextOut,	_HDC ,0,60, addr PNAME ,50
Nitrino вне форума Ответить с цитированием
Старый 07.01.2010, 00:36   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

EBX набери еще раз.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 07.01.2010, 00:47   #5
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Спасибо)) как я умудрился не пойму))))
Подскажите ещё пожалуйста, вот cpuid выдаёт AuthenticAMD
а как получить больше информации, например Athlon X2 Dual-Core и прочее ??
Nitrino вне форума Ответить с цитированием
Старый 07.01.2010, 00:55   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Я вот даже не знаю что еще можно ответить, кроме "Смотрите документацию по этой команде"
http://www.sandpile.org/ia32/cpuid.htm
http://www.amd.com/us-en/assets/cont...docs/25481.pdf
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 07.01.2010, 01:33   #7
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Спасибо разобрался с cpuid всё получилось
Как сделать что бы программа не выводила лишние символы из строки
то вот что получается
Nitrino вне форума Ответить с цитированием
Старый 07.01.2010, 01:36   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Добавляйте ноль в конце строки и все будет OK
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 07.01.2010, 01:46   #9
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

вот нахождение марки процессора, в конце добавляю 0 и всё равно так же выводит
Код:
;----Определение марки процессора
				mov edi, OFFSET PNAME
				mov eax, 80000002h
        			cpuid
        			mov [edi], eax
        			add edi, 4
        			mov [edi], ebx
        			add edi, 4
        			mov [edi], ecx
        			add edi, 4
        			mov [edi], edx
        			add edi, 4
        			mov eax, 80000003h
        			cpuid
        			mov [edi], eax
        			add edi, 4
        			mov [edi], ebx
        			add edi, 4
        			mov [edi], ecx
       			add edi, 4
        			mov [edi], edx
        			add edi, 4
        			mov eax, 80000004h
        			cpuid
        			mov [edi], eax
        			add edi, 4
        			mov [edi], ebx
        			add edi, 4
        			mov [edi], ecx
        			add edi, 4
        			mov [edi], edx
        			add edi, 4
        			mov eax, 0
        			mov [edi], eax
        			invoke	TextOut,	_HDC ,135,20, addr PNAME ,50
Nitrino вне форума Ответить с цитированием
Старый 07.01.2010, 01:53   #10
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

А... ну TextOut принимает длину строки в последнем параметре. У вас он 50 символов.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37