INT 10H
LEADX,ERRINFO ;存偏移地址到DX CALL CL_SCREEN
CALL DISPLAY ;调用显示子程序 ;检验键盘状态
MOVAH,0BH ;功能号,返回参数AL INT 21H CMPAL,0 JETMP
;键盘输入,无回显 MOVAH,07H ;功能号 INT 21H TMP:
JZCONTIUNE CHUZHAN RET
ERRORDISENDP
;---------------------------------------------------------- ;子程序,清屏
CL_SCREENPROCNEAR RUZHAN
MOVAH,7 ;卷屏功能号 MOVAL,0 ;初始化屏幕
MOVBH,7 ;卷入行属性,上此处为正常显示 MOVCH,0 ;左上角行号 MOVCL,0 ;左上角列号 MOVDH,24 ;右下角行号 MOVDL,79 ;右下角列号 INT 10H CHUZHAN RET
CL_SCREENENDP
;---------------------------------------------------------- ;子程序,画圆 CIRCLEPROCNEAR
RUZHAN ;调用宏,保存寄存器 CALL SCREEN ;调用屏幕子程序 MOV COUNT,90
MOVSI,OFFSETSINE+89*2 ;转化为用于设定COS函数值1到0 MOVDI,OFFSETSINE AGAIN:
CALL COMPUTE ;调用计算圆边像素点 CALL WRITE ;描圆边
SUBSI,2 ;SI与源操作数相减
ADDDI,2 ;DI与源操作数相加 DEC COUNT
JNZAGAIN ;标志符ZF不为0跳转 CHUZHAN ;调用宏,恢复寄存器 RET
CIRCLEENDP
;---------------------------------------------------------- ;子程序,设置屏幕 SCREENPROCNEAR MOVAX,12H ;显示方式 INT 10H ;调用BIOS中断 MOVAH,0BH ;置彩色调板
MOVBX,0 ;BH为彩色调色板ID,BL为ID配套使用的颜色 INT 10H RET
SCREENENDP
;---------------------------------------------------------- ;子程序,计算圆边像素点 COMPUTEPROCNEAR
MOVAX,[SI] ;地址SI所指向内容赋给AX,SI++依次得到所有圆边点 MULRADIUS ;目的操作数AX与源操作数RADIUS相乘,结果放AX DIVKK ;得到圆边像素点的列位置 MOVMM,AX
NEGAX ;将AX转化为二进制补码,以求相对应的像素点 MOVF_MM,AX ;补码形式的AX放入F_MM MOVAX,[DI] MULRADIUS
DIVKKMOV NN,AX NEGAX
MOVF_NN,AX RET
COMPUTEENDP
;---------------------------------------------------------- ;子程序,描点 WRITE PROC
MOVDX,F_MM ;对应像素列 ADDDX,OY
MOVCX,NN ;对应像素行 ADDCX,OX
CALL WR_DOT MOVCX,F_NN ADDCX,OX
CALL WR_DOT MOVDX,MM
ADDDX,OY
CALL WR_DOT MOVCX,NN ADDCX,OX
CALL WR_DOT RET
WRITE ENDP
;---------------------------------------------------------- ;子程序,写像素 WR_DOTPROC
MOVAH,0CH ;写像素功能号 MOVAL,COLOUR ;颜色值 MOVBH,0 ;页号 INT 10H RET
WR_DOTENDP
;---------------------------------------------------------- ;子程序,画三角形 TRIANGLEPROCNEAR RUZHAN ;保存寄存器
MOVBL,9 ;字符属性,暗蓝 GOON:
MOVCH,1 ;1代表走,0代表暂停 COLOR:
MOVAH,0BH ;检验键盘状态 INT 21H CMPAL,0 JNZAA CMPCH,1 JNZCOLOR ;置光标位置
MOVCX,1 ;显示字符个数 MOVAH,2 ;功能号 MOVBH,0 ;页号 MOVDH,6 ;行号 MOVDL,36 ;列号 INT 10H
HUATU:
MOVAH,2 ;置光标 INT 10H
;在光标位置显示字符和属性 MOVAH,9 ;功能号 MOVBH,0 ;显示页
MOVAL,2AH ;字符,'*' INT 10H
INCDH ;行数加1,DOS窗口向下画 DECDL ;列号减1,以便形成三角形
ADDCX,2 ;每画一行,显示字符数加2个 CMPCX,21 ;画完为止 JNZHUATU INCBL CMPBL,15 JNZGOON AA: MOVAH,7 INT 21H CMPAL,'Q' JNZ BB JMPEE BB: CMPCH,0 JZCC
MOVCH,0 JMPCOLOR
CC: MOVCH,1 JMPCOLOR
EE: CHUZHAN ;恢复寄存器 RET
TRIANGLEENDP
;---------------------------------------------------------- ;子程序,画矩形
RECTANGLEPROCNEAR RUZHAN ;保存寄存器 ;设置显示方式 ;MOVAH,0 ;MOVAL,12H ;INT 10H
;置光标初始位置 MOVCX,1 MOVAH,2 MOVBH,0 MOVDH,6 MOVDL,6 INT 10H
;光标右移,向右画 RIGHT:
MOVAH,2 ;置光标位置
INT 10H
MOVAH,9 ;功能号9,显示字符和属性 MOVAL,2AH ;字符,'*'
MOVBL,0FAH ;字符属性,背景为白,前景为红 ;MOVCX,6 INT 10H
INCDL ;列数增加 CMPDL,20
JNERIGHT ;当ZF为1时光标继续右移,为0时跳转 JMPDOWN ;光标下移,向下画 DOWN: MOVAH,2 INT 10H MOVAH,9 MOVAL,2AH MOVBL,0FAH ;MOVCX,6 INT 10H INCDH CMPDH,12 JNZDOWN JMPLEFT
;光标左移,向左画 LEFT: MOVAH,2 INT 10H MOVAH,9 MOVAL,2AH MOVBL,0FAH ;MOVCX,6 INT 10H DECDL CMPDL,6 JNZLEFT JMPUP
;光标上移,向上画 UP:
MOVAH,2 INT 10H MOVAH,9 MOVAL,2AH