鱼C论坛

 找回密码
 立即注册
查看: 2157|回复: 2

[已解决]实验14其中的小问题

[复制链接]
发表于 2020-8-11 04:50:01 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code, ds:data

data segment
        datatime: db'yy/mm/dd hh:mm:ss','$'
        s0         :       db 9,8,7,4,2,0               
data ends

;从CMOS ROM取出数据
;把数据换成十进制
;数据存入内存在存入显存

code segment
start:
                mov ax,data
                mov ds,ax               
                mov si,offset s0;用si来传给al内存单元       
               
                mov es,ax                ;写入内存前的准备工作
                mov di,offset datatime
               
                mov ax,0
                mov cx,6        ;循环6次
                ;取出CMOS ROM里面的数据
               
        s:               
                mov al,ds:[si]        ;把内存单元传递给al
                out 70h,al                ;通过70h端口写入内存单元
                in al,71                ;通过71h端口读入BCD码
                                ;si自增
               
                ;数据转换为十进制
                mov ah,al                ;用ah保存十位数码
                mov cl,4
                shr ah,cl                ;ah中是十位数值码
                and al,00001111b;al中是个位数值码
               
                add ah,30h                ;通过ascii变为十进制
                add al,30h                ;同上
               
                ;写入内存中
                mov es:[di],ah        ;十位数值码
                mov es:[di+1],al ;个位数值码
                inc si        
                add di,2
                loop s
               
                ;从内存传入到显存
                mov ah,2        ;设置光标
                mov bh,0        ;第0页
                mov dh,12        ;行号
                mov dl,3        ;列号
                int 10h
                mov dx,offset datatime        ;ds:dx指向显示时间段地址
                mov ah,9        ;从21h中断中调用9号子程序       
                int 21h       
               
                mov ax,4c00h
                int 21h
code ends
end start


上面写入内存那一段我看大家的答案是add di,3我没有搞懂为什么di是加三的,我理解的是ah跟al分别为8位寄存器两个都写入内存中也就是占用了一个字的大小也就是两个字节,所以我才写的加2,但是大家的答案都是加3,想请教一下为什么谢谢!
最佳答案
2020-8-11 08:53:16
你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
[di+0] = y
[di+1] = y
[di+2] = /
[di+3] = m

di+3是为了跳过分隔符 “/”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-11 08:53:16 | 显示全部楼层    本楼为最佳答案   
你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
[di+0] = y
[di+1] = y
[di+2] = /
[di+3] = m

di+3是为了跳过分隔符 “/”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 13:03:28 | 显示全部楼层
xieglt 发表于 2020-8-11 08:53
你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
[di+0] = y

哦对di是往内存写的,也就是上面的格式哈哈哈哈,明白了明白了!谢谢答疑!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 00:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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