привет всем.
работаю в 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
-danger- По-твоему, у каждого программёра должен стоять TASM, на котором он незамедлительно проверит твой код? Лог сообщений компилятора выкладывай с указанием строк в твоём листинге.
З.Ы. Вот у тебя команда XCHG используется, она, по-моему, только в 486 процессоре появилась. У тебя есть строка ".486" ?
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Блин, открой хоть первую главу кини по ассемблеру. У тебя не сегментов, ничего, только вырванный кусок кода, процедура. Плюс под виндой это работать не будет, запускать нужно под досом.
гляньте плиз, так покатит? дописал в код вызов подпрограмм, вывод результатов.
только он комплируется в .com, что нада исправить чтобы в екзешник компилировалось?
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$'
-danger- Да не уж то у Пирогова нет примеров под exe? Поставь model small и создай ещё два отдельных сегмента для данных и для стека. Добавлено спустя 40 секунд И убери org 100h.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения