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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 21:57   #1
Умка)
 
Регистрация: 24.11.2013
Сообщений: 4
По умолчанию Задача на определение оборудования

Надо проверить наличие поддержки в процессоре виртуального процессора 8086. Помогите народ очень срочно надо.
тут определяет тип процессора.можно переделать так чтобы определила наличие виртуального процессора 8086???
Код:
.8086
.model small
.586
.data
 i8086mes db "i8086",13,10,'$'
 cpu      db "CPU: ",0,0,0,0,0,0,0,0,0,0,0,0,10,13,'$'
 ten      db 10
.stack 100h
.code
print macro mess
mov dx,offset mess
mov ah,09h
int 21h
endm print
main proc near
;-------------------------------
mov ax,@data
mov ds,ax
;-------------------------------
pushfd           ; размещение регистра EFLAGS в стеке
pop eax          ; извлечение значения EFLAGS в EAX
mov ebx, eax     ; сохранение значения в EBX
xor eax, 200000h ; изменение 21-го бита
push eax         ; размещение нового значения в стеке
popfd            ; сохранение нового значения в EFLAGS
pushfd           ; снова размещение EFLAGS в стеке
pop eax          ; значение EFLAGS теперь в EAX
xor eax, ebx     ; проверка 21-го бита
;je no_cpuid      ; если он не изменился, то CPUID не поддерживается
;pushf
;pop ax
;and ax,0F000h
;cmp ax,0
;cmp ax,0F000h
je i8086
;======cpuid====================
mov eax,0
cpuid

mov dword ptr cpu+5,ebx
mov dword ptr cpu+9,edx
mov dword ptr cpu+13,ecx
print cpu
;-------------------------------
mov eax,ecx
and eax,00003000h
shr eax,12
cmp eax,0
jmp exit
;===============================
 i8086:
print i8086mes
jmp exit
;-------------------------------
 exit:
mov ax,4C00h
int 21h
 main endp
;===============================
numtostr proc near
; eax - number
; bx - offset of string
; di - position in string
mov byte ptr [bx+di],'0'
 output:
div ten
cmp ax,0
je _out
add ah,30h
mov [bx+di],ah
xor ah,ah
dec di
jmp output
 _out:
retn
numtostr endp
;===============================
end main
Умка) вне форума Ответить с цитированием
Старый 25.11.2013, 10:10   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Можно. Для этого нужно сделать cpuid с eax = 1, и проверить значение первого бита в edx. Если установлен - расширения virtual 8086 присутствуют.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ID оборудования, определение драйвера. KaLLIaK Помощь студентам 9 01.06.2012 17:35
Задача на определение класса novnicolas Общие вопросы C/C++ 7 19.12.2011 23:55
Задача на определение упорядоченных строк sanchoflat Паскаль, Turbo Pascal, PascalABC.NET 2 26.11.2011 13:46
Задача о замене оборудования kirusha26 Помощь студентам 0 05.12.2010 17:09
Задача на определение температуры человека Versifikator Microsoft Office Excel 2 10.02.2008 05:14