微机原理课程设计之字符串动画显示
时间:2025-07-12
时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……上一篇:急救知识培训内容
下一篇:村居后备干部参考考试题库及答案