- [chinatree] 有些事,努力去做了不一定能成功,但是不去做是绝对不会成功的。 11/09 01:14
- [fpamc] 哇咔咔!不错不错。。 07/09 01:09
- [fpamc] 对的。 07/05 07:22
- [ltp1234] 哦。。。我也是发现,好像只能重启虚拟机 06/28 07:05
- [fpamc] 说实话,还可以简化。 如果学了外中断,就可以实现按键退出。 你的程序现在是死循环。 06/27 07:24
- [ltp1234] 恩,明白,看别人说可以动态,我一想也是,最后加上jmp语句应该就可以了。 05/16 22:36
- [tomato] 可以来个循环执行。 05/16 22:02
- [ltp1234] 动画怎么制作成效果图?不懂? 05/15 07:01
- [tomato] 能看到效果图就好了...... 05/15 00:07
- [ltp1234] 恩,谢谢fpamc,忘了加h,验证没有问题 05/14 23:53
- [jeremy] 可以加你好友吗?我的469614823 08/07 14:38
[2012-05-16 19:24] 实验14,
将之前做的显示字符串拿来直接用了,发现确实后面的内容得靠前面掌握才能进行饿。代码如下:
assume cs:code
data segment
db 32 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
mov ax,data
mov ds,ax
mov si,0
mov ax,stack
mov ss,ax
mov sp,16
;==读取年份==
mov cx,4
mov al,9
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],'/'
add si,2
;==读取月份==
mov al,8
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],'/'
add si,2
;==读取日==
mov al,7
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],' '
add si,2
;==读取小时==
mov al,4
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],':'
add si,2
;==读取分钟==
mov al,2
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],':'
add si,2
;==读取秒钟==
mov al,0
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov si,0
mov dh,12
mov dl,40
mov cl,2
call show_str
mov ax,4c00h
int 21h
;==显示字符串show_str==
;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
show_str:
push bp
push bx
push ax
push di
push si
mov ax,0B800h
mov es,ax
mov al,dh
mov bl,160
mul bl
mov di,ax
mov al,dl
mov bl,2
mul bl ;偏移地址=dh*160+dl*2
add di,ax ;di存显存缓冲区的偏移地址,es存段基址
mov bl,cl ;bl暂存cl的颜色值,好像只有bx可用了,要不cl的值就要入栈了
s1:
mov al,ds:[si]
mov ah,bl
mov es:[di],ax
mov cl,ds:[si]
mov ch,0
add si,2
add di,2
jcxz s2
jmp short s1
s2:
pop si
pop di
pop ax
pop bx
pop bp
ret
code ends
end
assume cs:code
data segment
db 32 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
mov ax,data
mov ds,ax
mov si,0
mov ax,stack
mov ss,ax
mov sp,16
;==读取年份==
mov cx,4
mov al,9
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],'/'
add si,2
;==读取月份==
mov al,8
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],'/'
add si,2
;==读取日==
mov al,7
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],' '
add si,2
;==读取小时==
mov al,4
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],':'
add si,2
;==读取分钟==
mov al,2
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov ds:[si],':'
add si,2
;==读取秒钟==
mov al,0
out 70h,al
in al,71h
mov ah,al
shr al,cl
add al,30h
mov ds:[si],al
add si,2
and ah,00001111b
add ah,30h
mov ds:[si],ah
add si,2
mov si,0
mov dh,12
mov dl,40
mov cl,2
call show_str
mov ax,4c00h
int 21h
;==显示字符串show_str==
;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)
; (cl)=颜色,ds:si指向字符串的首地址
;返回:无
show_str:
push bp
push bx
push ax
push di
push si
mov ax,0B800h
mov es,ax
mov al,dh
mov bl,160
mul bl
mov di,ax
mov al,dl
mov bl,2
mul bl ;偏移地址=dh*160+dl*2
add di,ax ;di存显存缓冲区的偏移地址,es存段基址
mov bl,cl ;bl暂存cl的颜色值,好像只有bx可用了,要不cl的值就要入栈了
s1:
mov al,ds:[si]
mov ah,bl
mov es:[di],ax
mov cl,ds:[si]
mov ch,0
add si,2
add di,2
jcxz s2
jmp short s1
s2:
pop si
pop di
pop ax
pop bx
pop bp
ret
code ends
end
评论次数(2) |
浏览次数(633) |
类型(汇编作业) |
收藏此文 |