- 【WIN32汇编教程】(第一课)配置出WIN32汇编的开发环境
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 在学汇编的来加群
- 为什么因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正呢?
- 第6章 实验5 第二题
- 【WIN32汇编教程】(第四课)编写出第一个“hello ghosthouse”程序
- 【WIN32汇编教程】(第三课)了解win32汇编程序的基本结构
- 【WIN32汇编教程】(第二课)Makefile文件的编写和nmake工具的使用
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
[2011-05-13 00:10] 自制数字时钟 需要按alt+enter 开启全屏才能有闪烁效果
assume cs:code
code segment
setting:mov ax,cs
mov ds,ax
mov si,offset my_time
mov ax,20h
mov es,ax
mov di,0
mov cx,offset end_time-offset my_time
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[4*7ch],0
mov word ptr es:[4*7ch+2],20h
;================================================
mov ax,0b800h
mov es,ax
mov al,'/'
mov ah,00011100b
mov es:[12*0a0h+32*2],al
mov es:[12*0a0h+32*2+1],ah
mov es:[12*0a0h+38*2],al
mov es:[12*0a0h+38*2+1],ah
mov byte ptr es:[12*0a0h+44*2],'-'
mov byte ptr es:[12*0a0h+44*2+1],ah
mov al,':'
mov es:[12*0a0h+50*2],al
mov es:[12*0a0h+50*2+1],ah
mov ah,10011100b
mov es:[12*0a0h+56*2],al
mov es:[12*0a0h+56*2+1],ah
mov dl,61
;若果di初始化的值小于等于60,那么第一次判断很可能执行je start来再次循环读取判断,因为秒数不可能超过60 所以这里设置61
start:mov al,0
out 70h,al
in al,71h
cmp al,dl
je start
mov dl,al
call conversion
mov dh,58
mov cl,00011100b
int 7ch
mov al,2
out 70h,al
in al,71h
call conversion
mov dh,52
mov cl,00011100b
int 7ch
mov al,4
out 70h,al
in al,71h
call conversion
mov dh,46
mov cl,00011100b
int 7ch
mov al,7
out 70h,al
in al,71h
call conversion
mov dh,40
mov cl,00011100b
int 7ch
mov al,8
out 70h,al
in al,71h
call conversion
mov dh,34
mov cl,00011100b
int 7ch
mov al,9
out 70h,al
in al,71h
call conversion
mov dh,28
mov cl,00011100b
int 7ch
jmp start
;================================================
my_time:push ax
mov al,dh
mov bl,2
mul bl
mov bx,ax
mov al,12
mov ch,0a0h
mul ch
add bx,ax
mov ax,0b800h
mov es,ax
pop ax
mov es:[bx],ah
mov es:[bx+1],cl
mov es:[bx+2],al
mov es:[bx+3],cl
iret
end_time:nop
conversion:push cx
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
pop cx
ret
code ends
end setting
;==============================================
;只要把上面的源码编译链接后就能运行了
;运用了7ch中断显示和子程序转换
code segment
setting:mov ax,cs
mov ds,ax
mov si,offset my_time
mov ax,20h
mov es,ax
mov di,0
mov cx,offset end_time-offset my_time
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[4*7ch],0
mov word ptr es:[4*7ch+2],20h
;================================================
mov ax,0b800h
mov es,ax
mov al,'/'
mov ah,00011100b
mov es:[12*0a0h+32*2],al
mov es:[12*0a0h+32*2+1],ah
mov es:[12*0a0h+38*2],al
mov es:[12*0a0h+38*2+1],ah
mov byte ptr es:[12*0a0h+44*2],'-'
mov byte ptr es:[12*0a0h+44*2+1],ah
mov al,':'
mov es:[12*0a0h+50*2],al
mov es:[12*0a0h+50*2+1],ah
mov ah,10011100b
mov es:[12*0a0h+56*2],al
mov es:[12*0a0h+56*2+1],ah
mov dl,61
;若果di初始化的值小于等于60,那么第一次判断很可能执行je start来再次循环读取判断,因为秒数不可能超过60 所以这里设置61
start:mov al,0
out 70h,al
in al,71h
cmp al,dl
je start
mov dl,al
call conversion
mov dh,58
mov cl,00011100b
int 7ch
mov al,2
out 70h,al
in al,71h
call conversion
mov dh,52
mov cl,00011100b
int 7ch
mov al,4
out 70h,al
in al,71h
call conversion
mov dh,46
mov cl,00011100b
int 7ch
mov al,7
out 70h,al
in al,71h
call conversion
mov dh,40
mov cl,00011100b
int 7ch
mov al,8
out 70h,al
in al,71h
call conversion
mov dh,34
mov cl,00011100b
int 7ch
mov al,9
out 70h,al
in al,71h
call conversion
mov dh,28
mov cl,00011100b
int 7ch
jmp start
;================================================
my_time:push ax
mov al,dh
mov bl,2
mul bl
mov bx,ax
mov al,12
mov ch,0a0h
mul ch
add bx,ax
mov ax,0b800h
mov es,ax
pop ax
mov es:[bx],ah
mov es:[bx+1],cl
mov es:[bx+2],al
mov es:[bx+3],cl
iret
end_time:nop
conversion:push cx
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
pop cx
ret
code ends
end setting
;==============================================
;只要把上面的源码编译链接后就能运行了
;运用了7ch中断显示和子程序转换
评论次数(0) |
浏览次数(505) |
类型(我的代码) |
收藏此文 |