. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->端口
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验14有些不懂,哪位能解释下?  [待解决] 回复[ 4次 ]   点击[ 307次 ]  
yc2010
[帖 主]   [ 发表时间: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
sleepinglion
[第1楼]   [ 回复时间:2010-08-15 17:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22
下面的是我的博文,你看看吧。但愿能对你有帮助。
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=32721&kindLevel=1&kindId=46710&postId=48645&readSg=1
yc2010
[第2楼]   [ 回复时间:2010-08-15 18:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27
to sleepinglion 你的博文我看过了,可是还是没懂?
哪位能解释下!!!!!!!!!!!!!
求解中~~~~~~
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的材料好好看看。
yc2010
[第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个字。是这样吗?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved