汇编语言,求解汇编语言注释,大神尽量美剧都给上注释!!"/>
JB C2汇编语言,求解汇编语言注释,大神尽量美剧都给上注释!!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
datasegment ;定义数据段
CAR0 DB 7 ;汽车的字符图形表
DB 0DBH,1,0,0
DB 0DBH,1,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,6,1,0
DB 4FH,6,0,-3
DB 2,6,-2,1
MANU DB 11 ;机器人的图形表
DB 0DBH,09H,0,0
DB 0DBH,09H,0,1
DB 0DBH,09H,0,1
DB 0DBH,09H,0,1
DB 0DBH,09H,0,1
DB 02H,09H,-1,-2
DB 03H,0CH,2,0
DB 0DBH,09H,1,-1
DB 0DBH,09H,0,2
DB 0DBH,09H,1,-3
DB 0DBH,09H,0,4
car_row0 db 10 ;汽车清图坐标
car_col0 db 10
car_row1 db 10 ;汽车画图坐标
car_col1 db 10
man_row0 db 15 ;机器人清图坐标
man_col0 db 60
man_row1 db 15 ;机器人画图坐标
man_col1 db 60
dlay1 dw 10000 ;控制延时变量,即控制速度的变量
INFO1 DB 0DH,0AH,' (SPACE--PAUSE,ENTER--BEGAIN,ESC--EXIT,SPEEDUP-- +,SLOWDOWN-- - )$' ;动画控制提示信息,空格暂停,回车开始,ESC退出,“+”按一次速度加快一级,“—”按一次速度减慢一级
INFO2 DB 0DH,0AH,' (CAR:UP--W,DOWN--S,LEFT--A,RIGHT--D MAN:UP--8,DOWN--2,LEFT--4,RIGHT--6)$' ;动画控制提示信息,WASD控制汽车的上左下右移动,方向键控制机器人的运动方向
;----------------------------------------------------------------------------
clear_car macro row,col ;宏定义汽车清图
push bx
MOV AX,0600H
MOV Ch,row
dec ch,1
mov cl,col
mov dh,ch
mov dl,cl
add dh,3
add dl,4
MOV BH,7
INT 10H
pop bx
endm
;----------------------------------------------------------------------------
clear_man macro row,col ;宏定义机器人清图
push bx
MOV AX,0600H
MOV Ch,row
dec ch,1
mov cl,col
dec cl,0
mov dh,ch
mov dl,cl
add dh,5
add dl,5
MOV BH,7
INT 10H
pop bx
endm
;----------------------------------------------------------------------------
DLY macrodlay1 ;宏定义延时程序
PUSH CX
PUSH DX
MOV DX,dlay1
DL1: MOV CX,6801
DL2:
LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
endm
;----------------------------------------------------------------------------
codesegment ;定义代码段
mainproc far ;主函数
assume cs:code,ds:data
start:
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov al,3 ;设置显示方式为80*25 16色图形方式
mov ah,0
int 10H
lea dx,info1 ;在显示器上显示字符串提示信息
mov ah,9
int 21h
lea dx,info2 ;在显示器上显示字符串提示信息
mov ah,9
int 21h
call car_disp ;初始汽车的位置
call man_disp ;初始机器人的位置
call MOVE
ret
main endp
;----------------------------------------------------------------------------
DISP PROC NEAR ;输出图形子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
SUB CH,CH
MOV CL,[SI]
INC SI
NEXT: ADD DH,[SI+2] ;改变行列坐标
ADD DL,[SI+3]
MOV AH,2 ;置光标位置DH为行、DL为列
INT 10H
MOV AL,[SI] ;取字符值
MOV BL,[SI+1] ;取字符属性
PUSH CX
MOV CX,1
MOV AH,9 ;显示字符
INT 10H
POP CX
ADD SI,4 ;SI指向下一个字符
LOOP NEXT
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DISP ENDP
;----------------------------------------------------------------------------
car_dispproc near ;汽车画图子程序
push si
lea si,CAR0 ;取汽车的图
cmp car_row1,20 ;设置汽车运动的边界
ja c0 ;行数大于20,跳到第4行
cmp car_row1,4 ;行数小于4,跳到第20行
jb c1
cmp car_col1,3 ;列数小于3,跳到第70列
jb c2
cmp car_col1,70 ;列数大于70,跳到第3列
ja c3
jmp cn
c0:
mov car_row1,4
jmp cn
c1:
mov car_row1,20
jmp cn
c2:
mov car_col1,70
jmp cn
c3:
mov car_col0,3
mov car_col1,3
jmp cn
cn:
mov bh,0 ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标
mov bl,car_row1
mov car_row0,bl
mov bl,car_col1
mov car_col0,bl
mov dh,car_row1
mov dl,car_col1
CALL DISP ;调用DISP画出汽车图形
pop si
ret
car_dispendp
;----------------------------------------------------------------------------
car_clearproc near ;汽车清图子程序
clear_car car_row0,car_col0 ;调用汽车清图宏
ret ;返回
car_clearendp
;----------------------------------------------------------------------------
man_dispproc near ;机器人画图子程序
push si
lea si,MANU ;取机器人的图
cmp man_row1,20 ;设置机器人运动的边界
ja n0 ;行数大于20,跳到第4行
cmp man_row1,4 ;行数小于4,跳到第20行
jb n1
cmp man_col1,3 ;列数小于3,跳到第70列
jb n2
cmp man_col1,70 ;列数大于70,跳到第3列
ja n3
jmp nn
n0:
mov man_row1,4
jmp nn
n1:
mov man_row1,20
jmp nn
n2:
mov man_col1,70
jmp nn
n3:
mov man_col0,3
mov man_col1,3
jmp nn
nn:
push bx ;row1赋给row0,col1赋给col0,即把现在的坐标保留,作为下次清屏的坐标
mov bh,0
mov bl,man_row1
mov man_row0,bl
mov bl,man_col1
mov man_col0,bl
pop bx
mov dh,man_row1
mov dl,man_col1
CALL DISP ;调用DISP画出机器人图形
pop si
ret
man_dispendp
;----------------------------------------------------------------------------
man_clearproc near ;机器人清图子程序
clear_man man_row0,man_col0 ;调用机器人清图宏
ret ;返回
man_clearendp
;----------------------------------------------------------------------------
MOVEprocnear ;控制汽车和机器人的运动
push ax
push bx
next1:
mov ah,01H ;取键盘缓冲区状态
int 16h
jnz next2 ;缓冲区无按键,等待
DLY dlay1
call car_clear ;汽车一直向右运动
inc car_col1
call car_disp
call man_clear ;机器人一直向左运动
dec man_col1
call man_disp
jmp next1
next2:
mov ah,0 ;从键盘读字符
int 16h
;判断选择------------------------------
up: ;W 汽车向上运动
cmp ah,11h
jnz down
call car_clear
dec car_row1
call car_disp
jmp next1
down: ;S 汽车向下运动
cmp ah,1Fh
jnz left
call car_clear
inc car_row1
call car_disp
jmp next1
left: ;A 汽车向左运动
cmp ah,1Eh
jnz right
call car_clear
dec car_col1
call car_disp
jmp next1
right: ;D 汽车向右运动
cmp ah,20h
jnz up1
call car_clear
inc car_col1
call car_disp
jmp next1
up1: ;机器人向上运动
cmp ah,48h
jnz down1
call man_clear
dec man_row1
call man_disp
jmp next1
down1: ;机器人向下运动
cmp ah,50h
jnz left1
call man_clear
inc man_row1
call man_disp
jmp next1
left1: ;机器人向左运动
cmp ah,4bh
jnz right1
call man_clear
dec man_col1
call man_disp
jmp next1
right1: ;机器人向右运动
cmp ah,4dh
jnz speedup1
call man_clear
inc man_col1
call man_disp
jmp next1
speedup1:
cmp ah,0dh ;"+"加速运动
jnz speedup2
sub dlay1,1000
jmp next1
speedup2:
cmp ah,4Eh ;"+"(小键盘)加速运动
jnz speeddown1
sub dlay1,1000
jmp next1
speeddown1:
cmp ah,0ch ;"-"减速运动
jnz speeddown2
add dlay1,1000
jmp next1
speeddown2:
cmp ah,4Ah ;"-"(小键盘)减速运动
jnz space1
add dlay1,1000
jmp next1
space1:
cmp ah,39h ;SPACE暂停运动
jnz exit1
space:
mov ah,0 ;从键盘读字符,AL=字符码,AH=扫描码
int 16h
cmp ah,1ch ;回车返回next1,否则继续等待从键盘读字符,实现暂停
jnz space
jmp next1
exit1:
cmp ah,01h ;ESC退出
jnz others
pop bx
pop ax
ret ;返回主程序
others: ;按其他键,无效,继续运行
jmp next1
MOVE ENDP
;---------------------------------------------------------------------------code ends
end start
更多推荐
JB C2汇编语言,求解汇编语言注释,大神尽量美剧都给上注释!!
发布评论