鱼C论坛

 找回密码
 立即注册
查看: 165|回复: 1

[技术交流] 实验14的函数实现

[复制链接]
发表于 2025-3-14 17:16:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于实验14,用年/月/日 时:分:秒格式显示问题,本人用了函数的实现方式,感觉思路更清晰些,现分享如下:


assume cs:code

data segment
        db 9,8,7,4,2,0                ;把日期在CMOS RAM中的存储单元作为本程序数据段
data ends

code segment

start:                mov ax,data
                        mov ds,ax
                        mov si,0

                        mov bx,160*10+12*2          ;指向显示地址的起始偏移地址
                        mov di,0                          ;相对bx的地址偏移量

                        mov cx,3                        ;前三次循环,取出年月日,中间用'/'隔开
        lp1:                call lpdata                        ;函数lpdata用来取出数据段数据,并转化为ASCII码
                        call store                        ;函数store用来在显示段存储要显示的数据
                        call signed1                ;函数signed1用来设置日期间的'/'
                        add di,2
                        inc si
                        loop lp1
                        sub di,2
                        mov dl,' '                        ;把日期后的第三个'/'用'  '代替
                        mov es:[bx][di],dl
                        mov es:[bx][di].1,0
                        add di,2
                       
                        mov cx,3                        ;这3次循环用来取出时间数据,并转化为ASCII码
        lp2:                call lpdata
                        call store
                        call signed2                ;signed2用来设置时间间的':'
                        add di,2
                        inc si
                        loop lp2
                        sub di,2
                        mov dl,'  '                        ;把显示时间的最后一个':'用'  '代替
                        mov es:[bx+di],dl
                        mov es:[bx+di].1,0
                       
                        mov ax,4c00h
                        int 21h
                       
        lpdata:        push cx
                        mov al,ds:[si]
                        out 70h,al
                        in al,71h
               
                        mov ah,al
                        mov cl,4
                        shr ah,cl
               
                        and al,00001111b
               
                        add ah,30h
                        add al,30h

                        pop cx
                        ret
               
               
store:                push dx

                        mov dx,0b800h
                        mov es,dx
                        mov es:[bx+di],ah
                        mov es:[bx+di].1,2
                        add di,2
                        mov es:[bx+di],al
                        mov es:[bx+di].1,2
                       
                        pop dx
                        ret
                       
signed1:        add di,2
                        mov dl,'/'
                        mov es:[bx+di],dl
                        mov es:[bx+di].1,2
                        ret
                       
signed2:        add di,2
                        mov dl,':'
                        mov es:[bx+di],dl
                        mov es:[bx+di].1,2
                        ret
                        mov ax,4c00h
                        int 21h
               
code ends
end start
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-3-14 17:16:37 | 显示全部楼层
It looks like you've shared an assembly language program that retrieves and displays the current date and time in the format `YYYY/MM/DD HH:MM:SS`. Could you clarify what specific help you need with this code? Are you looking for debugging assistance, optimization suggestions, or an explanation of certain parts?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 09:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表