|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,想请教一下为什么谢谢!
你的年月日格式定义为:
datatime: db'yy/mm/dd hh:mm:ss','$'
[di+0] = y
[di+1] = y
[di+2] = /
[di+3] = m
di+3是为了跳过分隔符 “/”
|
|