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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 13:01   #1
In2ition
 
Регистрация: 23.12.2012
Сообщений: 4
Вопрос прочитать информацию о процессоре???

Преподаватель задал задание в последние дни перед сессией - вызвать функцию cpuid и из регистров прочитать информацию, . Уже не знаю, что делать, изучать ассемблер с нуля нет времени. завтра последний день. путаюсь, где удобнее написать программу: в линуксе или в виндовс?
ну это полбеды, главное, что не могу разобраться с программой
Если кто может помочь, буду очень признателен и благодарен!
последовательность действий:
Код:
mov eax, 0  ; № функции помещаем в eax
CPUID        ;  вызываем данную функцию
               ;теперь нужно прочитать информацию из 
               ;регистров ebx, ecx, edx
; как это сделать не знаю
понимаю, что ничего сложного с точки зрения алгоритма, но с ассемблером очень туго. Надеюсь на помощь и понимание.
In2ition вне форума Ответить с цитированием
Старый 23.12.2012, 13:51   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

In2ition
это не важно в линуксе или в виндовс после mov eax,0/CPUID в каждом из регистров ebx, ecx, edx будет по 4 буквы, а всего получится строка из 12 букв
Код:
.data
String db 12 dup(0)
.code
   mov eax,0
   cpuid
   mov dword ptr String,ebx
   mov dword ptr String+4,ecx
   mov dword ptr String+8,edx
выводишь строку String на экран (ну это уже будет зависеть под чем работаешь Linux, DOS или Windows)
в результате получишь следующее
Код:
производитель     |строка в EBX:ECX:EDX
------------------+---------------------
Intel             |GenuineIntel
UMC               |UMC UMC UMC
Cyrix             |CyrixInstead
AMD               |AuthenticAMD
NexGen            |NexGenDriven
Centaur Technology|CentaurHalls

Последний раз редактировалось Mikl___; 23.12.2012 в 13:58.
Mikl___ вне форума Ответить с цитированием
Старый 23.12.2012, 15:39   #3
In2ition
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Спасибо огромное, Mikl!

Возникли некоторые проблемы. Я так понял, Вы используете Intel-ситнаксис? По идее его должен и обязан поддерживать NASM в Linux-е. После некоторой доработки получил следующий код:
Код:
SECTION .data
	String db 12 dup(0)
	len equ $ - String
SECTION .text
global _start           ; the program entry point
_start:
     		mov eax,0
   		cpuid
   		mov dword ptr String,ebx
   		mov dword ptr String+4,ecx
   		mov dword ptr String+8,edx   
   		
   		mov eax, 4
		mov ebx, 1; stdout
		mov ecx, String
		mov edx, len
		int 0x80
		mov eax,1
		mov ebx,0
		int 0x80
пробую компилировать:
Код:
nasm -f elf file.asm
выдает ошибки:
Цитата:
help.asm:2: error: comma expected after operand 1
help.asm:9: error: comma, colon or end of line expected
help.asm:10: error: comma, colon or end of line expected
help.asm:11: error: comma, colon or end of line expected
если поменять String db 12 dup(0) на String db 12, 0xa то первая ошибка исчезает, что делать с остальными не знаю. может что подскажите?

Последний раз редактировалось In2ition; 23.12.2012 в 15:53.
In2ition вне форума Ответить с цитированием
Старый 23.12.2012, 18:31   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

In2ition
Началось... неужели сложно было написать, что будет использован NASM?
а в NASM данные определяются так
Код:
String times 12 db 0
и здесь придется исправлять
Код:
   		mov dword [String],ebx
   		mov dword [String+4],ecx
   		mov dword [String+8],edx
и возникает вопрос -- почему за полгода нельзя было познакомится с синтаксисом языка?
Mikl___ вне форума Ответить с цитированием
Старый 23.12.2012, 18:36   #5
In2ition
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Снова спасибо)) Дело в том, что мы не учили синтаксис языка, это особенности нашего современного образования, когда не учат, а требуют
In2ition вне форума Ответить с цитированием
Старый 23.12.2012, 21:29   #6
In2ition
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Не получается вывести значение регистра eax после вызова CPUID. По документации интел в eax должно храниться максимальное колличество поддерживаемых стандартных функций или как то так (Largest Standart Function Number Supported).
Делаю по предыдущему примеру - на экран выводится "мусор". Нужно для целочисленных значений по другому резервировать место в памяти? или в чем проблема?

One more question:
Как можно извлечь отдельные биты регистра? например: 0-3 или с 4 - по 7 биты регистра eax?

Последний раз редактировалось In2ition; 23.12.2012 в 23:18.
In2ition вне форума Ответить с цитированием
Старый 24.12.2012, 04:05   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
это особенности нашего современного образования, когда не учат, а требуют
Что поделаешь если образование студент желает получать из-под палки или под угрозой "сходить в армию?" Нет желания учится -- зачем вообще идти в университет?
Цитата:
По документации интел в eax должно храниться максимальное колличество поддерживаемых стандартных функций
Есть разница между количеством и его представлением в виде строки? Дели число на 10, к остатку добавляй 30h и подставляй как очередной символ в строку
Биты из регистра извлекаются командой AND или TEST
Mikl___ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в командном процессоре ОС UNIX Proby Помощь студентам 0 17.12.2011 07:10
Вопрос по процессоре!!! foggot Компьютерное железо 2 28.01.2011 00:31
Как прочитать информацию из мэйл агента samets Win Api 1 07.12.2009 16:26
Информация о процессоре ofolfa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 15.02.2009 11:46
информация о процессоре Миша Помощь студентам 7 17.10.2007 19:04