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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值