|
主题 : : 实验14有些不懂,哪位能解释下? [待解决] |
回复[ 4次 ]
点击[ 307次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-08-15 15:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27 |
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx
mov di,160*12+2*30
push di
mov al,10
date: dec al
cmp al,7
jb time
call show
add di,6
jmp short date
time: sub al,2
cmp al,-2
je sign
call show
add di,6
jmp short time
sign:
pop di
add di,4 -------------这里为什么是加4?
mov byte ptr es:[di],'/'
add di,6 -------------这里为什么是加6?
mov byte ptr es:[di],'/'
add di,12 -------------这里为什么是加12?
mov byte ptr es:[di],':'
add di,6 -------------这里为什么是加6?
mov byte ptr es:[di],':'
jmp start
show: push ax
push cx
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:[di],ah
mov byte ptr es:[di+2],al
pop cx
pop ax
ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-15 17:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-08-15 18:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27 |
to sleepinglion 你的博文我看过了,可是还是没懂?
哪位能解释下!!!!!!!!!!!!!
求解中~~~~~~ | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-08-15 18:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx
mov di,160*12+2*30 ;初始化显存的偏移地址
push di ;此处为第12行第30列。
mov al,10 ;为了有规律可循,初始al的值为10(十进制)
rdate: ;读取‘日期’
dec al
cmp al,7
jb rtime ;当读完‘日期’后,就跳至标号rtime处
call show
add di,6
jmp short rdate
rtime: ;读取‘时间’
sub al,2 ;6-2=4。4号单元存放‘时’
cmp al,0feh ;为无符号数相减
je sign ;当读完‘秒’后,就跳至标号sign处
call show
add di,6
jmp short rtime
;先显示'日期',后显示'时间',然后在日期和时间中间插入'/'和':'。
sign: ;显示相关符号
pop di
add di,4 ;定位第一个'/'符号在显存的偏移地址,年份显示共占4字节(十位和个位各2字节)
mov byte ptr es:[di],'/'
add di,6 ;一个'/'2字节,月份4字节
mov byte ptr es:[di],'/'
add di,12 ;跳过日期与时间之间的空格('日'4字节,空格4字,'时'4字节)
mov byte ptr es:[di],':'
add di,6 ;一个':'2字节,分钟4字节
mov byte ptr es:[di],':'
in al,60h
cmp al,10h ;Q键的扫描码
je quit
jmp start ;以上4句为动态获取系统时间的关键
quit:
mov ax,4c00h
int 21h
show: push ax
push cx
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:[di],ah ;显示十位数码,1字符占2字节,"低字符,高属性"
mov byte ptr es:[di+2],al ;显示个位数码,1字符占2字节,"低字符,高属性"
pop cx
pop ax
ret
code ends
end start
再不懂,我也没办法了。那就很可能是你实验9没有自己独立完成。把实验9的材料好好看看。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-08-15 21:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27 |
to sleepinglion
显示:10/8/10--21:10:09 跳过日期与时间之间的空格('日'4字节,空格4字,'时'4字节)
你的意思是上面的(--表示2个空格)‘--’2个空格,要4个字。是这样吗? | | |
|