【虎彡】**************关于小轿车和小鸟的图形,求注释**********************
时间:2011-01-12
来源:互联网
昨天看一高手的图形小程序 复制过来研究 但是我自己写的注释没啥意义 全是描述动作的
希望高手帮我写个容易理解的注释!感激不尽!
INT 10H 中断表:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=36527&kindId=52140&postId=50640&readSg=1
DATA SEGMENT
INFO1 DB 0DH,0AH,'INPUT 1,2,OR 3:(1:bird,2:car,3:exit) $' ;提示语
BUFA DB 200
DB ?
DB 200 DUP(0) ;键盘输入缓冲区
BUFB DB 200 DUP(?)
BIRD
DB 76H,10,0,0 ;鸟的位模式图
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
CAR DB 7 ;小汽车的位模式图
DB 52H,7,0,0
DB 0B1H,7,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,7,1,0
DB 4FH,7,0,-3
DB 2,7,-2,1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
STACK SEGMENT stack ;200字节的堆栈
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
start:
mov ax,data
mov ds,ax ;数据段装入
mov ah,0
mov al,4 ;320×200 4色
int 10h
lea dx,info1
mov ah,9
int 21h ;显示提示语
mov ah,0 ;AH=0:从键盘读入ASCII字符,放在AL中
int 16h
CMP AL,31H ;是1么
JNE A ;不等于转A
CALL XIAO ;等于转小鸟
A:
CMP AL,32H ;是2么
JNE B ;不是转B
CALL QICHE ;是转汽车
B:
CMP AL,33H ;是3么
JNE START ;不是转到开始
MOV AH,4CH ;是则退出
INT 21H
;---------------------------------------------------------------------
CLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏
MOV AH,0
MOV AL,4
INT 10H
;320×200 4色
MOV AH,6 ;AH=06H—向上滚屏
MOV AL,0 ;AL=0—清窗口
MOV CH,pch
MOV CL,pcl ;(CH、CL)=窗口的左上角位置(Y坐标,X坐标)
MOV DH,pdh
MOV DL,pdl ;(DH、DL)=窗口的右下角位置(Y坐标,X坐标)
MOV BH,pbh ;BH=空白区域的缺省属性
INT 10H
ENDM
;---------------------------------------------------------------------
xiao proc ;小鸟
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,4 ;320×200 4色
INT 10H
MOV AH,0BH ;设置调色板、背景色或边框
MOV BH,0
MOV BL,1 ;BL=颜色
INT 10H
MOV AH,0BH
MOV BH,1 ;选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式)
MOV BL,1
INT 10H
CLEAR 0,0,24,79,7 ;调用清屏宏
MOV AH,0FH ;读取显示器模式
INT 10H
MOV DH,10 ;DH=行(Y坐标)
MOV DL,0 ;DL=列(X坐标
BEGIN:
MOV SI,2 ;SI是干什么的没看出来
MOV CX,1 ;字符重复次数
LEA DI,BIRD ;DI指向小鸟位模式图
DISP:
CMP DL,80 ;DL大于80么
JAE exit1 ;是转EXIT1
MOV AH,2
INT 10H ;用文本坐标下设置光标位置
MOV AH,9 ;在当前光标处按指定属性显示字符
MOV AL,[DI] ;AL=字符
MOV BL,[DI+1] ;BL=颜色(图形模式)
INT 10H
CALL DLY ;延时
MOV AH,9
MOV AL,' ' ;AL=字符
MOV BL,04 ;BL=颜色(图形模式)
INT 10H ;显示字符
INC DL ;列坐标+1
ADD DI,2 ;位模式图下一位
DEC SI ;SI-1
JNZ DISP
JMP BEGIN
exit1: RET ;退出返回
xiao endp
;------------------------------------------------
DLY PROC NEAR ;延时(空循环)
PUSH CX
PUSH DX
MOV DX,10000
DL1:
MOV CX,6801
DL2:
LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
;------------------------------------------------
QICHE PROC near ;小汽车
PUSH AX
PUSH BX
PUSH CX
PUSH DX ;保护寄存器
MOV AH,0 ;320×200 4色
MOV AL,4
INT 10H
MOV AH,0BH ;设置调色板、背景色或边框
MOV BH,01 ;选择调色板:BH=01H
MOV BL,00 ;BL=调色板(320×200、4种颜色的图形模式)
INT 10H
CLEAR 0,0,24,79,7 ;清屏
LEA DI,CAR ;DI指向小汽车位模式图
MOV DH,5 ;DH=行(Y坐标)
MOV DL,0 ;DL=列(X坐标
CALL MOVE_SHAPE ;转
RET
QICHE ENDP
;---------------------------------------------------
MOVE_SHAPE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI ;保护寄存器
MOV AH,0FH ;读取显示器模式
INT 10H
SUB CH,CH ;CH清0
MOV CL,[DI] ;位模式图送入CL
INC DI ;下一字节
;属性保存
MOV CHAR_CNT,CX ;保存CX
MOV POINTER,DI ;保存偏移
MOV LINE_ON,DH ;保存行
MOV COL_ON,DL ;保存列
PLOT_NEXT:
ADD DH,[DI+2] ;行
ADD DL,[DI+3] ;列
CMP DL,80 ;列是否大于80
JB MOV_CRSR ;小于转
Pop DI ;大于等于寄存器出栈
Pop DX
Pop CX
Pop BX
Pop AX
jmp exit2 ;返回
MOV_CRSR: ;小于
MOV AH,2 ;用文本坐标下设置光标位置
INT 10H
MOV AL,[DI] ;AL=字符
MOV BL,[DI+1] ;BL=颜色
PUSH CX ;保存CX
MOV CX,1 ;显示个数
MOV AH,09
INT 10H ;显示字符
POP CX ;恢复CX
ADD DI,4 ;偏移+4
LOOP PLOT_NEXT ;循环
CALL DLY ;延时
CALL ERASE ;
JMP SHORT PLOT_NEXT ;跳到PLOT_NEXT
;-------------------
exit2: ret
;-------------------
MOVE_SHAPE ENDP
;+++++++++++++++++++++++++++++++++
ERASE PROC NEAR
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
MOV DL,COL_ON ;属性值恢复
ERASE_NEXT:
ADD DH,[DI+2] ;设置行
ADD DL,[DI+3] ;设置列
MOV AH,2
INT 10H ;置光标
MOV AL,[DI] ;AL=字符
MOV BL,0 ;颜色(图形模式)
PUSH CX ;保存计数器
MOV CX,1
MOV AH,9
INT 10H ;显示字符
POP CX ;恢复计数器
ADD DI,4 ;偏移+4
LOOP ERASE_NEXT ;循环
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
INC COL_ON
MOV DL,COL_ON ;恢复属性值
RET
ERASE ENDP
CODE ENDS
END start
希望高手帮我写个容易理解的注释!感激不尽!
INT 10H 中断表:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=36527&kindId=52140&postId=50640&readSg=1
DATA SEGMENT
INFO1 DB 0DH,0AH,'INPUT 1,2,OR 3:(1:bird,2:car,3:exit) $' ;提示语
BUFA DB 200
DB ?
DB 200 DUP(0) ;键盘输入缓冲区
BUFB DB 200 DUP(?)
BIRD
DB 76H,10,0,0 ;鸟的位模式图
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
CAR DB 7 ;小汽车的位模式图
DB 52H,7,0,0
DB 0B1H,7,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,7,1,0
DB 4FH,7,0,-3
DB 2,7,-2,1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
STACK SEGMENT stack ;200字节的堆栈
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
start:
mov ax,data
mov ds,ax ;数据段装入
mov ah,0
mov al,4 ;320×200 4色
int 10h
lea dx,info1
mov ah,9
int 21h ;显示提示语
mov ah,0 ;AH=0:从键盘读入ASCII字符,放在AL中
int 16h
CMP AL,31H ;是1么
JNE A ;不等于转A
CALL XIAO ;等于转小鸟
A:
CMP AL,32H ;是2么
JNE B ;不是转B
CALL QICHE ;是转汽车
B:
CMP AL,33H ;是3么
JNE START ;不是转到开始
MOV AH,4CH ;是则退出
INT 21H
;---------------------------------------------------------------------
CLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏
MOV AH,0
MOV AL,4
INT 10H
;320×200 4色
MOV AH,6 ;AH=06H—向上滚屏
MOV AL,0 ;AL=0—清窗口
MOV CH,pch
MOV CL,pcl ;(CH、CL)=窗口的左上角位置(Y坐标,X坐标)
MOV DH,pdh
MOV DL,pdl ;(DH、DL)=窗口的右下角位置(Y坐标,X坐标)
MOV BH,pbh ;BH=空白区域的缺省属性
INT 10H
ENDM
;---------------------------------------------------------------------
xiao proc ;小鸟
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,4 ;320×200 4色
INT 10H
MOV AH,0BH ;设置调色板、背景色或边框
MOV BH,0
MOV BL,1 ;BL=颜色
INT 10H
MOV AH,0BH
MOV BH,1 ;选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式)
MOV BL,1
INT 10H
CLEAR 0,0,24,79,7 ;调用清屏宏
MOV AH,0FH ;读取显示器模式
INT 10H
MOV DH,10 ;DH=行(Y坐标)
MOV DL,0 ;DL=列(X坐标
BEGIN:
MOV SI,2 ;SI是干什么的没看出来
MOV CX,1 ;字符重复次数
LEA DI,BIRD ;DI指向小鸟位模式图
DISP:
CMP DL,80 ;DL大于80么
JAE exit1 ;是转EXIT1
MOV AH,2
INT 10H ;用文本坐标下设置光标位置
MOV AH,9 ;在当前光标处按指定属性显示字符
MOV AL,[DI] ;AL=字符
MOV BL,[DI+1] ;BL=颜色(图形模式)
INT 10H
CALL DLY ;延时
MOV AH,9
MOV AL,' ' ;AL=字符
MOV BL,04 ;BL=颜色(图形模式)
INT 10H ;显示字符
INC DL ;列坐标+1
ADD DI,2 ;位模式图下一位
DEC SI ;SI-1
JNZ DISP
JMP BEGIN
exit1: RET ;退出返回
xiao endp
;------------------------------------------------
DLY PROC NEAR ;延时(空循环)
PUSH CX
PUSH DX
MOV DX,10000
DL1:
MOV CX,6801
DL2:
LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
;------------------------------------------------
QICHE PROC near ;小汽车
PUSH AX
PUSH BX
PUSH CX
PUSH DX ;保护寄存器
MOV AH,0 ;320×200 4色
MOV AL,4
INT 10H
MOV AH,0BH ;设置调色板、背景色或边框
MOV BH,01 ;选择调色板:BH=01H
MOV BL,00 ;BL=调色板(320×200、4种颜色的图形模式)
INT 10H
CLEAR 0,0,24,79,7 ;清屏
LEA DI,CAR ;DI指向小汽车位模式图
MOV DH,5 ;DH=行(Y坐标)
MOV DL,0 ;DL=列(X坐标
CALL MOVE_SHAPE ;转
RET
QICHE ENDP
;---------------------------------------------------
MOVE_SHAPE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI ;保护寄存器
MOV AH,0FH ;读取显示器模式
INT 10H
SUB CH,CH ;CH清0
MOV CL,[DI] ;位模式图送入CL
INC DI ;下一字节
;属性保存
MOV CHAR_CNT,CX ;保存CX
MOV POINTER,DI ;保存偏移
MOV LINE_ON,DH ;保存行
MOV COL_ON,DL ;保存列
PLOT_NEXT:
ADD DH,[DI+2] ;行
ADD DL,[DI+3] ;列
CMP DL,80 ;列是否大于80
JB MOV_CRSR ;小于转
Pop DI ;大于等于寄存器出栈
Pop DX
Pop CX
Pop BX
Pop AX
jmp exit2 ;返回
MOV_CRSR: ;小于
MOV AH,2 ;用文本坐标下设置光标位置
INT 10H
MOV AL,[DI] ;AL=字符
MOV BL,[DI+1] ;BL=颜色
PUSH CX ;保存CX
MOV CX,1 ;显示个数
MOV AH,09
INT 10H ;显示字符
POP CX ;恢复CX
ADD DI,4 ;偏移+4
LOOP PLOT_NEXT ;循环
CALL DLY ;延时
CALL ERASE ;
JMP SHORT PLOT_NEXT ;跳到PLOT_NEXT
;-------------------
exit2: ret
;-------------------
MOVE_SHAPE ENDP
;+++++++++++++++++++++++++++++++++
ERASE PROC NEAR
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
MOV DL,COL_ON ;属性值恢复
ERASE_NEXT:
ADD DH,[DI+2] ;设置行
ADD DL,[DI+3] ;设置列
MOV AH,2
INT 10H ;置光标
MOV AL,[DI] ;AL=字符
MOV BL,0 ;颜色(图形模式)
PUSH CX ;保存计数器
MOV CX,1
MOV AH,9
INT 10H ;显示字符
POP CX ;恢复计数器
ADD DI,4 ;偏移+4
LOOP ERASE_NEXT ;循环
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
INC COL_ON
MOV DL,COL_ON ;恢复属性值
RET
ERASE ENDP
CODE ENDS
END start
作者: znxllyuan 发布时间: 2011-01-12
引用楼主 znxllyuan 的回复:
昨天看一高手的图形小程序 复制过来研究 但是我自己写的注释没啥意义 全是描述动作的
希望高手帮我写个容易理解的注释!感激不尽!
INT 10H 中断表:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=36527&kindId=52140&postId=50640&readSg=1
DA……
昨天看一高手的图形小程序 复制过来研究 但是我自己写的注释没啥意义 全是描述动作的
希望高手帮我写个容易理解的注释!感激不尽!
INT 10H 中断表:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=36527&kindId=52140&postId=50640&readSg=1
DA……
MOV SI,2 ;SI是干什么的没看出来
MOV CX,1 ;字符重复次数
LEA DI,BIRD ;DI指向小鸟位模式图
DISP:
CMP DL,80 ;DL大于80么
...
DEC SI ;SI-1
JNZ DISP
SI也是循环计数的。
作者: shzhfu 发布时间: 2011-01-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28