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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2007, 21:42   #1
-danger-
 
Регистрация: 15.02.2007
Сообщений: 7
По умолчанию Определение типа микропроцессора (TASM)

привет экспертам!
помогите найти текст проги, которая определяет тип микропроцессора. например AMD или Intel, или Via.
нашел текст одной из таких прог, но она почему-то выдает пару ошибок при асемблировании. помогите пожалуста разобратся что не так. или может выложите текст какой-нибуть другой похожей проги.
з.ы. на выходе должен быть .exe, не .com

Код:
.8086
.model small
.586
.data
 i8086mes db "i8086",13,10,'$'
 i286mes  db "i286",13,10,'$'
 i386mes  db "i386",13,10,'$'
 i486mes  db "i486",13,10,'$'
 cpu      db "CPU: ",0,0,0,0,0,0,0,0,0,0,0,0,10,13,'$'
 stepping db "stepping: ",0,0,10,13,'$'
 model_   db "Model: ",0,0,10,13,'$'
 family   db "Family: ",0,0,10,13,'$'
 type00   db "Type: standart",10,13,'$'
 type01   db "Type: overdrive",10,13,'$'
 type10   db "Type: dual",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
;-------------------------------
pushf
pop ax
and ax,0F000h
cmp ax,0
je i286
cmp ax,0F000h
je i8086
;------i386---------------------
pushfd
pop eax
mov ecx,eax
xor eax,00040000h
push eax
popfd
pushfd
pop eax
cmp eax,ecx
je i386
;------i486---------------------
pushfd
pop eax
mov ecx,eax
xor eax,00200000h
push eax
popfd
pushfd
pop eax
cmp eax,ecx
je i486
;======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
;-----stepping------------------
mov eax,1
cpuid
mov ecx,eax
and eax,0000000Fh
lea bx,stepping
mov di,11
call numtostr
print stepping
;-----model---------------------
mov eax,ecx
and eax,000000F0h
shr eax,4
lea bx,model_
mov di,8
call numtostr
print model_
;----family---------------------
mov eax,ecx
and eax,00000F00h
shr eax,8
lea bx,family
mov di,9
call numtostr
print family
;-------------------------------
mov eax,ecx
and eax,00003000h
shr eax,12
cmp eax,0
je type_std
cmp eax,1
je type_od
cmp eax,2
je type_dual
jmp exit
;===============================
 i8086:
print i8086mes
jmp exit
 i286:
print i286mes
jmp exit
 i386:
print i386mes
jmp exit
 i486:
print i486mes
jmp exit
 type_std:
print type00
jmp exit
 type_od:
print type01
jmp exit
 type_dual:
print type10
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

///////еще один вариант(тоже выдает ошибку)//////
Код:
;----------checkCPU.asm----------------------------------
;прога, которая определяет тип процессора.
;---------------------------------------------------------
.8086
.model small
.586
.data    
clrscr  db      0dh,0ah,'$'
i8086mes db "It is i8086",13,10,'$'
 i286mes  db "It is i286",13,10,'$'
 i386mes  db "It is i386",13,10,'$'
 i486mes  db "It is i486",13,10,'$'
 cpu      db "CPU: ",0,0,0,0,0,0,0,0,0,0,0,0,10,13,'$'
 

.stack 100h
.code  
print macro str
 mov dx, offset str
 mov ah, 09h
 int 21h
endm print
;--------i8086,i286------------
pushf
pop ax
and ax,0F000h
cmp ax,0
je i286
cmp ax,0F000h
je i8086
;------i386---------------------
pushfd
pop eax
mov ecx,eax
xor eax,00040000h
push eax
popfd
pushfd
pop eax
cmp eax,ecx
je i386
;------i486---------------------
pushfd
pop eax
mov ecx,eax
xor eax,00200000h
push eax
popfd
pushfd
pop eax
cmp eax,ecx
je i486
;======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
 i8086:
print i8086mes
jmp exit
 i286:
print i286mes
jmp exit
 i386:
print i386mes
jmp exit
 i486:
print i486mes
jmp exit
 type_std:
print type00
jmp exit
 type_od:
print type01
jmp exit
 type_dual:
print type10
jmp exit
;-------------------------------
 exit:
mov ax,4C00h
int 21h
main endp
-danger- вне форума Ответить с цитированием
Старый 16.02.2007, 20:10   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

что за ошибка и где именно?
rpy3uH вне форума Ответить с цитированием
Старый 17.02.2007, 01:50   #3
-danger-
 
Регистрация: 15.02.2007
Сообщений: 7
Радость 111111

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
что за ошибка и где именно?
вот скрин ошибок первой и второй проги.
-danger- вне форума Ответить с цитированием
Старый 17.02.2007, 09:26   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

во второй проге ты не объявил метку main
и написал что main endp это обозначает, что это конец процедуры которую ты начинал,
а по поределению надо объявить метку main в том месте где должна начитаться программа и в конце текста написать end main

в первой проге тебе надо переименовать метку out в другую например __out:

я не пойму, ты вообще что ли читать не умеешь?
rpy3uH вне форума Ответить с цитированием
Старый 17.02.2007, 12:53   #5
-danger-
 
Регистрация: 15.02.2007
Сообщений: 7
По умолчанию

спасиба тебе, добрый человек. теперь все работает.
-danger- вне форума Ответить с цитированием
Старый 24.11.2013, 20:58   #6
Умка)
 
Регистрация: 24.11.2013
Сообщений: 4
По умолчанию А как проверить наличие поддержки в процессоре виртуального процессора 8086?

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
во второй проге ты не объявил метку main
и написал что main endp это обозначает, что это конец процедуры которую ты начинал,
а по поределению надо объявить метку main в том месте где должна начитаться программа и в конце текста написать end main

в первой проге тебе надо переименовать метку out в другую например __out:

я не пойму, ты вообще что ли читать не умеешь?
убрала ненужное)
дальше что-то добавлять нужно?здесь определяет только тип микропроцессора?
Код:
.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
;-------------------------------
pushf
pop ax
and ax,0F000h
cmp ax,0
;je i286
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
Умка) вне форума Ответить с цитированием
Старый 02.06.2024, 13:54   #7
Nif-naf
Форумчанин
 
Аватар для Nif-naf
 
Регистрация: 05.09.2016
Сообщений: 134
По умолчанию

Код:
Mov AX,0F000H
Mov ES,AX
Mov AL,ES:[0FFFEH]
Cmp AL,0FD
JE PcJR ; (8086)
Cmp AL,0FE
JE PcXT; (8088)
Cmp AL,0FC
JE PcAT ; (80286 и выше)
Немного о GoAsm.
Nif-naf вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение типа микропроцессора yakimechik Помощь студентам 1 15.03.2015 12:06
Определение типа. lawliet93 C# (си шарп) 2 08.02.2012 16:35
Определение типа видеокарты (TASM) -danger- Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 24.03.2011 06:13
определение типа Mikimaus Общие вопросы C/C++ 6 22.11.2009 17:12
определение типа ЦП и ОЗУ ALEKS_STRELOK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.04.2009 05:22