- [cutebe] 相当牛,这个苦思冥想也值了。^_^ 11/30 00:00
- [parse] 如果忽略消息循环,那么操作系统加载的程序很快就执行完了,就像DOS程序一闪而过,所以CPU会空闲下来 06/30 09:04
- [游客] 楼主好厉害,挺一下! 01/19 08:43
- [游客] 很不错。 01/04 18:36
- [chinatree] 潜力贴留名,沙发。 11/08 12:58
- [youthangel] 恩,这次对了 10/30 18:56
- [fpamc] mov bx,18 在这条指令的上边是不是要加一条sub dx,dx? 10/30 10:03
- [fpamc] 对的 10/27 11:19
- [fpamc] 对的 10/27 09:00
- [fpamc] 哦,对不起,看错了。实验13也有一个7ch中断 10/27 08:52
- [游客] 现在急需一个汇编大作业。。。。。。可以么。。。。。如果今天之内看见留言 就加 1765496715 12/28 16:52
- [youthangel] 这算是对我学习的鼓励吗?谢谢!咱们这样交流就可以了 10/11 15:48
- [fpamc] 多日观察,你的学习积极性挺高的。可以来我们群了。群号:75916434 10/11 10:58
[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
;使用工具:点阵去模工具
;先画图编码,在解码显示
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) |
类型(冥思苦想) |
收藏此文 |