微机原理课程设计之字符串动画显示

时间:2025-07-12

disp macro x,y, lengths,color,flag,var

mov ah,13h;fun number

mov al,1;the monitor show model

mov bh,0;page num

mov bl,color;color

mov cx,lengths;str lengths

mov dh,x;str line

mov dl,y;str col

ife flag

mov bp,offset var

else

mov bp,var

endif;set the bp value

int 10h

endm

;---------------------------------------

data segment

line equ 2

color equ 5fh

;color_board equ 3Dh

line1 db 177,56 dup(177),177

line2 db 177,56 dup(' '),177

line3 db 177,56 dup(177),177

ll equ $-line3

xx equ (80-ll)/2

line4 db "serial ports com1 and com2 automatic test program "

l equ $-line4

i equ (80-l)/2;每次右移位显示的起始列号为I

j equ i+l-1;第一次左移位显示的起始列号为J

lorg db j+1

lorg1 db l/2+20-3

lorg2 db l/2+i+3

count dw 0

count1 dw 0

data ends

;-----------------------------

CODE SEGMENT

ASSUME CS:CODE,DS:CODE,es:data

start:

MOV AX,CODE

MOV DS,AX

mov ax,0b800h

MOV ES,AX

cld

AGAIN: MOV AX,3

INT 10H

lea dx,MENU ;主菜单

mov ah,9

int 21h

input:

mov ah,0

int 16h

cp1:cmp al,'1'

jnz cp2

call sub01 ;字符串左右移动

jmp AGAIN ;返回到主菜单

cp2:cmp al,'2'

jnz cp3

call sub02 ;字符串左右移动

jmp AGAIN ;返回到主菜单

cp3:cmp al,'3'

jnz cp4

;call sub03 ;字符串左右移动

jmp AGAIN ;返回到主菜单

cp4:cmp al,'4'

jnz cp5

;call sub04 ;字符串左右移动

jmp AGAIN ;返回到主菜单

cp5:cmp al,'5'

jnz cp6

;call sub05 ;字符串左右移动

jmp AGAIN ;返回到主菜单

cp6:cmp al,'6' ;返回DOS

jnz input

lea dx,MESG

mov ah,9

int 21h

mov ah,1

int 21h

MOV AH,4CH

INT 21H

sub01:

;---------------------------------

START1:

mov ax,data

mov ds,ax

mov es,ax

mov ax,3

int 10h;clear the window

;------------------------------

disp line+0,xx,ll,color,0,line1

disp line+1,xx,ll,color,0,line2

disp line+2,xx,ll,color,0,line3

;-----------------------------

; init the board

;左移位

loopstr:

inc count;每一次左移位或右移位需要打印的字符数

mov cx,count

dec lorg

mov dl,lorg;每次循环减一,使得打印的起始列值左移一位

mov bp,offset line4

disp line+1,dl,cx,color,1,bp;显示右边的数 进行左移位

call delay

;右移位

mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位 mov cx,count

sub bp,cx;使得BP指向要打印的第一个字符

disp line+1,i,cx,color,1,bp;显示右边的数 进行右移位

call delay;调用延迟子程序

cmp count,l;判断是否全部打印结束

jne loopstr

s: dec count

jnz s

a:inc lorg

cmp lorg,j+1

jnz a

jmp start

mov ah,01h;调用Dos功能的键盘输入

mov ah,4ch;结束

int 21h

RET

sub02:

mov ax,data

mov ds,ax

mov es,ax

mov ax,3

int 10h;clear the window

;------------------------------

disp line+0,xx,ll,color,0,line1

disp line+1,xx,ll,color,0,line2

disp line+2,xx,ll,color,0,line3

;-----------------------------

; init the board

;左移位

loopstr1:inc count1;每一次左移位或右移位需要打印的字符数

mov cx,count1

dec lorg1

mov dl,lorg1;每次循环减一,使得打印的起始列值左移一位

mov bp,offset line4

disp line+1,dl,cx,color,1,bp;显示右边的数 进行左移位

call delay

;右移位

mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位 mov cx,count1

;inc lorg1

;mov dh,lorg1

sub bp,cx;使得BP指向要打印的第一个字符

disp line+1,lorg2,cx,color,1,bp;显示右边的数 进行右移位

call delay;调用延迟子程序

cmp count1,l/2;判断是否全部打印结束

jne loopstr1

s1: dec count1

jnz s1

a1:inc lorg1

cmp lorg1,l/2+20-3

a2:inc lorg2

cmp lorg2,l/2+i+3

jnz a2

jmp start

mov ah,01h;调用Dos功能的键盘输入

int 21h

mov ah,4ch;结束

int 21h

ret

;------------------------------

;延迟子程序

DELAY proc

push cx

push dx

mov ah,86h

d1:mov cx,0ffffh;千分秒,延迟时间

loop $

dec dx

jnz d1

mov dx,800

int 15h

pop dx

pop cx

RET

MENU DB 5 DUP(0AH)

DB 31 DUP(' '),'MAIN MENU',0DH,0AH

DB 25 DUP(' '),201,21 DUP(205),187,0DH,0AH

DB 25 DUP(' '),186,' 1.Origine ',186,0DH,0AH DB 25 DUP(' '),186,' 2.middle1 ',186,0DH,0AH DB 25 DUP(' '),186,' 3.middle2 ',186,0DH,0AH DB 25 DUP(' '),186,' 4.asymchronical ',186,0DH,0AH DB 25 DUP(' '),186,' 5.two lines ',186,0DH,0AH DB 25 DUP(' '),200,21 DUP(205),188,0DH,0AH

DB 28 DUP(' '),'Choice(1,2,3,4,5):$'

MESG DB 0dh,0ah,0dh,0ah,9,'Press any key to exit ...$' CODE ENDS

END start

…… 此处隐藏:1527字,全部文档内容请下载后查看。喜欢就下载吧 ……
微机原理课程设计之字符串动画显示.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219