Wyciągnięcie informacji o procesorze

0

Witam państwa.
Powiem bez ogródek.
Mam do zrobienia w asemblerze pracę. Pracuję na linuxie i bez żadnych bibliotek mam wyprowadzić informacje o procesorze. Próbuje to wyciągnąć.

3:0 – Stepping
7:4 – Model
11:8 – Family
13:12 – Processor Type
19:16 – Extended Model
27:20 – Extended Family

Ale niestety niezbyt rozumiem w czym popełniam błąd. A tu kod:

	mov $1, %eax
	cpuid
	mov	%eax,	liczba
	mov	%eax,	wiadomosc
	#mov	%ebx,	wiadomosc+4
	#mov	%ecx,	wiadomosc+8
	#mov	%edx,	wiadomosc+12
	mov	$wiadomosc,	%rdi
	call printf 

Mówiąc szczerze nie pokochałem tego języka, albo został źle wytłumaczony. Ale mam nadzieję na waszą pomoc. Przy okazji, może znacie jakieś dobre książki o asemblerze?

dodanie znacznika <code class="asm"> - furious programming

0

zapis 7:4 – Model oznacza tutaj, że model jest zapisany na bitach od 7 do 4 (czyli od 4 do 7, licząc od zera).
Wartość trzeba wyciągnąć za pomocą operacji bitowych, na przykład operacją AND z odpowiednią maską (by wyzerować wszystkie pozostałe bity) i przesunąć za pomocą SHR o tyle bitów, by liczba zaczynała się od bitu 0 a nie (jak w tym przypadku) od 4.

PS. odwrotnie będzie nawet łatwiej (najpierw SHR, potem AND).

0

Dobrze. Opierając się twoich wskazówkach wyszło coś takiego.

 	mov $1, %eax
	cpuid
	mov		%eax,	liczba 
	and		$15,	%eax // maska? Chce wypisać 0-3
	mov	%eax,	wiadomosc 
	mov	$wiadomosc,	%rdi
	call printf

Ale niestety nic nie wyświetla się ;/

dodanie znacznika <code class="asm"> - furious programming

0
printf("%d", liczba);

a nie

printf(liczba);

teraz przerób to na asemblera, nie znam linuksowej konwencji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1