Вывод на экран текущего видеорежима - Assembler
Формулировка задачи:
Доброго времени суток, помогите разобраться с программой. Задача вывести текущий видеорежим на экран.
Написал текст программы, но она не хочет работать, ни в какую... условие все вроде правильно, незколько раз пробовал по разному компилировать, все равно виснет... Раотаю на TASM'е под DOS box, Windows 7 32. может в ОС проблема...
Вот прога
.model small .stack 100 .data str1 db "Tip videorejima ekrana: $" a0 db "Bios $" a1 db "40*25 cvetnoi $" a2 db "80*25 cvetnoi $" a3 db "80*25 monohromniy $" .code start: mov ax, @data mov ds,ax mov ax, 3 int 10h int 11h mov bx,ax shl bx,10 shr bx,14 test bx,0000000000000000b jne s1 test bx,0000000000000001b jne s2 test bx,0000000000000010b jne s3 test bx,0000000000000011b jne s4 s1: mov ax,09h mov dx, offset a0 int 21h jmp exit s2: mov ax,09h mov dx, offset a1 int 21h jmp exit s3: mov ax,09h mov dx, offset a2 int 21h jmp exit s4: xor ax,ax mov ax,09h mov dx, offset a3 int 21h exit: mov ah,0 int 16h mov ax,4c00h int 21h end start
Решение задачи: «Вывод на экран текущего видеорежима»
textual
Листинг программы
; masm dos com # .286 .model tiny .code org 100h start: mov ax,13h int 10h mov ah,0Fh int 10h aam or al,"0" push ax mov al,ah aam or ax,"00" ror ax,8 int 29h mov al,ah int 29h pop ax int 29h mov ah,0 int 16h mov ax,3 int 10h ret end start
Объяснение кода листинга программы
Код выполняет следующие действия:
- Выводит на экран текущий видеорежим.
- Получает и сохраняет в регистре AX значение видеорежима.
- Форматирует значение видеорежима в шестнадцатеричную систему счисления с ведущими нулями.
- Сдвигает значение видеорежима на 8 позиций вправо.
- Выводит на экран отформатированное значение видеорежима.
- Возвращает управление в операционную систему.