现在的位置: 首页 > 综合 > 正文

汇编语言作图

2019年03月11日 ⁄ 综合 ⁄ 共 2202字 ⁄ 字号 评论关闭

文/一觉亮天

实际应用中很少用汇编语言作图,本来汇编语言属低级语言,应用不方便,而用代码处理图形也不是我们所希望的.但了解汇编语言作图,就了解了计算机是如何操作显示器的了,而且在一些必须用汇编语言的场合,掌握汇编语言作图,能增加操作界面的友好性。

计算机控制显示器输出可以通过调用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

 

           

抱歉!评论已关闭.