Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 10 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

привет всем.
работаю в TASM. очень нужен текст проги, которая определяет тип видеоадаптера. как минимум нужно чтобы определяло видяха EGA или VGA. в книжке В.Пирогова нашел что-то подобное, но когда я этот текст пропускаю через TASM, то выдает кучу ошибок. подскажите что не так? или может подскажете какой-то другой вариант проги.
з.ы. на выходе должен быть .exe, не .com


Код:
WHAT_AD PROC
PUSH DX
PUSH BX
PUSH CX
;проверка наличия у прерывания 10H функции 1AH - есть у VGA
XOR AL,AL
MOV AH,1AH
INT 10H
CMP AL,1AH
JNZ NO_VGA
XOR AL,AL
JMP SHORT EXIT
NO_VGA:
;проверка наличия у прерывания 10H функции 12H - есть у EGA
MOV AH,12H
MOV BL,10H
JZ NO_EGA
MOV AL,1
JMP SHORT EXIT
NO_EGA:
;проверка наличия CGA
MOV DX,3D4H
CALL SEARCH_6845
JC NO_CGA
MOV AL,3
JMP SHORT EXIT
NO_MDA:
MOV AL,4
EXIT:
POP CX
POP BX
POP DX
RET
WHAT_AD ENDP
;проверка наличия контроллера 6845
;проверка осуществляется путем записи в регистр а потом чтения из него
;если значения совпали то контроллер присутствует
;номер регистра - 0FH но адрес порта у CGA и MDA разный
SEARCH_6845 PROC
MOV AL,0FH
OUT DX,AL
INC DX
IN AL,DX
MOV AH,AL
MOV AL,66H
OUT DX,AL
MOV CX,100H
DELAY:
LOOP DELAY
IN AL,DX
XCHG AH,AL
OUT DX,AL
CMP AH,66H
JZ QUIT
STC
QUIT:
RET
SEARCH_6845 ENDP



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
-danger- По-твоему, у каждого программёра должен стоять TASM, на котором он незамедлительно проверит твой код? :) Лог сообщений компилятора выкладывай с указанием строк в твоём листинге.

З.Ы. Вот у тебя команда XCHG используется, она, по-моему, только в 486 процессоре появилась. У тебя есть строка ".486" ?


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Мдя уж. Не ужели сейчас вот таким образом учат ассемблер!? :)


 

люди добрые, ну поравьте плиз текст той проги. реально курсач на носу а я в асемблере ничего не шарю...


Последний раз редактировалось -danger- 16.02.2007 12:56, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Блин, открой хоть первую главу кини по ассемблеру. У тебя не сегментов, ничего, только вырванный кусок кода, процедура. Плюс под виндой это работать не будет, запускать нужно под досом.

_________________
Ку ку


 

гляньте плиз, так покатит? дописал в код вызов подпрограмм, вывод результатов.
только он комплируется в .com, что нада исправить чтобы в екзешник компилировалось?
Код:
.286
.Model TINY
CSEG segment
assume CS:CSEG, SS:CSEG, ES:CSEG
   org 100h

start:
   pusha
call WHAT_AD
    test al, 0
    je VGA_PRESENT
    test al, 1
    je EGA_PRESENT
    test al, 2
    je CGA_PRESENT
   mov dx, offset _mda
   jmp PRINT_PRESENT
VGA_PRESENT:
   mov dx, offset _vga
   jmp PRINT_PRESENT
EGA_PRESENT:
   mov dx, offset _ega
   jmp PRINT_PRESENT
CGA_PRESENT:
   mov dx, offset _cga
   jmp PRINT_PRESENT
PRINT_PRESENT:
   mov ah, 9h
   int 21h
   mov dx, offset _present
   mov ah, 9h
   int 21h
   popa
   int 20h


WHAT_AD PROC
PUSH DX
PUSH BX
PUSH CX
;проверка наличия у прерывания 10H функции 1AH - есть у VGA
XOR AL,AL
MOV AH,1AH
INT 10H
CMP AL,1AH
JNZ NO_VGA
XOR AL,AL
JMP SHORT EXIT
NO_VGA:
;проверка наличия у прерывания 10H функции 12H - есть у EGA
MOV AH,12H
MOV BL,10H
JZ NO_EGA
MOV AL,1
JMP SHORT EXIT
NO_EGA:
;проверка наличия CGA
MOV DX,3D4H
CALL SEARCH_6845
JC NO_CGA
MOV AL,3
JMP SHORT EXIT
NO_CGA:
MOV AL,4
EXIT:
POP CX
POP BX
POP DX
RET
WHAT_AD ENDP

;проверка наличия контроллера 6845
;проверка осуществляется путем записи в регистр а потом чтения из него
;если значения совпали то контроллер присутствует
;номер регистра - 0FH но адрес порта у CGA и MDA разный
SEARCH_6845 PROC
MOV AL,0FH
OUT DX,AL
INC DX
IN AL,DX
MOV AH,AL
MOV AL,66H
OUT DX,AL
MOV CX,100H
DELAY:
LOOP DELAY
IN AL,DX
XCHG AH,AL
OUT DX,AL
CMP AH,66H
JZ QUIT
STC
QUIT:
RET
SEARCH_6845 ENDP

_mda db 0Ah, 0Dh, 'MDA$'
_cga db 0Ah, 0Dh, 'CGA$'
_ega db 0Ah, 0Dh, 'EGA$'
_vga db 0Ah, 0Dh, 'VGA$'
_present db ' is present$'

CSEG ends
end start


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
-danger- Да не уж то у Пирогова нет примеров под exe? Поставь model small и создай ещё два отдельных сегмента для данных и для стека.
Добавлено спустя 40 секунд
И убери org 100h.


 

2 Билли Бонс.
исправь плиз сам код, а то я так ничего и не понял...


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Я не помню tasm. Может там сегменты имеют фиксированные имена? В общем, как-то так
Код:
DSEG segment ; сегмент данных
; здесь все свои данные размещай
DSEG ends

SSEG segment ; сегмент стека
    db 1000h dup (?)
SSEG ends

Ну и assume cs : CSEG, ds : DSEG, ss : SSEG. Модель ставь small, вместо .286 - .486, ну и org выкинь.


 

спасиба за инфу!
жаль плюсика негде поставить.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 10 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan