文/一觉亮天
实际应用中很少用汇编语言作图,本来汇编语言属低级语言,应用不方便,而用代码处理图形也不是我们所希望的.但了解汇编语言作图,就了解了计算机是如何操作显示器的了,而且在一些必须用汇编语言的场合,掌握汇编语言作图,能增加操作界面的友好性。
计算机控制显示器输出可以通过调用BIOS中断,中断类型码为 10H.类型码为10H的中断调用中有一系列功能子程序,用来控制再显示器进行输出 .这些功能子程序调用格式为:
MOV AH,功能号
…
…
INT 10H
其他调用参数的一般规则为:
l要显示的字符或像素值通常在AL中;
l列号图形方式在CX中,字符方式在DL中;
l行号图形方式在DX中,字符方式在DH中;
l显示页号在BH中.
在本程序中用到的功能子程序有:
1. 显示方式(0号功能)
显示方式号在AL中:
00H:40*25 黑白字符
01H:40*25 彩色字符
02H:80*25 黑白字符
03H:80*25 彩色字符
04H:320*200 4色图形
05H:320*200 4色图形(一个调色板)
06H:640*200 2色图形
2. 写一个像素(0CH号功能)
AL=像素值
BH=页号
CX=像素列号
DX=像素行号
在图形显示方式下,我们可以操作显示器的每一个像素,那么理论上我们就可以再显示器上画出任何的图形,本程序只是由一系列直线构成的图形,比较简单.下是程序执行结果:
(附源程序)
DATA SEGMENT
MYLENGTH DW 50 ;指定直线的长度
X DW 0 ;指定直线x坐标
Y DW 0 ;指定直线y坐标
MYFLAG DW 0 ;决定画横线还是竖线
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA ,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,6 ;改变显示器显示方式为
INT 10H ;640*200二色显示方式
MOV X,100
MOV Y,60
MOV MYFLAG,0
MOV MYLENGTH ,50
CALL MYSUB
MOV X,150
MOV Y,60
MOV MYLENGTH ,50
MOV MYFLAG,1
CALL MYSUB
MOV X,150
MOV Y,110
MOV MYFLAG,0
MOV MYLENGTH,50
CALL MYSUB
MOV X,200
MOV Y,60
MOV MYLENGTH,25
MOV MYFLAG,1
CALL MYSUB
MOV X,100
MOV Y,85
MOV MYLENGTH,100
MOV MYFLAG,0
CALL MYSUB
MOV X,100
MOV Y,85
MOV MYLENGTH,25
MOV MYFLAG,1
CALL MYSUB ;以上CALL MYSUB画一系列线
MOV AH,7
INT 21H ;等待键盘有键按下
MOV AH,00H
MOV AL,00H
INT 10H ;转变回字符显示方式
MOV AH,4CH
INT 21H ;结束程序
;---------------------------------------------------
MYSUB PROC ;画直线子程序
CLC
MOV BX,MYLENGTH
MOV CX,X
MOV DX,Y
CMP MYFLAG ,1
JE LINEV
MOV AH,0CH
MOV AL,1
LOP1: INT 10H ;画横线
INC CX
DEC BX
JNE LOP1
JMP SUBEND
LINEV: MOV AH,0CH
MOV AL,1
LOP2: INT 10H ;画竖线
INC DX
DEC BX
JNE LOP2
SUBEND: RET
MYSUB ENDP
COSEG ENDS
END START