测试显示模式_X86汇编

时间:2023-02-02 19:46:45

测试显示模式——X86汇编

;对于超级VGA显示卡,我们可用AX=4F02H和下列BX的值来设置其显示模式。
;本程序不支持液晶显示器

;BX  显示模式 属性
;100H 640×400×256色
;101H 640×480×256色
;102H 800×600×16色
;103H 800×600×256色
;104H 1024×768×16色
;105H 1024×768×256色
;106H 1280×1024×16色
;107H 1280×1024×256色
;108H 80×60文本模式
;109H 132×25文本模式
;10AH 132×43文本模式
;10BH 132×50文本模式
;10CH 132×60文本模式

code segment
assume cs:code,ds:code,ss:code
org 100h
start:
jmp begin
mode dW 100H ;640×400×256色
dw 101H ;640×480×256色
dw 102H ;800×600×16色
dw 103H ;800×600×256色
dw 104H ;1024×768×16色
dw 105H ;1024×768×256色
dw 106H ;1280×1024×16色
dw 107H ;1280×1024×256色
dw 0
tips db 0dh,0ah,09,'Mode: $'
begin:
push cs
pop ds
lea si,mode
again:
mov bx,[si]
or bx,bx
jz quit
mov ax,4f02h
int 10h 
lea dx,tips
mov ah,9
int 21h
call show ;显示当前模式号
mov di,30h ;画个矩形
mov bp,30h 
mov cx,18h 
mov dx,18h 
Q1:
mov ax,0c02h
int 10h
inc dx 
dec bp 
jnz Q1 
@11c:mov ah,0ch 
int 10h 
inc cx 
dec di 
jnz @11c 
@124:mov ah,0ch 
int 10h 
dec dx 
cmp dx,18h 
jnl @124 
@12f:mov ah,0ch 
int 10h 
dec cx 
cmp cx,18h 
jnz @12f 
mov ah,0 
int 16h 
cmp al,1bh
jz quit
inc si
inc si
jmp again
quit:
mov ax,0003 
int 10h 
mov ah,4ch 
int 21h

show:
push ax
push bx
push cx
push bp
mov ah,0fh
int 10h
mov bp,ax
mov cx,4
next:
rol bp,1
rol bp,1
rol bp,1
rol bp,1
mov ax,bp
and al,0fh
or al,30h
cmp al,39h
jbe Crt
add al,7
Crt:
mov ah,0eh
mov bx,7
int 10h
loop next
pop bp
pop cx
pop bx
pop ax
ret

code ends
end start