两个程序源码---ASM

来源:互联网 发布:qq网络营销软件 编辑:程序博客网 时间:2024/05/21 07:02

1------滚屏字幕程序源码

;-----------------------------------------
; 滚屏字幕程序
; 2013.4.21 
; by 蓝色冰点
;-----------------------------------------
assume cs:code, ds:data


data segment
db 'Welcome to qq group: 57338777!'
data ends


code segment


;-----------------------------------------
; 初始化各个段
; 将字符串送至显存
;-----------------------------------------
start: mov ax, data
mov ds, ax


mov ax, 0b800h
mov es, ax
mov si, 0
mov di, 160*12
mov cx, 30
s0: mov al, [si]
mov es:[di], al
inc si
inc di
inc di
loop s0


;----------------------------------------
; 将中间一行改成绿色高亮
;----------------------------------------
mov al, 00001010b
mov di, 160*12+1
mov cx, 80
s1: mov es:[di], al
inc di
inc di
loop s1


;----------------------------------------
; 下边代码控制字符滚动
;----------------------------------------
s3: mov cx, 79
mov di, 160*12
mov si, 160*12+2
push es:[160*12]
s2: mov ax, es:[si]
mov es:[di], ax
inc si
inc si
inc di
inc di


loop s2
pop es:[160*13-2]
call delay
mov cx, 2
loop s3               ; 死循环,下边两句其实执行不到


mov ax, 4c00h
int 21h


;-----------------------------------------
; 延时子过程
;-----------------------------------------
delay: push ax
push dx
mov dx, 1000h
mov ax, 0
s4: sub ax, 1
sbb dx, 0
cmp ax, 0
jne s4
cmp dx, 0
jne s4
pop dx
pop ax
ret
code ends
end start



显示日期时间程序源码

;----------------------------------------
;在屏幕中间显示日期和时间的程序
;2013.4.21
;           by 蓝色冰点
;----------------------------------------


assume cs:code


code segment
start: mov ax, 0b800h
mov es, ax


mov al, 00001010b
mov di, 160*12+1
mov cx, 80
s1: mov es:[di], al
inc di
inc di
loop s1
;----------------------------------------
;以上代码先把中间一行的前景色改成绿色高亮
;----------------------------------------
;-----------------------------------------
; 显示年份
;-----------------------------------------
time_s: mov al, 9
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2], ah
mov byte ptr es:[160*12+32*2+2], al
mov al, '/'
mov byte ptr es:[160*12+32*2+4], al


;-----------------------------------------
; 显示月份
;-----------------------------------------
mov al, 8
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2+6], ah
mov byte ptr es:[160*12+32*2+8], al
mov al, '/'
mov byte ptr es:[160*12+32*2+10], al


;-----------------------------------------
; 显示日期
;-----------------------------------------
mov al, 7
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2+12], ah
mov byte ptr es:[160*12+32*2+14], al
mov al, ' '
mov byte ptr es:[160*12+32*2+16], al


;-----------------------------------------
; 显示小时
;-----------------------------------------
mov al, 4
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2+18], ah
mov byte ptr es:[160*12+32*2+20], al
mov al, ':'
mov byte ptr es:[160*12+32*2+22], al


;-----------------------------------------
; 显示分钟
;-----------------------------------------
mov al, 2
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2+24], ah
mov byte ptr es:[160*12+32*2+26], al
mov al, ':'
mov byte ptr es:[160*12+32*2+28], al


;-----------------------------------------
; 显示秒数
;-----------------------------------------
mov al, 0
out 70h, al
in al, 71h
mov ah, al
mov cl, 4
shr ah, cl
and al, 00001111b
add ah, 30h
add al, 30h
mov byte ptr es:[160*12+32*2+30], ah
mov byte ptr es:[160*12+32*2+32], al

;-------------------------------------------------
; 全部显示完毕进行循环更新
;-------------------------------------------------
jmp  time_s


mov ax, 4c00h
int 21h


code ends
end start















































































原创粉丝点击