汇编语言动画设计“robot”

更新时间:2023-07-24 21:49:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

机器人的代码,简单但可以避免你不挂科

Pushrmacrox,y,z,w
Pushx
Pushy
Pushz
Pushw
Endm
;堆栈顶数据弹出到寄存器宏定义
Poprmacrox,y,z,w
Popw
Popz
Popy
Popx
Endm
;定义堆栈段
Stacks segment
Dw 256 dup(?)
Stacks ends
;定义数据段
Datasegment
Robotdb7 ;机器人由7和符号组成
Db5ch,8eh,0,0 ;左手,字符属性,行偏移,列偏移
Db08h,06h,0,1 ;胸部,字符属性,行偏移,列偏移
Db2fh,8eh,0,1 ;右手,字符属性,行偏移,列偏移
Db0dbh,0ah,1,-1 ;腹部,字符属性,行偏移,列偏移
Db13h,7h,1,0 ;两腿,字符属性,行偏移,列偏移
Db02h,84h,-3,0 ;面部,字符属性,行偏移,列偏移
Db22h,94h,-1,0 ;天线,字符属性,行偏移,列偏移
Countdw0 ;保存字符个数
Pointerdw0 ;保存字符首地址
Linedb0 ;保存行号
Columndb0 ;保存列号
Dataends

Codessegment
Assume cs:codes,ds:data,es:data,ss:stacks
Start: movax,data
Movds,ax
Moves,ax
;设置为80×25彩色文本方式
mov ah,0
mov al,3
int 10h
;清屏幕
Call clear
Lea di,robot ;数据段首地址送DI
Mov dx,0808h ;显示的起始行号和列号
Mov bh,0
Call moves ;调用MOVES子程序
Call clear ;清屏幕
Mov ah,4ch ;主程序结束返回DOS
Int 21h

Movesproc ;机器人移动子程序
Pushrax,bx,cx,dx ;保存寄存器内容
Pushdi
Xorch,ch
Movcl,[di] ;字符个数送CX
Incdi ;指向第一个显示符号
Movcount,cx ;保存字符个数
Movpointer,di ;保存字符首地址
Movline,dh ;保存行号
Movcolumn,dl ;保存列号
Next: add dh,[di+2] ;根据偏移值计算下一个符号的行号
Adddl,[di+3] ;计算列号
Cmpdl,80 ;判断是否到屏幕最右端
Jbwrite ;否,继续画
Popdi
Poprax,bx,cx,dx
Ret

Write: mov ah,2
Int10h ;设置光标位置
Mova
l,[di] ;取字符
Movbl,[di+1] ;取字符属性
Pushcx ;保存计数值
;设置写彩色字符
mov ah,9
mov cx,1

机器人的代码,简单但可以避免你不挂科

int 10h
Popcx ;恢复计数值
Adddi,4 ;指向下一个显示字符
Loop next ;机器人没画完转next
Call delay ;延时子程序
Call Erase ;清除机器人子程序
Jmpshort next
Movesendp

Eraseproc
Movcx,count ;字符个数送CX
Movdi,pointer ;字符首地址送DI
Movdh,line ;行号送DH
Movdl,column ;列号送DL
l: adddh,[di+2] ;根据相对偏移计算行号
mov ah,2 ;设置光标位置
add dl,[di+3]
int 10h
moval,[di] ;取字符
movbl,0 ;字符属性为黑底黑字
pushcx
mov ah,9 ;写字符
mov cx,1
int 10h
popcx
adddi,4 ;指向下一个字符
loopl ;未清除完转L
movcx,count ;为重画机器人做准备
movdi,pointer
movdh,line
inccolumn
movdl,column
ret
eraseendp

delayproc ;延时子程序
pushrax,bx,cx,dx
mov dx,2000
go: mov cx,50000
repeat: loop repeat
dec dx
jne go
popr ax,bx,cx,dx
ret
delayendp

clearproc ;清屏幕子程序
pushrax,bx,c
x,dx
mov bh,7
mov dx,184fh
mov ax,0600h
mov cx,0
int 10h
popr ax,bx,cx,dx
ret
clearendp
codesends
end start


本文来源:https://www.bwwdw.com/article/p0lm.html

Top