汇编网首页登录博客注册
youthangel的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏

[2013-01-20 14:44] 屏幕上显示一个兔子图形,可以闪动的

图片载入中
;#mode=dos
;使用工具:点阵去模工具
;先画图编码,在解码显示
assume cs:code,ds:data
data segment
db 4,1,0
db 9,2,80h
db 4,82h,40h
db 2,45h,40h
db 4,0,80h
db 10h,0,20h
db 20h,0,10h
db 40h,0,8
db 80h,0,4
db 80h,0,4
db 82h,1,4
db 80h,0,4
db 88h,10h,44h
db 40h,0,4
db 30h,0,30h
db 8,0,40h

dw 8 dup(0)
data ends

stack segment
dw 16 dup(0)
stack ends

code segment
start:
mov ax,data
mov ds,ax
mov bx,0
mov ax,stack
mov ss,ax
mov sp,32
call dot;画点在(28,4)位置画一个24*16的点阵
mov dh,4
mov dl,28
call draw
call sleep

backshow:
mov bl,3
call changeColor
call sleep

mov bl,4
call changeColor
call sleep

mov bl,2
call changeColor
call sleep

mov bl,5
call changeColor
call sleep

jmp short backshow

mov ah,0
int 16h
mov ax,4c00h
int 21h
;--------------------------------------------
;延时子程序:具体时间于处理机的处理能力有关
;--------------------------------------------
sleep:
push bx
push cx
mov cx,02fffh
minus:
push cx
mov bx,0ffffh
mov cx,bx
self:
loop self
pop cx
loop minus
pop cx
pop bx
ret

;------------------------------
;改变颜色
;参数:颜色bl
;------------------------------
changeColor:
push ax
push bx
push ds
push si
mov ax,0b800h
mov ds,ax
mov si,4*160+57

mov cx,16
change1:
push cx

mov bp,0
mov cx,24
change2:
mov ds:[bp+si],bl 
add bp,2
loop change2
add si,160

pop cx
loop change1

pop si
pop ds
pop bx
pop ax
ret
;-----------------------------------
;算出每个数的二进制表示,放入data中
;参数:数al,存放位置ds:si
;-----------------------------------
row:
push ax
push bx
push cx
push dx
push si

mov bl,2
mov dh,0

mov cx,8
again:
mov ah,0
div bl;商在al中,余数在ah中
mov dl,ah
push dx;余数入栈
loop again

mov cx,8
outstack:
pop ax
mov [si],al
inc si
loop outstack

pop si
pop dx
pop cx
pop bx
pop ax
ret


;-------------------------
;画图
;参数:ds:bx指向图形数据,显示的列行(dl,dh)
;返回:无
;-------------------------
draw:

push ds
push bx
push dx
push si

mov si,48;保存2进制数据
mov cx,16
s2:
mov al,[bx]
call row;计算半行
call showstr;显现半行

mov al,[bx+1]
add dl,8
call row;计算半行
call showstr;显现半行

mov al,[bx+2]
add dl,8
call row;计算半行
call showstr;显现半行

add bx,3
sub dl,16
add dh,1
loop s2

mov ax,0b800h
mov ds,ax
mov si,16*160+64
mov ah,2

mov al,'I'
mov [si],ax
mov al,3
mov [si+14],ax
mov al,'U'
mov [si+26],ax
pop si
pop dx
pop bx
pop ds
ret


;--------------------------------
;从ds:si处取出八个数据显示
;参数:ds:si,显示位置dl,dh(列行)
;--------------------------------
showstr:
push ax
push bx
push cx
push dx
push es
push di
push si

mov ax,0b800h
mov es,ax

mov al,dh;行
mov bl,160
mul bl
add dl,dl;列
mov dh,0
add ax,dx
mov di,ax

mov ah,2
mov al,'*'

mov cx,8
showpiex:
push cx
mov cl,[si]
jcxz zero
mov es:[di],ax

zero:
inc si
add di,2
pop cx
loop showpiex

pop si
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret

;-------------------------
;画点
;-------------------------
dot:
push ax
push bx
push cx
push ds
push si

mov ax,0b800h
mov ds,ax
mov si,4*160+56

mov al,'.'
mov ah,2
mov cx,16
dots1:
push cx

mov bx,0
mov cx,24
dotss1:
mov [bx+si],ax
add bx,2
loop dotss1

add si,160
pop cx
loop dots1

pop si
pop ds
pop cx
pop bx
pop ax
ret
code ends
end start
评论次数(0)  |  浏览次数(926)  |  类型(冥思苦想) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码