字符运动程序求改

来源:百度知道 编辑:UC知道 时间:2024/05/29 10:51:55
data segment
db 'd',0
N DB 10
data ends
stack segment
db 100 dup(0)
stack ends
;以上定义数据段和栈段
code segment
assume cs:code,DS:DATA
start:
mov dh,18 ;dh来定位行

mov dl,33 ;dl来定位列
FLG:ADD DL,1
mov cl,02h
mov ax,data
mov ds,ax
mov si,0

call show_str ;调用子程序

mov ax,4c00h
int 21h
;下面是子程序
;========================================
show_str:

mov ax,stack
mov ss,ax
mov sp,100
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
mov di,ax
do:
mov ch,0
push cx ;将颜色信息保存
mov al,[si]
mov ch,0
mov cl,al
jcxz out_show ;遇到0就跳出循环
pop cx ;将颜色信息回复
mov byte ptr es:[bx+di],al ;写入显卡,将字符显示
mov byte ptr es:[bx+di+1],cl ;在低位写入颜色信息
inc si
add di,2
jmp short do ;实现循环操作
out_show:

在显示下一个字符之后吧前一个字符消掉就好了,把表示位置的寄存器先push一下,然后减一,然后消掉该位置的字符,然后再pop出来就好了
===================================================
加个延时的过程:
DELAY:
;延时
PUSH AX
PUSH BX

MOV AX,0FFFFH ;不要改AX的值,AX是在第一层循环里做计数用的
;每循环完一次都会变成0FFFFH
;但如果你实在要改的话也没人管你
;反正基本不会影响到延时的长短
MOV BX,000FFH ;改变BX的值可以改变延时的长短
DELAY01:
DEC AX
JNZ DELAY01
DEC BX
JNZ DELAY01

POP BX
POP AX
RET
--------------------------------------------------
更高级一点的方法是修改时钟中断的中断向量,使其指向你的程序
并修改时钟中断的频率
不过这种方法很麻烦
===================================================
加个接收字符的中断就好了,INT 21H的07H号功能就行

运动的字符程序设计_爬爬虫
http://hi.baidu.com/dididu1515/blog/item/7509c9199ac855b34aedbca8.html
供楼主参考。